OpenWeatherMap APIを使う
はじめに
OpenWeatherMap APIとは?
世界中の天気予報を取得できるAPIで、現在の天気、予報、過去の気象データなどを取得可能です。
リアルタイムの天気情報だけでなく、気象履歴や大気汚染データなども取得できます。
📌 公式サイト
※2025年2月時点の情報です。
本記事の目的
本記事では、以下のことを解説します。
- OpenWeatherMap APIの使い方
- いくつかのエンドポイントの紹介
OpenWeatherMap API の概要
APIの種類
OpenWeatherMap では、以下のようなAPIを提供しています。
- Current Weather API(現在の天気)
- 5 Day Weather Forecast API(5日間の3時間ごとの予報)
- Weather Maps API(天気のマップデータ)
- Air Pollution API(大気汚染情報)
- Geocoding API(都市名から緯度・経度を取得)
これらのAPIは、アカウント登録後に APIキーを取得することで利用可能 です。
他にも、サブスクリプションを登録することで利用できる専門的なAPIがあります。
📌 公式ドキュメント: OpenWeatherMap API
無料枠のルール
上記のAPIは、以下の制限のもと無料で利用できます。
- 最大 60 API calls / 分
- 最大 1,000,000 API calls / 月
また、One Call API 3.0 (詳細な気象情報・予報) も、サブスクリプション登録により以下の条件で利用できます。
- 1日 1,000回まで無料
- 超過分は 1リクエストあたり 0.0012 GBP(約0.22円)の課金
📌 料金詳細: OpenWeatherMap Pricing
OpenWeatherMap APIの登録方法
アカウント登録
-
公式サイトへアクセス
OpenWeatherMap の公式サイトにアクセスします。 -
アカウント作成
右上の Sign in から Create an Account を選択し、必要情報を入力してアカウントを作成します。
登録したメールアドレスに確認メールが届くので、認証を完了させます。 -
APIキーの取得
右上の自身のユーザーネームをクリックし、メニューからMy API keys をクリックします。
デフォルトで発行されているAPIキーを確認します。
必要に応じて Create keyから新しいAPIキーを発行できます。
APIリクエストを実行する
いくつかのAPIで東京のデータを取得してみます。
- 緯度: 35.689
- 経度: 139.692
リクエスト方法
https://api.openweathermap.org/data/2.5/weather?lat=35.6895&lon=139.692&appid={API_KEY}
のように appid パラメータにAPIキーを指定します。
APIレスポンスの主なデータ項目
各APIのレスポンスには、以下のようなデータが含まれます。
キー | 説明 |
---|---|
coord | 位置情報(緯度・経度) |
weather | 天候情報(天気ID、概要、詳細、アイコン) |
main | 気温(K)、体感温度、気圧、湿度 |
visibility | 視界の良さ(メートル単位) |
wind | 風速(m/s)、風向き(°) |
clouds | 雲量(%) |
dt | データ取得時刻(UNIXタイムスタンプ) |
sys | 国コード、日の出・日の入り時刻 |
timezone | タイムゾーン(秒単位のオフセット) |
※ 気温(main.temp)はデフォルトでケルビン(K)表示なので、摂氏(℃)に変換する場合は temp - 273.15 を計算する
Current Weather API(現在の天気)
📌 ドキュメント: https://openweathermap.org/current
パラメータ
-
lat
: Latitude(緯度) -
lon
: Longitude(経度)
リクエスト
curl "https://api.openweathermap.org/data/2.5/weather?lat=35.6895&lon=139.692&appid={API_KEY}"
レスポンス
{
"coord": {
"lon": 139.6917,
"lat": 35.6895
},
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02d"
}
],
"base": "stations",
"main": {
"temp": 281.63,
"feels_like": 277.52,
"temp_min": 280.9,
"temp_max": 282.73,
"pressure": 1020,
"humidity": 34,
"sea_level": 1020,
"grnd_level": 1018
},
"visibility": 10000,
"wind": {
"speed": 9.26,
"deg": 340
},
"clouds": {
"all": 20
},
"dt": 1739242385,
"sys": {
"type": 2,
"id": 268395,
"country": "JP",
"sunrise": 1739223169,
"sunset": 1739261897
},
"timezone": 32400,
"id": 1850144,
"name": "Tokyo",
"cod": 200
}
5 Day Weather Forecast API(5日間の3時間ごとの予報)
📌 ドキュメント: https://openweathermap.org/forecast5
パラメータ
-
lat
: Latitude(緯度) -
lon
: Longitude(経度)
リクエスト
curl "https://api.openweathermap.org/data/2.5/forecast?lat=35.6895&lon=139.692&appid={API_KEY}"
レスポンス
{
"cod": "200",
"message": 0,
"cnt": 40,
"list": [
{
"dt": 1739253600,
"main": {
"temp": 281.76,
"feels_like": 278.1,
"temp_min": 281.76,
"temp_max": 282.46,
"pressure": 1020,
"sea_level": 1020,
"grnd_level": 1018,
"humidity": 28,
"temp_kf": -0.7
},
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02d"
}
],
"clouds": {
"all": 20
},
"wind": {
"speed": 7.7,
"deg": 342,
"gust": 7.17
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "d"
},
"dt_txt": "2025-02-11 06:00:00"
}
// 中略
],
"city": {
"id": 1850144,
"name": "Tokyo",
"coord": {
"lat": 35.6895,
"lon": 139.6917
},
"country": "JP",
"population": 12445327,
"timezone": 32400,
"sunrise": 1739223169,
"sunset": 1739261897
}
}
Geocoding API(都市名から緯度・経度を取得)
📌 ドキュメント: https://openweathermap.org/api/geocoding-api
パラメータ
-
q
: 都市名や国コード
リクエスト
curl "https://api.openweathermap.org/geo/1.0/direct?q=Tokyo&limit=2&appid={API_KEY}"
レスポンス
[
{
"name": "Tokyo",
"local_names": {
"ia": "Tokyo",
"pl": "Tokio",
"bg": "Токио",
"da": "Tokyo",
"hu": "Tokió",
"kn": "ಟೋಕ್ಯೊ",
"ku": "Tokyo",
"hr": "Tokio",
"sl": "Tokio",
"be": "Токіа",
"lt": "Tokijas",
"he": "טוקיו",
"mr": "तोक्यो",
"fr": "Tokyo",
// 中略
},
"lat": 35.6828387,
"lon": 139.7594549,
"country": "JP"
},
{
"name": "Chofu",
"local_names": {
"pl": "Chōfu",
"ar": "تشوفو، طوكيو",
"sr": "Чофу",
"fa": "چوفو، توکیو",
"fr": "Chōfu",
// 中略
},
"lat": 35.660036,
"lon": 139.554815,
"country": "JP"
}
]
One Call API 3.0
One Call API 3.0では詳細な気象データを取得できます。
サブスクリプションの登録
One Call API 3.0を使用するためにはサブスクリプションの登録が必要です。
OpenWeatherMap Pricingから支払い方法などを登録します。
以下の条件で利用できます。
- 1日 1,000回まで無料
- 超過分は 1リクエストあたり 0.0012 GBP(約0.22円)の課金
エンドポイント
One Call API 3.0 には、以下のようなエンドポイントがあります。
エンドポイント | 概要 |
---|---|
Current weather and forecasts | 現在の天気と天気予報(分単位・時間単位・日単位) |
Weather data for any timestamp | 任意の日時の天気データを取得(過去・未来の天気) |
Daily aggregation | 日ごとの気象データ(最高気温・最低気温・降水量など) |
Weather overview | 1つのリクエストで複数地点の天気情報を取得 |
📌 ドキュメント: One Call API 3.0
以下で Current weather and forecastsを叩いています。
Current weather and forecasts(現在の天気と予報)
パラメータ
-
lat
: Latitude(緯度) -
lon
: Longitude(経度)
exclude
で除外する項目をしていることも可能です。
リクエスト
curl "https://api.openweathermap.org/data/3.0/onecall?lat=35.6895&lon=139.692&appid={API key}"
レスポンス
分単位の予報minutely
、時間単位の予報hourly
、日単位の予報daily
の取得も可能です。
気象警報データもレスポンスされます。
{
"lat": 35.6895,
"lon": 139.692,
"timezone": "Asia/Tokyo",
"timezone_offset": 32400,
"current": {
"dt": 1739260426,
"sunrise": 1739223169,
"sunset": 1739261897,
"temp": 280.58,
"feels_like": 276.42,
"pressure": 1022,
"humidity": 28,
"dew_point": 264.35,
"uvi": 0,
"clouds": 20,
"visibility": 10000,
"wind_speed": 8.23,
"wind_deg": 10,
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02d"
}
]
},
"minutely": [
// 中略
],
"hourly": [
{
"dt": 1739257200,
"temp": 280.86,
"feels_like": 276.84,
"pressure": 1022,
"humidity": 27,
"dew_point": 264.16,
"uvi": 0.29,
"clouds": 18,
"visibility": 10000,
"wind_speed": 8.03,
"wind_deg": 340,
"wind_gust": 7.17,
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02d"
}
],
"pop": 0
},
// 中略
],
"daily": [
{
"dt": 1739239200,
"sunrise": 1739223169,
"sunset": 1739261897,
"moonrise": 1739256660,
"moonset": 1739220720,
"moon_phase": 0.45,
"summary": "Expect a day of partly cloudy with clear spells",
"temp": {
"day": 280.55,
"min": 277.27,
"max": 281.97,
"night": 277.44,
"eve": 280.58,
"morn": 277.55
},
"feels_like": {
"day": 275.95,
"night": 273.46,
"eve": 276.31,
"morn": 274.44
},
"pressure": 1021,
"humidity": 27,
"dew_point": 262.68,
"wind_speed": 10.63,
"wind_deg": 339,
"wind_gust": 13.45,
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}
],
"clouds": 0,
"pop": 0,
"uvi": 3.32
}
],
"alerts": [
{
"sender_name": "JMA",
"event": "乾燥注意報",
"start": 1739199601,
"end": 1739286000,
"description": "",
"tags": [
"Air quality"
]
}
]
}
Discussion