###### tags: `Python勉強会` # Python勉強会 第8回 課題 :::info **<第8回Web会議日程>** 2022年08月24日(水) 19:00から ::: ## 課題 #### 天気予報Appを実行する「<span style="color:blue">WeatherForecast.py</span>」がある。 #### このAppで表示する情報に以下を追加してください。 #### #### ・風の強さ #### ・波の高さ #### ・最高気温、最低気温 #### ・6時間毎の降水確率 ------ ### ・スクリプト概要 **「天気予報API」** に対し、**「requests」** ライブラリを利用し、GETリクエストを送り、レスポンスデータを取得する。 取得結果は **「tkinter」** ライブラリを使用し、GUIで表示させる。 ------ ### ・天気予報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 ::: ### ・requestsについて :::warning **<requestsとは>** HTTP通信用のPythonのライブラリ GET、POST、PUTなどのメソッドが用意されている 今回は、HTTPで天気予報APIにGETリクエストを送るために使用 外部モジュールのため、利用するにはインストールの必要がある ``` pip install requests ``` <br> **<GETメソッド>** **`requests.get(リクエスト送信先URL)`** URLに対してGETリクエストを送ることができる リスエストの結果が、Responseオブジェクトとして返される ::: ### ・JSONについて :::warning **<JSONとは>** 「JavaScript Object Notation」の略で、「JavaScriptのオブジェクトの書き方を元にしたデータ定義方法」のこと **<JSONの形式>** ・{} の中にキーと値をコロンで区切って記述 ・カンマで区切ると、キーと値の組み合わせを複数記述可能 ・[]を使うことで配列の表現も可能 ⇒Pythonでは、**辞書型**として取り込むことが可能 ::: ### ・tkinterについて :::warning **<tkinterとは>** GUIPython からGUIを構築・操作するためのライブラリ、標準ライブラリの1つ メインウィンドウにラベルやボタンなどのパーツ(ウィジェット)を配置して構築する **<メインウィンドウ>** GUIのベースとなる**ウィンドウそのもの** 「Tk」クラスをインスタンス化することで生成できる スクリプトの最後でループさせることで、スクリプトを終了させず、GUI操作の待機をさせることができる **<ラベル(Label)>** Tkinterに備わる**文字を表示させる**ためのウィジェット 「Labal」クラスをインスタンス化して生成できる オプションを設定することで、フォント・サイズ・太さなどを変更可能 **<ボタン(Button)>** Tkinterに備わる**ボタンを生成するため**ためのウィジェット 「Button」クラスをインスタンス化して生成できる オプションで**ボタンクリック時の動作**を指定可能 <BR> ▼天気予報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パラメータに、取得した天気予報情報を代入 <BR> **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」をループで起動 <BR><BR> ### ・GetWeatherForecast関数 補足 :::warning **<GetWeatherForecast関数>** GetWeatherForecast関数では、レスポンスのJSONデータ中の多数の情報の中から、 キーが「forecasts」の値を天気予報情報として取得している **<キー「forecasts」の値について>** キーが「forecasts」の値は以下のように、3つの辞書の配列として格納されている ▼キー「forecasts」 ※一部抜粋  **<データ取得方法>** 明日のキーが「telop」の値を取得する場合、以下のように記述する ``` # キーが「forecasts」の値の配列のうち、2つ目の辞書を指定 weatherinfo = response_dict["forecasts"][1] # キーが「telop」の値を指定 telop = weatherinfo["telop"] ``` <br> ※天気予報APIのレスポンスは [サイト](https://weather.tsukumijima.net/)の「JSON データサンプル」で参照可能 :::
×
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