Pythonで天気APIを使って天気の情報を取得する方法をご紹介します。
Pythonを使えば無料で簡単に天気の情報を取得出来ます。
それでは天気の情報を取得する方法を解説します。
Pythonで天気APIを使って天気の情報を取得する
使用するAPI
今回は使用するAPIはlivedoorが提供しているAPIを使用します。
APIと言ってもプログラムのコードの中に何十行にわたって組み込んで使用するものでは無く、コマンドは通常のWEBページのURLの形をしており、通常のWEBページを見る時のようにこのURLにアクセスするだけで天気の情報が取得出来てしまいます。
最近ネットで公開されている情報は殆どがこの形なので、このWEB APのI使い方を覚えましょう!
Livedoorの天気API:
http://weather.livedoor.com/forecast/webservice/json/v1
実際にはこれだけでは情報が取得出来ません。
感のいい人は気づいたかもしれませんが。コレではどの地域の天気を取りたいのかわかりません。
LivedoorのWEB APIでは上記のAPIの末尾に「?」を付けてクエリパラメータをつける必要があります。
ここでのクエリパラメータとは天気の地域コードになります。
地域コードの調べ方
では地域コードを調べ方を説明します。
地域コードは以下のURLをWEBでアクセスすると表示されるのでこれで確認出来ます。
http://weather.livedoor.com/forecast/rss/primary_area.xml
地域コードは、上の図の赤で囲んだ部分に書かれています。
北海道の稚内であれば「011000」と言うことになります。
他の地域はスクローし行くと全国のコードが確認できます。
今回は、東京の「130010」を使って天気の情報を取得してみます。
天気の情報の取得
電気の情報を取得するPythonのコードは次の通り。
1 import requests
2
3 url = ‘http://weather.livedoor.com/forecast/webservice/json/v1’
4 payload = {‘city’:’130010′}
5 tenki_data = requests.get(url, params=payload).json()
6 print(tenki_data)
1行目:
天気の情報を取得するのにrequestsライブラリを使うのでimportします。
3行目:
WEB APIをurlに代入
4行目:
地域コードをpayloadに代入します
5行目:
requests.get()で天気データを取得します。引数にurlとparamsがセットされています。これで、urlに地域コードをセットした状態でpaylodeで指定したコードの地域の天気が取得出来ます。
6行目:
取得した情報を表示します。
表示はJSON形式で表示されます。
このコードを実行結果は次の通り。
でも大量の情報が取得されます。
これでは欲しい情報を見るのが大変です。
そこで次は欲しい情報を取得するコードを追加してみます。
欲しい情報の抽出
取得したデータはjson形式で、さらにPythonの辞書形式で書かれています。
そこでまずkeyを取得してみましょう。
tenki_data.keys()
これを実行すると次のような表示が出ました。
dict_keys(['pinpointLocations', 'link', 'forecasts', 'location', 'publicTime', 'copyright', 'title', 'description'])
このサイトでは次のキーが有ることがわかりました。
- pointlocations:ピンポイント天気予報の地点
- link:各地域の天気予報のURL
- forecasts:天気予報(天気・気温・湿度)
- publictime:天気予報を発表した年/月/日/時間
- copyright:コピーライト(日本気象協会になっていました)
- title:タイトル(東京都の東京の天気と表示されました!)
- description:天気の概況
今回は東京の天気の情報を取りたいのでこの中から
タイトルと、天気予報と、予報の更新時間を表示して見たいと思います。
print(tenki_data[‘title’])
print(tenki_data[‘forecasts’][0][‘date’])
print(tenki_data[‘forecasts’][0][‘telop’])
print(tenki_data[‘forecasts’][0][‘temperature’][‘max’][‘celsius’])
print(tenki_data[‘forecasts’][0][‘temperature’][‘max’][‘fahrenheit’])
print(tenki_data[‘forecasts’][1][‘date’])
print(tenki_data[‘forecasts’][1][‘telop’])
print(tenki_data[‘forecasts’][1][‘temperature’][‘max’][‘celsius’])
print(tenki_data[‘forecasts’][1][‘temperature’][‘max’][‘fahrenheit’])
print(tenki_data[‘publicTime’])
上記のコードのようにtenki_dataという配列にjsonコードを取り込んで来ているので、この配列からkeyを使ってタイトルと、天気予報と、天気の更新時間を取り出しています。
天気予報のforcastだけキーだけじゃなく色々と引数が付いていますよね、これは情報が階層状になっているのでこれのどの部分を参照するのかを指定しています。
ネストになっている部分のキーの情報は天気情報の取得のところで書いたコードの出力を見て表示したい場所のキーを自分で探してみましょう!
まとめ
Pythonで作ったコード全体と出力結果は次の通りです。
東京の天気を表示するコード
import requests
url = ‘http://weather.livedoor.com/forecast/webservice/json/v1’
payload = {‘city’:’130010′}
tenki_data = requests.get(url, params=payload).json()
print(tenki_data[‘title’])
print(tenki_data[‘forecasts’][0][‘date’])
print(tenki_data[‘forecasts’][0][‘telop’])
print(tenki_data[‘forecasts’][0][‘temperature’][‘max’][‘celsius’])
print(tenki_data[‘forecasts’][0][‘temperature’][‘max’][‘fahrenheit’])
print(tenki_data[‘forecasts’][1][‘date’])
print(tenki_data[‘forecasts’][1][‘telop’])
print(tenki_data[‘forecasts’][1][‘temperature’][‘max’][‘celsius’])
print(tenki_data[‘forecasts’][1][‘temperature’][‘max’][‘fahrenheit’])
print(tenki_data[‘publicTime’])
出力結果
東京都 東京 の天気
2018-08-25
晴のち曇
35
95.0
2018-08-26
晴時々曇
35
95.0
2018-08-25T11:00:00+0900