ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【python】pythonでHTTP通信を行って天気を取得する

 pythonでHTTP通信をやったことなかったことに気づいたのでやってみた備忘録です。

 やっていることはほぼコピペなので詳しく知りたい方は参考資料のページを参照してください。

 では始めます。


1:requestsのインストール
 HTTP通信を行うにはrequestsをimportする必要があるので、まずpipでrequestsをインストールします。

 コマンドプロンプトPowerShellを起動させて以下のコマンドを入力します。

$ pip install requests

 ちゃんとインストールされているかの確認は以下のコマンドを実行して出てくる一覧に「requests」が存在していればOKです。

$ pip list

Package               Version
--------------------- ----------
.
.
.
requests              2.23.0
.
.
.


2:requestsを使って天気を取得する
 HTTP通信のサンプルとして天気を取得してみます。

 今回はLivedoorで提供されているAPIを使います。このAPIのURLの末尾に地域コードのクエリを追加して使用します。

 地域コードは以下のxmlファイルから調べます。

 例えば「東京」で調べるとIDは「130010」なので以下のURLを実行すると東京の天気の情報が取得できます。

 これで使い方がわかったのでpythonのrequestsで記述します。

python_forecast.py

import sys
import requests

def main():
    args = sys.argv

    if(len(args) < 2):
        print("ID None!")
        return

    url = "http://weather.livedoor.com/forecast/webservice/json/v1"
    payload = {"city":args[1]} # 都市番号を設定
    tenki_data = requests.get(url, params=payload).json() # jsonで情報を取得

    print("------------------------")
    print("title:", tenki_data["title"])
    print("Publication date:", tenki_data["publicTime"]) # 天気予報の発表時間
    print("")

    # 本日の天気
    print("date:", tenki_data["forecasts"][0]["date"])
    print("forecast:",tenki_data["forecasts"][0]["telop"])

    # 温度についてはnullで来る場合もあるので判定
    first_celsius = None
    first_fahrenheit = None
    if (tenki_data["forecasts"][0]["temperature"]["max"] != None):
        first_celsius = tenki_data["forecasts"][0]["temperature"]["max"]["celsius"]
        first_fahrenheit = tenki_data["forecasts"][0]["temperature"]["max"]["fahrenheit"]
    print("max celsius:", first_celsius)
    print("max fahrenheit:", first_fahrenheit)

    print("")

    # 翌日の天気
    print("date:", tenki_data["forecasts"][1]["date"])
    print("forecast:",tenki_data["forecasts"][1]["telop"])

    second_celsius = None
    second_fahrenheit = None
    if (tenki_data["forecasts"][1]["temperature"]["max"] != None):
        second_celsius = tenki_data["forecasts"][1]["temperature"]["max"]["celsius"]
        second_fahrenheit = tenki_data["forecasts"][1]["temperature"]["max"]["fahrenheit"]
    print("max celsius:", second_celsius)
    print("max fahrenheit:", second_fahrenheit)

    print("------------------------")

if __name__ == '__main__':
    main()

 実行時の引数として都市のIDを設定して実行します。例えば東京の天気を知りたい場合は以下のようにして実行します。

$ python python_forecast.py 130010
------------------------
title: 東京都 東京 の天気
Publication date: 2020-04-07T17:00:00+0900

date: 2020-04-07
forecast: 晴れ
max celsius: None
max fahrenheit: None

date: 2020-04-08
forecast: 晴時々曇
max celsius: 20
max fahrenheit: 68.0
------------------------

 以上がpythonでHTTP通信を行って天気を取得する方法です。

 特に何か目的があるわけではないですが、色々と使えそうです。


・参考資料