OpenWeatherMapとは
天気などの各種気象の情報を、無料のWeb APIとして提供するオンラインサービスです。
公的気象情報、空港の気象観測所、レーダーなどからのデータを、OpenWeatherMap独自のアルゴリズムで加工して提供しているようです。
使用できるAPIの一覧は、こちらのページ(Weather API - OpenWeatherMap)に載ってます。
OpenWeatherMapのアカウント作成
APIを使用するには、アカウントを作成する必要があります。
ここのページ(Members)からアカウントを作成します。
上記のページにて、
- ユーザ名
- 作成するPassword
を入力し、Privacy Policyなどのチェックを入れ、 [Create Account] をクリックすると、次のページに遷移して、APIキーが表示されます。
このAPIキーが、自分専用のキーになるので、メモしておきましょう。
APIキーを忘れても、こちらのページ(Members)にアクセスすれば、自分のAPIキーを確認することができます。
特定の場所の、現在の天気を取得する
今回は、東京駅の天気を取得しようと思います。
天気を知りたい場所を指定する際に、その場所の郵便番号や、その場所の緯度経度を指定する方法など、複数の方法があります。 今回は、緯度経度を指定して、天気を取得してみます。
東京駅の緯度・経度を調べる
Google Maps(Google マップ)を開いて、「東京駅」と検索します。
すると、以下の画像のように、URLの入力欄に緯度・経度が表示されるので、この値をメモしておきます。
東京駅の緯度・経度は、35.6809704, 139.7678007でした。
OpenWeatherMapのAPIを叩く
以下の形式のURLをWebブラウザで開く(つまり、GETリクエストを投げる)と、緯度・経度の情報を取得することができます。
http://api.openweathermap.org/data/2.5/weather?lat={緯度}&lon={経度}&APPID={自分のAPIキー}
ベースとなるAPIのURLは、
http://api.openweathermap.org/data/2.5/weather
という部分で、"?" 以降は、そのAPIに渡すパラメータ、通称「クエリパラメータ」です。
クエリパラメータが複数ある場合は、"&" で繋ぎます。
つまり、上記のURLの構造は、
- ベースのURL:http://api.openweathermap.org/data/2.5/weather
- クエリパラメータ1つ目:lat={緯度}
- クエリパラメータ2つ目:lon={経度}
- クエリパラメータ3つ目:APPID={自分のAPIキー}
ということになります。
実際にWebブラウザでAPIを叩いてみると、以下のような結果が返ってきます。
このJSON文字列を整形すると、以下ようになります。
{ "coord": { "lon": 139.77, "lat": 35.68 }, "weather": [ { "id": 803, "main": "Clouds", "description": "broken clouds", "icon": "04n" } ], "base": "stations", "main": { "temp": 288.52, "pressure": 1023, "humidity": 44, "temp_min": 285.93, "temp_max": 290.37 }, "visibility": 10000, "wind": { "speed": 4.6, "deg": 330 }, "clouds": { "all": 75 }, "dt": 1573978437, "sys": { "type": 1, "id": 8074, "country": "JP", "sunrise": 1573939084, "sunset": 1573976020 }, "timezone": 32400, "id": 1857654, "name": "Marunouchi", "cod": 200 }
"weather" のところで、 "id":803 となっています。
これは、「千切れ雲(broken clouds)が51-84%出ている曇り状態」を表しています(細かい…)。
天気のIDが何を表しているかは、こちらのページ(Weather Conditions - OpenWeatherMap)に詳しく載っています。
"temp": 288.52
と書かれている部分が、現在の気温です。
この値はケルビン(K) で表されているようです。
ケルビン(K) から摂氏(℃) に変換するには、-273.15 を計算します。
つまり、
288.52K=288.52-273.15=15.37℃
です。
11月17日の17:30現在、東京駅は15.37℃ということです。
その他、気圧(presure)や湿度(humidity)、最高気温(temp_max)、最低気温(temp_min)なども取得できています。
緯度・経度を指定するのは面倒な場合
「東京駅の天気」や、「浅草駅前のファミリーマートの天気」というように、ピンポイントの天気を知りたい場合は、緯度・経度でその場所を指定するしかありません。
これは非常に面倒です。
実際は、「東京の天気」とか、「大阪の天気」のような、ざっくりした場所を指定することがほとんどだと思います。
その場合は、以下のようにすれば、東京の天気を取得できます(最初からそれを言えよ!という感じですが…)。
http://api.openweathermap.org/data/2.5/weather?q=Tokyo&APPID={自分のAPIキー}
実際にこのAPIを叩いてみると、以下のような結果になりました。
{ "coord": { "lon": 139.76, "lat": 35.68 }, "weather": [ { "id": 803, "main": "Clouds", "description": "broken clouds", "icon": "04n" } ], "base": "stations", "main": { "temp": 287.78, "pressure": 1025, "humidity": 44, "temp_min": 285.37, "temp_max": 289.82 }, "visibility": 10000, "wind": { "speed": 4.1, "deg": 330 }, "clouds": { "all": 75 }, "dt": 1573980601, "sys": { "type": 1, "id": 8074, "country": "JP", "sunrise": 1573939086, "sunset": 1573976022 }, "timezone": 32400, "id": 1850147, "name": "Tokyo", "cod": 200 }
当たり前ですが、東京駅の天気とほぼ同じになりました。
特定の場所の天気予報を取得する
OpenWetherMapでは、
- 1時間ごとの天気予報を向こう4日分取得する
- 3時間ごとの天気予報を向こう5日分取得する
- 日ごとの天気予報を向こう16日分取得する
などの天気予報が用意されています。
ここでは、東京の3時間ごとの天気予報を5日分取得してみます。
東京の3時間ごとの天気予報を5日分取得する場合は、以下のAPIを叩きます。
http://api.openweathermap.org/data/2.5/forecast?q=Tokyo&APPID={自分のAPIキー}
先ほど、現在の天気を取得する際は、
http://api.openweathermap.org/data/2.5/weather
というURLだったのに対し、天気予報を取得する際は、 http://api.openweathermap.org/data/2.5/forecast
というURLになっています。
実際にAPIを叩くと、以下のような結果が返ってきます。
かなり省略していますが、3時間ごとの天気予報が取得できています。
{ "cod": "200", "message": 0, "cnt": 40, "list": [ { //省略, "dt_txt": "2019-11-17 12:00:00" }, { //省略, "dt_txt": "2019-11-17 15:00:00" }, { //省略, "dt_txt": "2019-11-17 18:00:00" }, // ・・・ // 省略 // ・・・ { //省略, "dt_txt": "2019-11-22 03:00:00" }, { //省略, "dt_txt": "2019-11-22 06:00:00" }, { //省略, "dt_txt": "2019-11-22 09:00:00" } ], "city": { "id": 1850147, "name": "Tokyo", "coord": { "lat": 35.6828, "lon": 139.759 }, "country": "JP", "population": 8336599, "timezone": 32400, "sunrise": 1573939087, "sunset": 1573976022 } }
さいごに
今回は、特定の場所の現在の天気や、天気予報を取得しました。
この他にも、OpenWeatherMapには、天気の情報を地図上に色を塗って表した結果を取得できるAPIのように、様々なAPIが用意されています。
再掲になりますが、APIの一覧を載せておきます。