N.Y.Cityのまちかど

OpenWeatherMap

「OpenWeatherMap」に触ってみた

天気予報APIを触る必要があり,「OpenWeatherMap」を使ってみたので, 情報をメモしておきます.

以下のWebサイトを参考にしました. 世界の天気API「OpenWeatherMap」の無料APIキー発行・取得、リクエスト方法

APIコードの取得

上記Webサイトと重なる部分は省略.

APIキーを申請すると,登録したメールアドレスに確認メールが届くので, リンクをクリックすることで,登録情報の確認ができる.

少しハマったのはこの後で,確認後すぐにAPIを試そうとしたらエラーが返ってきた.エラーメッセージに記載のFAQを見ると,「アクティベーションから実際に使えるようになるまで10分~時間がかかるから,それまでヘルプでも呼んでおけ(意訳)」というありがたいお言葉があった.10分ほど経ってからリロードすると,ちゃんと応答が返ってきた.

情報の取得

URL

現在天気の取得
http://api.openweathermap.org/data/2.5/weather?q=【都市名】&appid=【APIキー】&lang=【言語】&units=【単位設定】
3時間ごと予報(5日間分)
http://api.openweathermap.org/data/2.5/forecast?q=【都市名】&appid=【APIキー】&lang=【言語】&units=【単位設定】

パラメータ

【都市名】

都市コード(CityID)を入力する.(例:Tokyo,JP)

都市コードの一覧はhttp://bulk.openweathermap.org/sample/ からダウンロードできる. (JSONファイルをgz形式で圧縮)

city.list.json.gz は,JSONファイルに改行を加えて人間にも読みやすくしたもの. その代わり膨大な行数があり,並みのエディタでは表示できない.

city.list.min.json.gz は,同じJSONデータから改行を除いて最小化したもの.(それでもかなりの量がある)

せっかくなので,このリストから日本("country": "JP")のデータだけを抽出し, Googleマイマップで描画したものを作成した. https://www.google.com/maps/d/u/0/edit?mid=1797aq0XrRpoFj5Ln5rZmpKnz-hPHWCZ1&usp=sharing map.png

【APIキー】

APIキーはユーザ登録で取得した文字列をそのままコピー&ペーストする.

【言語】【単位設定】

日本人が使用する場合 【言語】は「ja」で日本語出力とし、【単位設定】は「metric」にして温度の単位を「℃」にすればまず困らないでしょう.

得られる情報

予報で取得できる天気の種類は以下のページで説明されています. https://openweathermap.org/weather-conditions#How-to-get-icon-URL

Pythonで取得してみる

最新の天気予報を全て列挙するサンプルプログラムを作ってみた.

ライブラリインストールの注意

requestsライブラリ(指定したURLにHTTPリクエストを投げて応答を取得するライブラリ)を使用してるので,インストールしていない場合は事前にインストールが必要.

pip install requests

サンプルソース

import requests		#HTTPリクエストライブラリ
import json			#json解析ライブラリ

#APIのURL
url = "http://api.openweathermap.org/data/2.5/forecast"
#APIに渡すオプションを設定
payload = {"q":"【都市名】", "appid":"【APIキー】", "lang":"ja", "units":"metric"}

#URLとオプションを指定して,requestを送る
r = requests.get(url, params=payload)


#リクエストした結果得られた応答をjsonライブラリに渡してパース
jsondt = json.loads(r.text)

#["list"]の中に3時間おきの天気予報が入っているので,
#時刻文字列と天気文字列を抽出して画面表示
for forcast in jsondt["list"]:
	print(forcast["dt_txt"]+" "+forcast["weather"][0]["main"])

結果

2021-02-05 12:00:00 Clouds
2021-02-05 15:00:00 Clouds
2021-02-05 18:00:00 Clouds
2021-02-05 21:00:00 Clouds
2021-02-06 00:00:00 Clouds
2021-02-06 03:00:00 Clear
2021-02-06 06:00:00 Clear
2021-02-06 09:00:00 Clear
2021-02-06 12:00:00 Clear
2021-02-06 15:00:00 Clear
2021-02-06 18:00:00 Clear
2021-02-06 21:00:00 Clear
2021-02-07 00:00:00 Clear
2021-02-07 03:00:00 Clear
2021-02-07 06:00:00 Clear
2021-02-07 09:00:00 Clear
2021-02-07 12:00:00 Clear
2021-02-07 15:00:00 Clouds
2021-02-07 18:00:00 Clouds
2021-02-07 21:00:00 Clouds
2021-02-08 00:00:00 Clouds
2021-02-08 03:00:00 Clouds
2021-02-08 06:00:00 Clouds
2021-02-08 09:00:00 Clouds
2021-02-08 12:00:00 Clouds
2021-02-08 15:00:00 Clouds
2021-02-08 18:00:00 Clouds
2021-02-08 21:00:00 Clouds
2021-02-09 00:00:00 Clouds
2021-02-09 03:00:00 Clear
2021-02-09 06:00:00 Clear
2021-02-09 09:00:00 Clear
2021-02-09 12:00:00 Clear
2021-02-09 15:00:00 Clear
2021-02-09 18:00:00 Clear
2021-02-09 21:00:00 Clear
2021-02-10 00:00:00 Clear
2021-02-10 03:00:00 Clear
2021-02-10 06:00:00 Clear
2021-02-10 09:00:00 Clear

おまけ

ダウンロードした「city.list.min.json」から,日本(country=JP)の行だけを取り出し,
地名[ID]\t緯度\t経度
の形式で書きだすpythonプログラム.

「city.list.min.json」のパスを書き込んで実行すると,コンソール上にリストアップされる.ファイルにリダイレクトすればTSV形式のファイルになる.

import json

basefile = open(r'【ファイルのパス】\city.list.min.json','r',encoding="UTF-8")
jsondt = json.load(basefile)

for item in jsondt:
	if item["country"]=='JP':
		print(item["name"]+'['+str(item["id"])+']\t'+str(item["coord"]["lon"])+'\t'+str(item["coord"]["lat"]))

現在ご覧のページの最終更新日時は2021/02/05 20:08:37です。

Copyright (C) N.Y.City ALL Rights Reserved.

Email: info[at]nycity.main.jp