OpenWeather API で天気情報を取得する

天気情報を取得するAPIを提供しているサービスはいくつかある。 今回は OpenWeather という、世界中の天気情報を提供するサービスを利用する。

事前準備

OpenWeather アカウントを作成し、API key を取得する。

https://openweathermap.org/api にアクセス。使いたい機能を探して、Subscribe をクリック。 今回は現在の天気情報を取得する Current Weather Data を使う。

プラン表が表示される。今回は無料で使うので Free の下の Get API key をクリック

必要な項目を入力し、メール認証を済ませる

API key は画面右上の、自分の名前が表示されている部分をクリックし、プルダウンから My API keys を選択すると確認できる。

なお、登録してから API が利用可能になるまで少し時間がかかる。その間は API リクエストを送信しても 401 エラーが返ってくるので、気長に待つ。 自分の場合は20分ほどで利用可能になった。

動作確認

https://openweathermap.org/current#geoAPI にアクセスしてみる。 最低限 lat(緯度)、lon(経度)、appid(API key) の3つの必須パラメータを指定すればよい。 lang=ja を追加すると日本語にできる。

(以下の例では、環境変数 OPENWEATHER_API_KEY に、取得した API key を格納してある)

curl -s "https://api.openweathermap.org/data/2.5/weather?lat=35.7075&lon=139.6636&appid=$OPENWEATHER_API_KEY&lang=ja" | jq .
{
  "coord": {
    "lon": 139.6636,
    "lat": 35.7075
  },
  "weather": [
    {
      "id": 801,
      "main": "Clouds",
      "description": "薄い雲",
      "icon": "02n"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 288.55,
    "feels_like": 287.69,
    "temp_min": 283.7,
    "temp_max": 290.66,
    "pressure": 1017,
    "humidity": 59,
    "sea_level": 1017,
    "grnd_level": 1012
  },
  "visibility": 10000,
  "wind": {
    "speed": 5.57,
    "deg": 224,
    "gust": 7.58
  },
  "clouds": {
    "all": 20
  },
  "dt": 1681141704,
  "sys": {
    "type": 2,
    "id": 2044139,
    "country": "JP",
    "sunrise": 1681157691,
    "sunset": 1681204194
  },
  "timezone": 32400,
  "id": 1865090,
  "name": "阿佐ヶ谷",
  "cod": 200
}

結果はデフォルトで json 形式で返ってくる。 (mode パラメータを指定することで XML, HTML 形式での取得も可能)