こんにちは、ヒガシです。
このページでは、指定した緯度経度における、3時間毎、5日分の天気予報データを取得する方法をご紹介していきます。
時刻、気温、湿度、天気(晴れ or 曇り or 雨)を取得していきます。
それではさっそくやっていきましょう!
緯度経度から週間天気予報を取得する関数
さっそくですが、以下が冒頭に紹介した処理を実施可能な関数です。
import requests
from datetime import datetime, timedelta
def get_weather(latitude, longitude):
weather_key = 'YOUR API KEY'
url = 'https://api.openweathermap.org/data/2.5/forecast'
params = {
"lat": latitude,
"lon": longitude,
'units': 'metric',
'appid': weather_key
}
response = requests.get(url, params=params)
weather_data = response.json()
print(weather_data)
forecast = weather_data['list']
result = []
for data in forecast:
dt_txt = data['dt_txt']
dt_index = datetime.fromisoformat(dt_txt)
dt_index += timedelta(hours=9)
dt = dt_index.isoformat()
temp = data['main']['temp']
humidity = data['main']['humidity']
weather = data['weather'][0]['main']
result.append([dt, temp, humidity, weather])
return result
※ここで一つ注意点です。
このOpenWetherMapAPIは世界標準時間をベースに結果を返してきます。
日本の時刻に合わせようとするとそこから9時間ずらさないといけません。
その処理を行っているのがdt_index += timedelta(hours=9)の部分です。
もし日本以外の場所を入力する場合はここを適宜書き換えましょう。
あとはこの関数に天気を見たい場所の緯度経度を渡してあげるだけでOKです。
大阪駅の天気予報を確認してみる
それでは先ほど作った関数を実際に使ってみましょう。
まずは大阪駅の緯度経度を入れてみます。
latitude, longitude = 34.7025912174535, 135.49590768076592 #大阪駅
get_weather(latitude, longitude)
こいつを実行すると以下の結果が得られました。
左から時刻、気温、湿度、天気です。
Yahooの天気予報と比較してみましたが、気温はだいたいこんなもんですね。
湿度も日本っぽい多湿な感じが出てますね。
アメリカのフェニックスでやってみる
次はアメリカのフェニックスでやってみましょう。
日本以外の結果を取得する場合、先ほども述べたとおり、プログラムの時間調整が必要です。
アメリカの西海外は世界標準時間-8時間ですので以下のように書き換えます。
dt_index -= timedelta(hours=8)
フェニックスの緯度経度を入れてみます。
latitude, longitude = 33.45148623630964, -112.06489837614912
get_weather(latitude, longitude)
以下の結果が得られました。
暑い。そしてカラッカラですね。
湿度8%なんて場所があるとは知らなった。
おわりに
というわけで今回はOpenWetherMapAPIを使って3時間ごとの週間天気予報を取得するとうことをやってみました。
世界標準時間の補正は面倒ですが、経度から自動計算できそうですね。
それではまた!
コメント