Python勉強会
<第8回Web会議日程>
2022年08月24日(水) 19:00から
「天気予報API」 に対し、「requests」 ライブラリを利用し、GETリクエストを送り、レスポンスデータを取得する。
取得結果は 「tkinter」 ライブラリを使用し、GUIで表示させる。
<天気予報API(livedoor 天気互換)とは>
無料で天気予報を取得できるWebAPIを用意してくれているサイト
https://weather.tsukumijima.net/
以下のURLに地域別に定義されたCITYパラメータを追加してGETリスエストを送ると、JSON形式で天気予報の情報がレスポンスとして返される
https://weather.tsukumijima.net/api/forecast/city/○○
▼CITYパラメータの定義
https://weather.tsukumijima.net/primary_area.xml
<requestsとは>
HTTP通信用のPythonのライブラリ
GET、POST、PUTなどのメソッドが用意されている
今回は、HTTPで天気予報APIにGETリクエストを送るために使用
外部モジュールのため、利用するにはインストールの必要がある
pip install requests
<GETメソッド>
requests.get(リクエスト送信先URL)
URLに対してGETリクエストを送ることができる
リスエストの結果が、Responseオブジェクトとして返される
<JSONとは>
「JavaScript Object Notation」の略で、「JavaScriptのオブジェクトの書き方を元にしたデータ定義方法」のこと
<JSONの形式>
・{} の中にキーと値をコロンで区切って記述
・カンマで区切ると、キーと値の組み合わせを複数記述可能
・[]を使うことで配列の表現も可能
⇒Pythonでは、辞書型として取り込むことが可能
<tkinterとは>
GUIPython からGUIを構築・操作するためのライブラリ、標準ライブラリの1つ
メインウィンドウにラベルやボタンなどのパーツ(ウィジェット)を配置して構築する
<メインウィンドウ>
GUIのベースとなるウィンドウそのもの
「Tk」クラスをインスタンス化することで生成できる
スクリプトの最後でループさせることで、スクリプトを終了させず、GUI操作の待機をさせることができる
<ラベル(Label)>
Tkinterに備わる文字を表示させるためのウィジェット
「Labal」クラスをインスタンス化して生成できる
オプションを設定することで、フォント・サイズ・太さなどを変更可能
<ボタン(Button)>
Tkinterに備わるボタンを生成するためためのウィジェット
「Button」クラスをインスタンス化して生成できる
オプションでボタンクリック時の動作を指定可能
▼天気予報Appのウィジェット配置イメージ
1 GetWeatherForecast関数を定義
1-1 変数「url」に天気予報APIのURLを代入
1-2 1-1で代入したURLに対し、GETリクエストを送信した結果のJSONデータを変数「response_json」に代入
1-3 変数「response_json」のJSONデータを辞書型に変換して変数「response_dict」代入
1-4 変数「weatherinfo」に変数「response_dict」のKeyが"forecasts"の値のうち、Keyが変数「index」の値を代入
1-5 変数「date」に変数「response」のKeyが"date"の値を代入
1-6 変数「dateLabel」に変数「response」のKeyが"dateLabel"の値を代入
1-7 変数「telop」に変数「response」のKeyが"telop"の値を代入
1-8 label2のtextパラメータに、取得した天気予報情報を代入
2 GUIのパーツを生成・定義
2-1 変数「root」にメインウィンドウに対応するTkインスタンスを生成して代入
2-2 メインウィンドウ「root」のタイトルを設定
2-3 メインウィンドウ「root」のサイズを設定
2-4 変数「label1」にLabelインスタンスを生成して代入
2-5 「label1」を配置
2-6 変数「label2」にLabelインスタンスを生成して代入
2-7 「label2」を配置
2-8 変数「button1」にButtonインスタンスを生成して代入
2-9 「button1」を配置
2-A 変数「button2」にButtonインスタンスを生成して代入
2-B 「button2」を配置
2-C 変数「button3」にButtonインスタンスを生成して代入
2-D 「button3」を配置
2-E メインウィンドウ「root」をループで起動
<GetWeatherForecast関数>
GetWeatherForecast関数では、レスポンスのJSONデータ中の多数の情報の中から、
キーが「forecasts」の値を天気予報情報として取得している
<キー「forecasts」の値について>
キーが「forecasts」の値は以下のように、3つの辞書の配列として格納されている
▼キー「forecasts」 ※一部抜粋
<データ取得方法>
明日のキーが「telop」の値を取得する場合、以下のように記述する
# キーが「forecasts」の値の配列のうち、2つ目の辞書を指定
weatherinfo = response_dict["forecasts"][1]
# キーが「telop」の値を指定
telop = weatherinfo["telop"]
※天気予報APIのレスポンスは
サイトの「JSON データサンプル」で参照可能