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通信を行って天気を取得する方法です。
特に何か目的があるわけではないですが、色々と使えそうです。
・参考資料