:::info **<第11回Web会議日程>** 2024年09月18日(水)19:00から ::: ## 第10回 課題 ### ・課題 **天気予報Appを実行する「<span style="color:blue">WeatherForecast.py</span>」に 以下の情報を追加してください。 ■風の強さ ■波の高さ ■最高気温、最低気温 ■6時間毎の降水確率** **<修正前>**  **<修正後>**  ----- ### ・回答例 「<span style="color:blue">WeatherForecast.py</span>」 ※一部抜粋 ```python= # -*- coding:utf-8 -*- import requests import tkinter # GetWeatherForecast関数を定義 def GetWeatherForecast(index): # 天気予報APIのURLを定義 url = "https://weather.tsukumijima.net/api/forecast/city/130010" # 天気予報APIにリスクエスト response_json = requests.get(url) # レスポンスを辞書型に変換 response_dict = response_json.json() # 対象の天気予報情報を取得 weatherinfo = response_dict["forecasts"][index] # date (予報日) date = weatherinfo["date"] # ~省略~ # 風の強さ wind = weatherinfo["detail"]["wind"] # 波の高さ wave = weatherinfo["detail"]["wave"] # temperature(最低・最高気温) min_temp = weatherinfo["temperature"]["min"]["celsius"] max_temp = weatherinfo["temperature"]["max"]["celsius"] # chanceOfRain(降水確率) T00_06 = weatherinfo['chanceOfRain']['T00_06'] T06_12 = weatherinfo['chanceOfRain']['T06_12'] T12_18 = weatherinfo['chanceOfRain']['T12_18'] T18_24 = weatherinfo['chanceOfRain']['T18_24'] # 天気予報の結果として返すメッセージを定義 msg = (""" 【{0}の天気】 日付:{1} 予報:{2} 風の強さ:{3} 波の高さ:{4} 最低気温:{5} 最高気温:{6} 降水確率: 00時~06時:{7} 06時~12時:{8} 12時~18時:{9} 18時~24時:{10} """.format(dateLabel, date, telop, wind, wave, min_temp, max_temp,T00_06,T06_12,T12_18,T18_24)) # label2のtextを更新 label2["text"] =(msg) return # ~省略~ ``` ### ・解説 「<span style="color:blue">WeatherForecast.py</span>」 #### 1. 追加情報の取得 天気予報APIからのレスポンスを辞書型に変換した値が変数「response_dict」に格納されている。  #### ・風の強さ "風の強さ"取得処理を追加して変数に代入 "風の強さ"は キー「forecasts」に対応する値の配列の キー「detail」に対応する辞書の キー「wind」に対応する値 から取得できる ```python= wind = weatherinfo["detail"]["wind"] ``` #### ・波の高さ "波の高さ"取得処理を追加して変数に代入 "波の高さ"は キー「forecasts」に対応する値の配列の キー「detail」に対応する辞書の キー「wave」に対応する値 から取得できる ```python= wind = weatherinfo["detail"]["wave"] ``` #### ・最高気温、最低気温 "最高気温"、"最低気温"取得処理を追加して変数に代入 "最高気温"は キー「forecasts」に対応する値の配列の キー「temperature」に対応する辞書の キー「max」に対応する辞書の キー「celsius」に対応する値 から取得できる ```python= max_temp = weatherinfo["temperature"]["max"]["celsius"] ``` "最低気温"は 上記のキー「max」をキー「min」に変更すれば取得できる ```python= min_temp = weatherinfo["temperature"]["max"]["celsius"] ``` #### ・6時間毎の降水確率 6時間毎の降水確率をそれぞれに取得処理を追加して変数に代入 "0 時から 6 時までの降水確率"は キー「forecasts」に対応する値の配列の キー「chanceOfRain」に対応する辞書の キー「T00_06」に対応する値 から取得できる ```python= T00_06 = weatherinfo['chanceOfRain']['T00_06'] ``` 6時間毎の降水確率は、 キー「T00_06」をそれぞれ対応するキーに変更すれば取得できる ```python= T06_12 = weatherinfo['chanceOfRain']['T06_12'] T12_18 = weatherinfo['chanceOfRain']['T12_18'] T18_24 = weatherinfo['chanceOfRain']['T18_24'] ``` #### 2.メッセージの修正 GUIに表示するメッセージを変数「msg」に、 上記で取得した情報を追記する ----- ### ・天気予報API(livedoor 天気互換)について :::warning **<天気予報API(livedoor 天気互換)とは>** 無料で天気予報を取得できるWebAPIを用意してくれているサイト https://weather.tsukumijima.net/ 以下のURLに地域別に定義されたCITYパラメータを追加してGETリスエストを送ると、JSON形式で天気予報の情報がレスポンスとして返される https<a href=""></a>://weather.tsukumijima.net/api/forecast/city/○○ ▼CITYパラメータの定義 https://weather.tsukumijima.net/primary_area.xml ::: ----- ### ・tkinterについて :::warning **<tkinterとは>** GUIPython からGUIを構築・操作するためのライブラリ、標準ライブラリの1つ メインウィンドウにラベルやボタンなどのパーツ(ウィジェット)を配置して構築する **<メインウィンドウ>** GUIのベースとなる**ウィンドウそのもの** 「Tk」クラスをインスタンス化することで生成できる スクリプトの最後でループさせることで、スクリプトを終了させず、GUI操作の待機をさせることができる **<ラベル(Label)>** Tkinterに備わる**文字を表示させる**ためのウィジェット 「Labal」クラスをインスタンス化して生成できる オプションを設定することで、フォント・サイズ・太さなどを変更可能 **<ボタン(Button)>** Tkinterに備わる**ボタンを生成するため**ためのウィジェット 「Button」クラスをインスタンス化して生成できる オプションで**ボタンクリック時の動作**を指定可能 <BR> ▼天気予報Appのウィジェット配置イメージ  ::: ------ ### ・requestsについて :::warning **<requestsとは>** HTTP通信用のPythonのライブラリ GET、POST、PUTなどのメソッドが用意されている 今回は、天気予報APIにGETリクエストを送るために使用 外部モジュールのため、利用するにはインストールの必要がある ``` pip install requests ``` <br> **<GETメソッド>** **`requests.get(リクエスト送信先URL,リクエストパラメータ)`** URLに対してGETリクエストを送ることができる リスエストの結果が、Responseオブジェクトとして返される ::: -----
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up