OpenWeatherMAPを使って天候情報を取得したい
天候情報を使ってbotを作りたかったので、その準備としてのメモ。
1日ごとの天候情報が取得したかったが、3時間おきの予報を取得するものしか日本語で書いてある記事がなかったので、残しておきます。
OpenWeatherMAPについて
OpenWeatherMAPはフリーで使える天候に関するAPIです。有料枠を使うと、より取得できる情報が増えます。
無料枠でできるのはこんな感じ。学生の場合は天気予報のDevelopper Planと過去の天候情報のMedium Planが無料で使えるらしいです。
無料プラン | 学生プラン | |
---|---|---|
アクセス数 | 60コール/分 1,000,000コール/月 |
3,000 コール/分 1,000,000,000 コール/月 |
天候情報 | Current Weather Minute Forecast 1 hour* Hourly Forecast 2 days* Daily Forecast 7 days* National Weather Alerts* Historical weather 5 days* |
左記プラス Climatic Forecast 30 days |
地図 | Basic weather maps | Advanced weather maps Historical maps |
過去の天候情報 | 5,000コール/日 Historical API Accumulated Parameters Statistical Weather Data API |
|
その他 | Air Pollution API Geocoding API |
同左 |
ウィジェット | Weather widgets | 同左 |
Uptime | 95% | 99.5% |
※* One Call APIを用いて取得(1000 コール/日)
※National Weather Alerts は日本は未対応(2021年4月現在)
OpenWeatherMAPへ登録する
利用には登録(無料)が必要です。こちらからサインアップできます。
ユーザー名、メールアドレス、パスワードを入力後、認証メールが来るのでリンクを踏めば完了です。
1日ごとの天気を取得する
今回は、1日ごとの情報を取るため、「One Call API」を使います。
API呼び出しは次の通り。
https://api.openweathermap.org/data/2.5/onecall?lat={取得したい地点の緯度}&lon={取得したい地点の経度}&exclude={除外するデータ}&appid={APIキー}&units={単位}&lang={表示言語}
(例)東京の天気を取得する場合(単位:℃、言語:日本語)
https://api.openweathermap.org/data/2.5/onecall?lat=35.6895&lon=139.6917&exclude=current,minutely,hourly,alerts&appid={APIキー}&units=metic&lang=ja
上記の例では、1日ごとの天候情報のみを取得するため、現在時刻や1分ごと、1時間ごとの情報は除外しています。
ちなみに、緯度経度は、「Current Weather Data API」を使うと地名を渡して取得できます。
One Call APIを叩いて取得したjsonデータを整形するとこんな感じ。日本語が不自然。
{daily=[ {uvi=5.83, wind_speed=0.75, dew_point=6.53, humidity=50.0, sunset=1.617267721E9, feels_like={morn=14.7, eve=18.33, day=16.0, night=14.7}, pressure=1021.0, sunrise=1.617222482E9, temp={max=20.82, night=15.83, day=16.94, eve=19.06, morn=15.6, min=15.0}, dt=1.6172424E9, wind_deg=107.0, weather=[{id=803.0, main=Clouds, icon=04d, description=曇りがち}], clouds=80.0, pop=0.05}, {...}], (同様のデータが7日分あります。並び順はバラバラです。) timezone_offset=32400.0, lon=139.6917, lat=35.6895, timezone=Asia/Tokyo}
そのため、当日の天気が知りたければ
var response_weather = UrlFetchApp.fetch('https://api.openweathermap.org/data/2.5/onecall?&lat=35.6895&lon=139.6917&exclude=current,minutely,hourly,alerts&units=metric&lang=ja&appid='+ WEATHER_API_KEY); var weatherToday = JSON.parse(response_weather).daily[0].weather[0].description; Logger.log(weatherToday);
のようにすれば取得できます。
※今回はGoogle Apps Script (GAS)を使いました
botについても後日書いていきたいと思います。