この記事はGoogle Apps Script Advent Calendar 2021の4日目の記事です
気象庁は天気予報データをJSON形式で提供しています。出典元が気象庁ホームページであることを示せば、商用利用もできるそうです。
ご利用上の注意事項(出典:気象庁ホームページ)
https://www.data.jma.go.jp/developer/ryuui.pdf
この天気予報JSONデータをGoogle Apps Scriptで利用できるようにしました。予報を取得したい地域をエリアコード(文末に掲載)で指定すると、直近3日間と、1週間の天気予報をそれぞれ取得できます。
const areaCode = '130000'; // 東京地方
const forecast = WeatherForecast.fetchForecast(areaCode);
const tokyo = forecast.areas[0]; // 東京地方は4つのエリアがあります。最初が東京です。
Logger.log(tokyo.threeDays.map(f => f.summary).join('\n'));
// 12月4日は晴れでしょう。
// 12月5日は、最高気温12℃、最低気温4℃で、晴れでしょう。降水確率は、0時から0%、6時から0%、12時から0%、18時から0%です。
// 12月6日はくもり 時々 晴れでしょう。
Logger.log(tokyo.oneWeek.map(f => f.summary).join('\n'));
// 12月5日は、晴でしょう。
// 12月6日は、最高気温13℃、最低気温4℃、で曇時々晴でしょう。降水確率は20%です。
// 12月7日は、最高気温16℃、最低気温6℃、で曇後一時雨でしょう。降水確率は50%です。
// ...
天気予報をしてくれるチャットbot🤖を作るのに、気象庁のデータを使おうとしたのですが、かなりクセの強いデータ構造でとても苦労しました。なんとか利用できるJSONに変換できたので、Google Apps Scriptのライブラリーとしてコードと一緒に公開しました。
使い方
ライブラリーとして公開しています。最新のコードはこちらです。
Script ID は1AbYCEz2JpHu58yKf15_wcSXEC55xrHO9-XyYuovxRM3IVRCsx44k1bo5
です。
以下、詳しく説明していきます。
まず、文末の表から該当する地域のエリアコードarea_code
を探します。気象庁のホームページへのリンクも一緒に掲載したので、そちらも確認してください。なお、ホームページのURLは https://www.jma.go.jp/bosai/forecast/#area_type=offices&area_code=<area_code>
になります。
例えば、東京地方のエリアコードは130000
です。
該当する気象庁のホームページは https://www.jma.go.jp/bosai/forecast/#area_type=offices&area_code=130000 になります。東京地方の場合、4つの地域(東京地方、伊豆諸島北部、伊豆諸島南部、小笠原諸島)の予報が取得できます。
なお、area_code
とホームページのURLが一致しない場合がありますのでご注意ください(2024年3月時点では、十勝地方と奄美地方)。
次に、Google Apps Script のスクリプトエディターで、ライブラリーを追加します。
左ペイン「ライブラリ」の左隣、+(プラス)ボタンを押して、Script ID 1AbYCEz2JpHu58yKf15_wcSXEC55xrHO9-XyYuovxRM3IVRCsx44k1bo5
を入力し、検索して追加してください。
あとは、スクリプトからWeatherForecast.fetchForecast('130000');
を呼び出せばOKです。取得できるJSONは次のようになります(データ構造の詳しい説明は後述します)。
{
"source": "出典: 気象庁ホームページ https://www.jma.go.jp/jma/index.html",
"reportDate": "2021-12-04T17:00:00+09:00",
"areas": [
{
"area": "東京地方",
"tempSpot": "東京",
"threeDays": [
...
{
"date": "2021-12-05T00:00:00+09:00",
"weather": "晴れ",
"iconUrl": "https://www.jma.go.jp/bosai/forecast/img/100.png",
"wind": "北の風 後 東の風 23区西部 では 北の風 やや強く",
"wave": "1.5メートル 後 0.5メートル",
"chanceOfRain": [
{
"date": "2021-12-05T00:00:00+09:00",
"pop": "0"
},
{
"date": "2021-12-05T06:00:00+09:00",
"pop": "0"
},
{
"date": "2021-12-05T12:00:00+09:00",
"pop": "0"
},
{
"date": "2021-12-05T18:00:00+09:00",
"pop": "0"
}
],
"minTemp": "4",
"maxTemp": "12",
"summary": "12月5日は、最高気温12℃、最低気温4℃で、晴れでしょう。降水確率は、0時から0%、6時から0%、12時から0%、18時から0%です。"
},
...
],
"oneWeek": [
...
{
"date": "2021-12-06T00:00:00+09:00",
"weather": "曇時々晴",
"iconUrl": "https://www.jma.go.jp/bosai/forecast/img/201.png",
"pop": "20",
"minTemp": "4",
"minTempLower": "2",
"minTempUpper": "5",
"maxTemp": "13",
"maxTempLower": "11",
"maxTempUpper": "15",
"summary": "12月6日は、最高気温13℃、最低気温4℃、で曇時々晴でしょう。降水確率は20%です。"
},
...
]
},
{
"area": "伊豆諸島北部",
"tempSpot": "大島",
"threeDays": [
...
なお、海のない県ではareas[i].threeDays[i].wave
はundefined
になります。
また、地方によっては週間予報が存在せず、areas[i].oneWeek
がundefined
になります。
ちなみに、気象庁が提供する元のJSONデータは https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json です。
予報データの構造
気象庁から取得できるJSONデータの構造ですが、かなりクセが強いです。そこで、利用しやすいようにデータ構造を変換しています。データ項目については、ホームページの図と見比べていただくと理解しやすいと思います。
- source 出典元
- areas 地域ごとの天気予報
- area 地域名
- tempSpot 気温予報の場所
- threeDays 直近3日間の予報(ただし、3日分のデータがない場合もある)
- date 予報の日時
- weather 天気
- wind 風
- wave 波
- chanceOfRain 降水確率
- date 降水確率の日時(ここから6時間分)
- pop 降水確率(%)
- minTemp 最低気温
- maxTemp 最高気温
- summary 天気予報のサマリー
- oneWeek 週間予報
- date 予報の日時
- weather 天気
- pop 降水確率(%)
- reliability 信頼度(Aが高い)
- minTemp 最低気温
- minTempLower 最低気温の下限値
- minTempUpper 最低気温の上限値
- maxTemp 最高気温
- maxTempLower 最高気温の下限値
- maxTempUpper 最高気温の上限値
- summary 天気予報のサマリー
エリアコード(area_code)
天気予報を取得できる地域のエリアコード(area_code)一覧です。あわせて気象庁のホームページも確認して、エリアいくつ分の予報データが取得できるのか、ご確認ください。
なお、area_code
とホームページのURLが一致しない場合がありますのでご注意ください(2024年3月時点では、十勝地方と奄美地方)。
参考にさせていただいた情報
どうもありがとうございます!