OpenWeatherMapで気象情報をゲットしよう
無料で使える気象情報 API サービスOpenWeatherMapを見つけました。 OpenWeatherMap が提供しているWeather APIは、 アカウント(無料)を作ればCC BY-SA 4.0ライセンスの元に無料で使えます。
2016/02/25 現在、無料プランで
- 現在の気象情報
- 5日分3時間毎の予報
- マップ上に気象情報の表示
が提供されています。
有料プランでは取得情報が増えたり、制限が緩和されます。
http://openweathermap.org/price
アカウントを作ると API にアクセスするためのキーがもらえます。 API に HTTP リクエストを飛ばすと、レスポンスが返ってくるはずなのですが、HTTP レスポンスコード 401 エラーが発生しました。キーはすぐには使えないようです…。アカウントを取得してから、小一時間ほど間を空けたら使えるようになりました。
レスポンスは JSON で返ってきます(XML, HTML でも返せます)。
場所の指定は、緯度経度、都市名、city ID でできます。
city ID はこちらからダウンロードできます。
http://bulk.openweathermap.org/sample/city.list.json.gz
東京 (Tokyo,JP) の city ID は 1850147 です。
東京の現在の気象情報
http://api.openweathermap.org/data/2.5/weather?id=1850147&units=metric&appid=※
※部分は取得した API キーに差し替えて下さい。
units=metric
で温度の単位が摂氏(℃)になります。units
未指定だと絶対温度(K)になります。
JSON は改行無しで返ってきますが、整形すると以下のようになります。
{
"coord": {
"lon": 139.69,
"lat": 35.69
},
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02d"
}
],
"base": "stations",
"main": {
"temp": 9.62,
"pressure": 1021,
"humidity": 23,
"temp_min": 9,
"temp_max": 10
},
"visibility": 10000,
"wind": {
"speed": 4.1,
"deg": 140
},
"clouds": {
"all": 20
},
"dt": 1456461000,
"sys": {
"type": 1,
"id": 7619,
"message": 0.0147,
"country": "JP",
"sunrise": 1456434967,
"sunset": 1456475572
},
"id": 1850147,
"name": "Tokyo",
"cod": 200
}
天気の種類は以下にあります。結構細かく分類されています。
http://openweathermap.org/weather-conditions
iconの値 | 元の表現 | 日本的表現 | イメージ |
---|---|---|---|
01d | clear sky | 快晴 | |
02d | few clouds | 晴れ | few clouds |
03d | scattered clouds | くもり | scattered clouds |
04d | broken clouds | くもり | broken clouds |
09d | shower rain | 小雨 | |
10d | rain | 雨 | |
11d | thunderstorm | 雷雨 | |
13d | snow | 雪 | |
50d | mist | 霧 |
ほか、
項目 | 意味 |
---|---|
visibility | 視界(m) |
wind.speed | 風速(m/sec) |
wind.deg | 風向き(北=0, 東=90, 南=180, 西=270)140だと「南東」 |
clouds.all | 雲量(%) |
sys.sunrise | 日の出(UTC) |
sys.sunset | 日の入り(UTC) |
も返ってきます。
東京の3日分の予報
http://api.openweathermap.org/data/2.5/forecast/daily?id=1850147&units=metric&cnt=3&appid=※
※部分は取得した API キーに差し替えて下さい。
JSON は改行無しで返ってきますが、整形すると以下のようになります。
{
"city": {
"id": 1850147,
"name": "Tokyo",
"coord": {
"lon": 139.691711,
"lat": 35.689499
},
"country": "JP",
"population": 0
},
"cod": "200",
"message": 0.0324,
"cnt": 3,
"list": [
{
"dt": 1456452000,
"temp": {
"day": 9.7,
"min": -0.7,
"max": 9.83,
"night": -0.7,
"eve": 7.08,
"morn": 9.7
},
"pressure": 1035.74,
"humidity": 82,
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}
],
"speed": 3.55,
"deg": 186,
"clouds": 0
},
{
"dt": 1456538400,
"temp": {
"day": 10.83,
"min": -3.08,
"max": 14.18,
"night": 1.88,
"eve": 9.71,
"morn": -3.08
},
"pressure": 1034.07,
"humidity": 84,
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}
],
"speed": 3.22,
"deg": 212,
"clouds": 0
},
{
"dt": 1456624800,
"temp": {
"day": 12.93,
"min": -0.2,
"max": 13.22,
"night": 3.75,
"eve": 9.76,
"morn": -0.2
},
"pressure": 1035.92,
"humidity": 87,
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}
],
"speed": 2.66,
"deg": 94,
"clouds": 0
}
]
}