【WebAPI】OpenWeatherMapAPIで現在の気象状況を取得する(1)

   


無料で利用できるOpenWeatherMapのWebAPIを利用して、 現在の気象状況を取得する方法について調べたことをまとめました。

気象情報は、一つの都市の取得だけでなく、複数の都市をまとめて取得する方法もあるようです。
取得するファイルの形式も選択できます。
無料のAPIでここまで出来るのはすごいですね。

一つの都市の気象情報を取得する方法

一つの都市に対して現在の気象状況を取得するには、URL末尾に「weather?」を付け、続けて条件毎にパラメータを付ける。
また、appid={APIKEY}を付けなければいけない。
※{APIKEY} はアカウントを登録して取得したキー

都市名、または都市名と国名コードで検索する

weather?q={city name}
weather?q={city name},{country code}

例:都市名「東京」で検索する
http://api.openweathermap.org/data/2.5/weather?q=tokyo&appid={APIKEY}

例:都市名「東京」と国名コード「JP」で検索する
http://api.openweathermap.org/data/2.5/weather?q=tokyo,JP&appid={APIKEY}

※国名コードはwikipediaのISO 3166-1の以下のサイトを参考。
https://ja.wikipedia.org/wiki/ISO_3166-1

都市IDで検索する

weather?id={city id}

例:東京の都市ID「1850147」で検索する
http://api.openweathermap.org/data/2.5/weather?id=1850147&appid={APIKEY}

都市IDはOpenWeatherMapの以下のページで、都市の一覧が載っているファイル(city.list.json.gz)をダウンロードできる。
※明確な結果を得るために、都市IDでの検索を推奨しているとのこと。
http://bulk.openweathermap.org/sample/

city.list.json.gz を解凍するとテキストファイルが入っている。(東京の行を抜粋)
{"_id":1850147,"name":"Tokyo","country":"JP","coord":{"lon":139.691711,"lat":35.689499}}

_idの値が、都市IDに該当する。

緯度、経度で検索する

weather?lat={lat}&lon={lon}

lon … 経度
lat … 緯度

例:東京の緯度、経度「35.69, 139.69」で検索する
http://api.openweathermap.org/data/2.5/weather?lat=35.69&lon=139.69&appid={APIKEY}

ZIPコードで検索する

ZIPコードは、アメリカ合衆国郵便公社が使用する郵便番号制度

weather?zip={zip code},{country code}

ZIPコードの検索に関しては、いくつか試してみたが何故かエラーになってしまい、情報を取得できなかった。

参考として試したことを以下に載せておく。

OpenWeatherMapのサイトに載っているサンプル(94040,us)を試したが、結果はNot found cityのエラー。

例:マウンテンビューのZIPコード「94040」と、国名コード「us」で検索する
http://api.openweathermap.org/data/2.5/weather?zip=94040,us&appid={APIKEY}

取得結果:
{"cod":"404","message":"Error: Not found city"}

試しに国名コードを外してZIPコードのみで試したが、同様のエラー。

http://api.openweathermap.org/data/2.5/weather?zip=94040&appid={APIKEY}

シカゴのZIPコード「60601」と、国名コード「us」でも試してみても、同様のエラー

http://api.openweathermap.org/data/2.5/weather?zip=60601,us&appid={APIKEY}

シカゴの国名コードを外し、ZIPコードのみで試してみても、同様のエラー。

http://api.openweathermap.org/data/2.5/weather?zip=60601&appid={APIKEY}

複数の都市の気象情報を取得する方法

複数の都市に対して現在の気象状況を取得できる。

矩形領域で指定

緯度・経度が、バウンディングボックスで指定した領域内の都市を取得できる。
box/city?bbox=[lon-left,lat-bottom,lon-right,lat-top]

他にも以下のパラメータを指定できるようだ。
・Javascriptコールバック関数
・クラスタ
・言語

使用例:
http://api.openweathermap.org/data/2.5/box/city?bbox=12,32,15,37,10&appid={APIKEY}

緯度・経度と、取得する都市の数で指定

指定した緯度・経度の中心から、cntで指定した数の都市のデータを取得できる。

find?lat={lat}&lon={lon}&cnt={cnt}

他にも以下のパラメータを指定できるようだ。
・Javascriptコールバック関数
・クラスタ
・言語

使用例:
http://api.openweathermap.org/data/2.5/find?lat=55.5&lon=37.5&cnt=10&appid={APIKEY}

cntを省略した場合

cntを省略した場合は、cntは10として扱うようだ。
cntを省略した例:
http://api.openweathermap.org/data/2.5/find?lat=55.5&lon=37.5&appid={APIKEY}

取得結果を抜粋:
{"message":"accurate","cod":"200","count":10,…

都市IDをカンマで区切って指定

都市IDをカンマで区切って複数まとめて取得できる。

例:東京の都市ID「1850147」と大阪の都市ID「1853908」で検索する

group?id={city id},{city id}…

使用例:
http://api.openweathermap.org/data/2.5/group?id=1850147,1853908&appid={APIKEY}

取得するファイル形式の選択

取得するファイルの形式を、JSON、XML、HTMLから選択できる。

mode=xml を指定すると、XML
mode=html を指定すると、HTML
省略すると、JSON形式
で取得する。

使用例:
XML
http://api.openweathermap.org/data/2.5/weather?q=tokyo&appid={APIKEY}&mode=xml

HTML
http://api.openweathermap.org/data/2.5/weather?q=tokyo&appid={APIKEY}&mode=html

JSON
http://api.openweathermap.org/data/2.5/weather?q=tokyo&appid={APIKEY}

都市名の完全一致と部分一致

都市名の検索において、完全一致した都市を取得するのか、部分一致した都市を取得するのかを指定できる。

type=accurate ・・・ 完全一致
http://api.openweathermap.org/data/2.5/find?q=London&type=accurate&mode=xml&appid={APIKEY}

type=like ・・・ 部分一致
http://api.openweathermap.org/data/2.5/find?q=London&type=like&mode=xml&appid={APIKEY}

指定しない ・・・ 完全一致(と思う。実行結果がtype=accurateと同じなので。)
http://api.openweathermap.org/data/2.5/find?q=London&mode=xml&appid={APIKEY}

weather? と find? の違い

おそらくweatherは、都市名(または都市名+国名コード)をキーにして取得する場合、結果が複数該当する場合にはその内の1つしか取得できないが、findを使えば、該当する情報すべてを取得できるのだと思っていた。

それで実際に色々試してみたが、findを使用しても一致した情報すべてを取得する事はできなかった。

試した結果の詳細はこちらのページに記載。

単位の指定

気温の単位を指定できる。

指定しない ・・・ ケルビン
api.openweathermap.org/data/2.5/find?q=London&appid={APIKEY}

units=metric ・・・ 摂氏
api.openweathermap.org/data/2.5/find?q=London&appid={APIKEY}&units=metric

units=imperial ・・・ 華氏
api.openweathermap.org/data/2.5/find?q=London&appid={APIKEY}&units=imperial

まとめ

詳しく調べ切れていませんが、色々な条件で検索できて便利そうです。よかったら使ってみてはいかがでしょうか。

次回は、現在の気象情報で取得できる各情報について調べてみたいと思います。

 - OpenWeatherMap , , , , ,