はじめに
天気情報を取得できるAPIとして、「OpenWeather API」があります。
以下に金額のページがありますが、

上記の画像にも書かれている通り、
- ✅現在の天気情報
- ✅3時間ごとの5日間の天気予報情報
- ✅5つの現在のウェザーマップ
- ✅大気汚染情報
- ✅ジオコーディング
が無料枠で使えます。
「現在の天気情報」と「3時間ごとの5日間の天気予報情報」はネットを探すと実際にやってみた例が出てくるのですが、その他の3つは実際の例を見かけないので、試してみる事にしました。
pythonによる実装
✅3時間ごとの5日間の天気予報情報
まずは手始めに、「3時間ごとの5日間の天気予報情報」を取得してみます。
ベースになるpythonコード
今回はpythonで取得してみます。ベースとなるコードは以下のようになります。
import requests
import json
import datetime
endpoint = "https://api.openweathermap.org/data/2.5/forecast"
headers = {}
## 東京駅
params_0={
"appid":"xxxxxxxxxxxxxxxxxxx", # ★取得したAPI
"lon": 139.767,
"lat": 35.681,
"lang":"ja"
}
result = requests.get(endpoint, headers=headers, params=params_0)
#contentsをjsonから辞書型に変換
data = result.json()
print(json.dumps(data, indent=4, ensure_ascii=False))
実行結果は以下のようになります。
{
"cod": "200",
"message": 0,
"cnt": 40,
"list": [
{
"dt": 1740398400,
"main": {
"temp": 279.51,
"feels_like": 275.36,
"temp_min": 279.12,
"temp_max": 279.51,
"pressure": 1020,
"sea_level": 1020,
"grnd_level": 1019,
"humidity": 31,
"temp_kf": 0.39
},
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "薄い雲",
"icon": "02n"
}
],
"clouds": {
"all": 18
},
"wind": {
"speed": 7.16,
"deg": 338,
"gust": 12.31
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2025-02-24 12:00:00"
},
{
"dt": 1740409200,
"main": {
"temp": 278.81,
"feels_like": 275.37,
"temp_min": 278.36,
"temp_max": 278.81,
"pressure": 1021,
"sea_level": 1021,
"grnd_level": 1020,
"humidity": 33,
"temp_kf": 0.45
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "晴天",
"icon": "01n"
}
],
"clouds": {
"all": 7
},
"wind": {
"speed": 4.88,
"deg": 326,
"gust": 9.38
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2025-02-24 15:00:00"
},
・・・【略】・・・
{
"dt": 1740819600,
"main": {
"temp": 288.24,
"feels_like": 286.88,
"temp_min": 288.24,
"temp_max": 288.24,
"pressure": 1020,
"sea_level": 1020,
"grnd_level": 1018,
"humidity": 41,
"temp_kf": 0
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "晴天",
"icon": "01n"
}
],
"clouds": {
"all": 5
},
"wind": {
"speed": 4.67,
"deg": 191,
"gust": 6.35
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2025-03-01 09:00:00"
}
],
"city": {
"id": 1857654,
"name": "東京都千代田区丸の内",
"coord": {
"lat": 35.681,
"lon": 139.767
},
"country": "JP",
"population": 0,
"timezone": 32400,
"sunrise": 1740345475,
"sunset": 1740385849
}
}
✅現在の天気情報
現在の天気を求めてみます。
上記のベースになるpythonコードのendpointの値を以下に変更します。
endpoint = "https://api.openweathermap.org/data/2.5/weather"
実行すると以下のような結果になります。
現在の東京駅の天気情報が取得できました。
{
"coord": {
"lon": 139.767,
"lat": 35.681
},
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "薄い雲",
"icon": "02n"
}
],
"base": "stations",
"main": {
"temp": 279.7,
"feels_like": 275.12,
"temp_min": 278.66,
"temp_max": 280.34,
"pressure": 1020,
"humidity": 33,
"sea_level": 1020,
"grnd_level": 1018
},
"visibility": 10000,
"wind": {
"speed": 8.75,
"deg": 340
},
"clouds": {
"all": 20
},
"dt": 1740390414,
"sys": {
"type": 2,
"id": 268395,
"country": "JP",
"sunrise": 1740345475,
"sunset": 1740385849
},
"timezone": 32400,
"id": 1857654,
"name": "東京都千代田区丸の内",
"cod": 200
}
✅5つの現在のウェザーマップ
5つのウェザーマップを取得できます。
これはベースのpythonコードではなく、別途コードを書いておく必要があります。
マップの表示をするので、jupyter notebookかgoogle colabなどを使用するといいです。
以下にコードを記載します。
import folium
# 地図の初期設定(緯度・経度・ズームレベル)
m = folium.Map(location=[35.6895, 139.6917], zoom_start=5)
# OpenWeatherMapのWeather Layerを追加
weather_layer_url = "https://tile.openweathermap.org/map/pressure_new/{z}/{x}/{y}.png?appid=dae057ba9fd933aa30ca408004b9bbce"
folium.raster_layers.TileLayer(
tiles=weather_layer_url,
attr="OpenWeatherMap",
name="Weather Layer",
overlay=True
).add_to(m)
# レイヤーコントロールを追加
folium.LayerControl().add_to(m)
m
このコードでは気圧をマッピングする例になります。
出力結果は以下になります。

他にも
- 雲
- 降水量
- 風力
- 気温
があります。
詳細は以下の公式ドキュメントを参照してください。
✅大気汚染情報
大気汚染情報を取得します。
上記のベースになるpythonコードのendpointの値を以下に変更します。
endpoint = "http://api.openweathermap.org/data/2.5/air_pollution"
出力は以下のようになります。(東京駅の緯度経度による値です)
{
"coord": {
"lon": 139.767,
"lat": 35.681
},
"list": [
{
"main": {
"aqi": 2
},
"components": {
"co": 307.08,
"no": 0,
"no2": 16.79,
"o3": 92.98,
"so2": 10.97,
"pm2_5": 0.6,
"pm10": 1.37,
"nh3": 1.22
},
"dt": 1740394583
}
]
}
値の単位は「µg/m³」です。
それぞの値は以下のようになります。
- co
- 一酸化炭素
- (主に化石燃料の不完全燃焼によって発生)
- no
- 一酸化窒素
- (主に車の排ガスや工業活動で発生する)
- no2
- 二酸化窒素
- (車の排ガスや火力発電所で発生する)
- o3
- オゾン
- (NO₂などと紫外線が反応して生成される)
- (今回の結果では高め)
- so2
- 二酸化硫黄
- (石炭や石油の燃焼によって発生)
- pm2_5
- PM2.5(微小粒子状物質)
- (直径2.5µm以下の微粒子で、燃焼や工業排出から発生する)
- pm10
- PM10(浮遊粒子状物質)
- 直径10µm以下の粒子で、工業活動や砂ぼこりに由来する
- nh3
- アンモニア
- 農業(肥料)や畜産業から発生する
✅ジオコーディング
最後はジオコーディングです。
上記のベースになるpythonコードの以下の値を変更します。
・・・【略】・・・
endpoint = "http://api.openweathermap.org/geo/1.0/direct"
・・・【略】・・・
params_0={
"appid":"dae057ba9fd933aa30ca408004b9bbce",
"q": "Tokyo",
"limit": 3,
"lang":"ja"
}
結果は以下のようになります。
[
{
"name": "Tokyo",
"local_names": {
"be": "Токіа",
"et": "Tōkyō",
"io": "Tokyo",
"ta": "டோக்கியோ",
"it": "Tokyo",
"ar": "طوكيو",
"ja": "東京都",
"lv": "Tokija",
"cs": "Tokio",
"la": "Tokium",
"cy": "Tokyo",
"hu": "Tokió",
"th": "โตเกียว",
"ca": "Tòquio",
"is": "Tókýó",
"ru": "Токио",
"nl": "Tokio",
"mr": "तोक्यो",
"ko": "도쿄도",
"mi": "Tōkio",
"tg": "Токио",
"fi": "Tokio",
"da": "Tokyo",
"tr": "Tokyo",
"en": "Tokyo",
"de": "Tokio",
"el": "Τόκιο",
"hr": "Tokio",
"ia": "Tokyo",
"zh": "东京都/東京都",
"oc": "Tòquio",
"bg": "Токио",
"sl": "Tokio",
"eo": "Tokio",
"pt": "Tóquio",
"sk": "Tokio",
"sr": "Токио",
"vi": "Tokyo",
"lb": "Tokio",
"lt": "Tokijas",
"he": "טוקיו",
"pl": "Tokio",
"ku": "Tokyo",
"fa": "توکیو",
"uk": "Токіо",
"sv": "Tokyo",
"fr": "Tokyo",
"kn": "ಟೋಕ್ಯೊ",
"es": "Tokio"
},
"lat": 35.6828387,
"lon": 139.7594549,
"country": "JP"
},
{
"name": "Chofu",
"local_names": {
"tg": "Чōфу",
"ms": "Chofu",
"nl": "Chofu",
"uk": "Тьофу",
"sv": "Chofu",
"th": "โชฟุ",
"it": "Chōfu",
"gl": "Chōfu, Tōkyō",
"pt": "Chofu",
"de": "Chōfu",
"sh": "Čofu",
"zh": "調布市",
"ja": "調布市",
"et": "Chōfu",
"es": "Chofu",
"bg": "Чофу",
"fr": "Chōfu",
"ru": "Тёфу",
"fa": "چوفو، توکیو",
"ko": "조후시",
"fi": "Chōfu",
"ar": "تشوفو، طوكيو",
"lt": "Čiofu",
"sr": "Чофу",
"pl": "Chōfu",
"en": "Chofu"
},
"lat": 35.660036,
"lon": 139.554815,
"country": "JP"
},
{
"name": "Tama",
"local_names": {
"th": "ทามะ",
"it": "Tama",
"ms": "Tama",
"fr": "Tama",
"pl": "Tama",
"zh": "多摩市",
"de": "Tama",
"bg": "Тама",
"uk": "Тама",
"es": "Tama",
"gl": "Tama, Tōkyō",
"fi": "Tama",
"ja": "多摩市",
"ko": "다마시",
"tg": "Тама",
"lt": "Tama",
"sh": "Tama",
"pt": "Tama",
"sr": "Тама",
"ar": "تاما، طوكيو",
"en": "Tama",
"fa": "تاما، توکیو",
"nl": "Tama",
"ru": "Тама"
},
"lat": 35.637188,
"lon": 139.443503,
"country": "JP"
}
]
最後に
今回は「OpenWeather API」の無料枠でできる可能性について調べてみました。
無料でも結構使える機能が多くて驚きました。