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
    }
  ]
}