この記事は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月時点では、十勝地方と奄美地方)。
参考にさせていただいた情報
どうもありがとうございます!

