【Colab / Python】気象庁API - 気象データの収集

本記事は[マイナビ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/mynavi) の11日目の記事になります。

## 本記事を読んで欲しい方
- 気象データの収集をしたい方
- Python or GASを利用しデータの収集をしたい方

## 目次

1. [はじめに](#はじめに)
2. [データ収集前の確認事項](#データ収集前の確認事項)
3. [対象の気象データ](#対象の気象データ)
4. [実行環境](#実行環境)
5. [ソースコード](#ソースコード)

## はじめに
弊社のアドベントカレンダーへの投稿 & Qiitaへの投稿をさせて頂くのは今回で2回目になります。
不慣れな部分もあるかと思いますが温かい目でご覧に頂けますと幸いです。

今回、この記事の執筆に至った経緯としては、今年(2021年)の2月16日にあった気象庁ホームページのリニューアルになります。
以前私はリニューアル前の気象庁のホームページに対しスクレイピングを行い、気象データを収集して翌日の天気をLINEやSlackへ通知するという事を行っていました。
スクレイピングを利用すればホームページの構造さえ変化しない限り半永久的に利用が可能なのですが、このリニューアルに伴いホームページの構造が一新された事に伴い、気象データが取得出来なくなってしまいました。
リニューアル後のホームページに対応させ、私と同様に気象データの収集を行っている方へ知見共有になればと思います。

## データ収集前の確認事項

### 気象庁ホームページのコンテンツの利用について


早速になりますが、気象庁ホームページのコンテンツの利用について簡単に説明をさせて頂きます。
こちら、認識をされている方につきましては読み飛ばして頂いて構いません。

本記事で紹介する「気象庁から配信されているリソース」(以下、「気象庁API」)ですが、
アクセストークや特定ドメインからのみのリクエスト許可などは設定されていないので基本的にどなたでもアクセス・利用が可能です。
とは言っても、利用上最低限のルールがございますのでまずは以下をご一読頂ければ幸いです。

参照記事 : [気象庁ホームページ防災気象情報のURL構造](https://qiita.com/e_toyoda/items/7a293313a725c4d306c0#%E7%84%A1%E4%BF%9D%E8%A8%BC%E3%81%A7%E3%81%99%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%82%82%E3%81%97%E3%82%8C%E3%81%AA%E3%81%84%E3%81%97%E5%A4%89%E3%82%8F%E3%82%8B%E3%81%8B%E3%82%82%E3%81%97%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93)
<details>
<summary>記事詳細</summary>
<div>

|![気象庁ホームページのコンテンツの利用について](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214818/ee931eab-4b21-3b12-cac5-602de52c2893.jpeg)|
|:-:|
</div>
</details>

参照記事に記載されている通り、
気象業務法でいう予報業務に該当しない場合は`クリエイティブ・コモンズ・ライセンスの表示4.0　国際`に則っていれば利用が可能のようです。詳しくは[気象庁ホームページの利用規約](https://www.jma.go.jp/jma/kishou/info/coment.html)をご確認下さい。

また気象庁APIですが、サイト内部で利用されているデータがたまたま見えていて、それが利用できてしまうという立ち位置なので気象データの提供を目的として配信をされている訳ではないようです。(そのため気象庁では正式に公開されているAPIと発表されていません。仕様変更や運用状況のお知らせは約束されていないのでご注意ください。)

以上のことをご認識頂き、上記の利用規約に則った上で節度あるご利用頂ければと思います。

## 対象の気象データ
気象APIで公開されているデータはいくつかありますが、今回は以下の3つをターゲットにして、天気概況, 翌日の天気, 現在の気温/降水量あたりを収集しようかなと思います。

* [気象庁API - 天気概況(当日/翌日) @東京都](https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json)
<details><summary>例 (天気概況(当日/翌日) @東京都)</summary><div>

取得日 : 2021/12/09
地域 : 東京都
エリア番号 : 130000
ベースとなるURL : `www.jma.go.jp/bosai/forecast/data/overview_forecast/{エリア番号}.json`  
<br>
<div>データの詳細↓</div>

```json
{
  "publishingOffice":"気象庁",
  "reportDatetime":"2021-12-09T16:38:00+09:00",
  "targetArea":"東京都",
  "headlineText":"",
  "text":"　低気圧が日本の東にあって、東北東へ進んでいます。一方、高気圧が日本付近を覆っています。\n\n　東京地方は、晴れています。\n\n　９日は、高気圧に覆われるため、晴れる見込みです。\n\n　１０日は、高気圧に覆われますが、上空の気圧の谷や湿った空気の影響を受けるため、曇り時々晴れとなるでしょう。\n\n【関東甲信地方】\n　関東甲信地方は、晴れや曇りとなっています。\n\n　９日は、高気圧に覆われ晴れますが、湿った空気の影響を受ける沿岸部では、晴れや曇りとなるでしょう。\n\n　１０日は、高気圧に覆われますが、上空の気圧の谷や湿った空気の影響を受けるため、曇りや晴れとなる見込みです。\n\n　関東地方と伊豆諸島の海上では、９日から１０日にかけてうねりを伴い、９日は大しけとなり、１０日はしけるでしょう。船舶は高波に警戒してください。"
}
```
</div></details>  

* [気象庁API - 天気予報 @東京都](https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json)
<details><summary>例 (天気予報 @東京都)</summary><div>

取得日 : 2021/12/09
地域 : 東京都
エリア番号 : 130000
ベースとなるURL : `www.jma.go.jp/bosai/forecast/data/forecast/{エリア番号}.json`
<br>
<div>データ詳細↓</div>

```json
[
  {
    "publishingOffice":"気象庁",
    "reportDatetime":"2021-12-09T17:00:00+09:00",
    "timeSeries":[
      { // 直近3日間(当日含む)の天気予報
        "timeDefines":["2021-12-09T17:00:00+09:00","2021-12-10T00:00:00+09:00","2021-12-11T00:00:00+09:00"], // 予報対象の日時
        "areas":[
          {
            "area":{"name":"東京地方","code":"130010"}, // 予報対象のエリア
            "weatherCodes":["100","201","101"], // 天気に対応するコード
            "weathers":["晴れ","くもり　時々　晴れ","晴れ　時々　くもり"], // 天気
            "winds":["北東の風　２３区西部　では　北東の風　やや強く","北の風","北の風　後　南の風"], // 風向
            "waves":["１メートル　後　０．５メートル","０．５メートル","０．５メートル"] // 風速
          },
          {
            "area":{"name":"伊豆諸島北部","code":"130020"},
            "weatherCodes":["101","201","101"],
            "weathers":["晴れ　夜のはじめ頃　くもり","くもり　朝晩　晴れ","晴れ　時々　くもり"],
            "winds":["北東の風　やや強く　新島　では　北東の風　強く","北東の風　やや強く","北東の風　後　南の風"],
            "waves":["４メートル　うねり　を伴う　ただし　新島　では　５メートル　後　４メートル　うねり　を伴う","３メートル　うねり　を伴う　ただし　新島　では　４メートル　後　３メートル　うねり　を伴う","３メートル　後　２．５メートル　うねり　を伴う"]
          },
          {
            "area":{"name":"伊豆諸島南部","code":"130030"},
            "weatherCodes":["200","200","101"],
            "weathers":["くもり　八丈島　では　雨","くもり　夜　晴れ","晴れ　時々　くもり"],
            "winds":["北東の風　強く","北東の風　やや強く","北西の風"],
            "waves":["６メートル　うねり　を伴う　ただし　三宅島　では　５メートル　うねり　を伴う","５メートル　後　４メートル　うねり　を伴う　ただし　三宅島　では　５メートル　後　３メートル　うねり　を伴う","３メートル　後　２．５メートル　うねり　を伴う"]
          },
          {
            "area":{"name":"小笠原諸島","code":"130040"},
            "weatherCodes":["111","201","101"],
            "weathers":["晴れ　夜遅く　くもり","くもり　時々　晴れ","晴れ　時々　くもり"],
            "winds":["北の風　やや強く","北の風　後　やや強く","北の風　やや強く　後　北東の風　やや強く"],
            "waves":["５メートル　うねり　を伴う","５メートル　後　４メートル　うねり　を伴う","４メートル　後　３メートル　うねり　を伴う"]
          }
        ]
      },
      { // 直近6時間毎の降水確率
        "timeDefines":["2021-12-09T18:00:00+09:00","2021-12-10T00:00:00+09:00","2021-12-10T06:00:00+09:00","2021-12-10T12:00:00+09:00","2021-12-10T18:00:00+09:00"], // 予報対象の日時
        "areas":[
          {
            "area":{"name":"東京地方","code":"130010"}, // エリアとエリア番号
            "pops":["0","10","10","0","0"] // 降水確率
          },
          {
            "area":{"name":"伊豆諸島北部","code":"130020"},
            "pops":["10","10","10","10","10"]
          },
          {
            "area":{"name":"伊豆諸島南部","code":"130030"},
            "pops":["30","20","20","10","10"]
          },
          {
            "area":{"name":"小笠原諸島","code":"130040"},
            "pops":["10","10","10","10","20"]
          }
        ]
      },
      { // 翌日の最低気温と日中の最高気温
        "timeDefines":["2021-12-10T00:00:00+09:00","2021-12-10T09:00:00+09:00"], // 予報対象の日時
        "areas":[
          {
            "area":{"name":"東京","code":"44132"}, // エリアとエリア番号
            "temps":["5","12"] // 最低気温, 日中の最高気温
          },
          {
            "area":{"name":"大島","code":"44172"},
            "temps":["7","13"]
          },
          {
            "area":{"name":"八丈島","code":"44263"},
            "temps":["11","16"]
          },
          {
            "area":{"name":"父島","code":"44301"},
            "temps":["19","22"]
          }
        ]
      }
    ]
},
{
  "publishingOffice":"気象庁",
  "reportDatetime":"2021-12-09T17:00:00+09:00",
  "timeSeries":[
    { // 週間予報 (天気, 降水確率, 予報に対する信頼度)
      "timeDefines":["2021-12-10T00:00:00+09:00","2021-12-11T00:00:00+09:00","2021-12-12T00:00:00+09:00","2021-12-13T00:00:00+09:00","2021-12-14T00:00:00+09:00","2021-12-15T00:00:00+09:00","2021-12-16T00:00:00+09:00"], // 予報対象の日時
      "areas":[
          {
            "area":{"name":"東京地方","code":"130010"}, // エリアとエリア番号
            "weatherCodes":["201","101","101","101","101","101","201"], // 天気に対応するコード
            "pops":["","10","10","20","20","20","30"], // 降水確率
            "reliabilities":["","","A","A","A","A","A"] // 予報に対する信頼度
          },
          {
            "area":{"name":"伊豆諸島北部","code":"130020"},
            "weatherCodes":["201","101","101","101","101","201","201"],
            "pops":["","10","20","20","20","30","30"],
            "reliabilities":["","","A","A","A","A","B"]
          },
          {
            "area":{"name":"伊豆諸島南部","code":"130030"},
            "weatherCodes":["200","101","202","201","201","201","201"],
            "pops":["","20","50","30","30","30","30"],
            "reliabilities":["","","C","C","B","B","C"]
          },
          {
            "area":{"name":"小笠原諸島","code":"130040"},
            "weatherCodes":["201","101","101","201","201","201","201"],
            "pops":["","10","10","20","20","20","30"],
            "reliabilities":["","","A","A","A","A","A"]
          }
        ]
      },
      { // 週間予報 (最低気温, 最低気温の予測上限, 最低気温の予測下限, 日中の最高気温, 日中の最高気温の予測上限, 日中の最高気温の予測下限)
        "timeDefines":["2021-12-10T00:00:00+09:00","2021-12-11T00:00:00+09:00","2021-12-12T00:00:00+09:00","2021-12-13T00:00:00+09:00","2021-12-14T00:00:00+09:00","2021-12-15T00:00:00+09:00","2021-12-16T00:00:00+09:00"],
        "areas":[
          {
            "area":{"name":"東京","code":"44132"}, // エリアとエリア番号
            "tempsMin":["","4","6","6","4","3","4"], // 最低気温
            "tempsMinUpper":["","5","8","8","6","5","5"], // 最低気温の予測上限
            "tempsMinLower":["","2","4","4","2","1","2"], // 最低気温の予測下限
            "tempsMax":["","15","17","14","12","14","15"], // 日中の最高気温
            "tempsMaxUpper":["","17","19","16","14","16","18"], // 日中の最高気温の予測上限
            "tempsMaxLower":["","13","15","11","9","10","13"] // 日中の最高気温の予測下限
          },
          {
            "area":{"name":"大島","code":"44172"},
            "tempsMin":["","9","12","8","7","8","10"],
            "tempsMinUpper":["","11","13","10","9","10","12"],
            "tempsMinLower":["","7","10","6","5","6","8"],
            "tempsMax":["","16","17","14","13","15","16"],
            "tempsMaxUpper":["","17","19","16","15","17","18"],
            "tempsMaxLower":["","15","15","12","11","13","14"]
          },
          {
            "area":{"name":"八丈島","code":"44263"},
            "tempsMin":["","11","13","11","10","11","12"],
            "tempsMinUpper":["","13","15","13","12","13","15"],
            "tempsMinLower":["","10","11","9","8","9","11"],
            "tempsMax":["","17","19","16","15","16","18"],
            "tempsMaxUpper":["","19","20","18","17","18","19"],
            "tempsMaxLower":["","16","17","15","12","15","16"]
          },
          {
            "area":{"name":"父島","code":"44301"},
            "tempsMin":["","18","19","18","18","19","19"],
            "tempsMinUpper":["","19","20","20","19","20","21"],
            "tempsMinLower":["","17","17","17","17","17","17"],
            "tempsMax":["","22","23","23","23","22","23"],
            "tempsMaxUpper":["","23","24","24","24","24","25"],
            "tempsMaxLower":["","21","22","22","22","21","22"]
          }
        ]
      }
    ],
    "tempAverage":{ // 向こう一週間（明日から７日先まで）の平年値 (最低気温, 最高気温), 
      "areas":[
        {
          "area":{"name":"東京","code":"44132"},
          "min":"4.1","max":"12.2"
        },
        {
          "area":{"name":"大島","code":"44172"},
          "min":"6.8","max":"13.6"
        },
        {
          "area":{"name":"八丈島","code":"44263"},
          "min":"10.2","max":"15.8"
        },
        {
          "area":{"name":"父島","code":"44301"},
          "min":"18.4","max":"23.0"
        }
      ]
    },
    "precipAverage":{ // 向こう一週間（明日から７日先まで）の平年値 (降水量の７日間合計)
      "areas":[
        {
          "area":{"name":"東京","code":"44132"},
          "min":"1.5","max":"12.1"
        },
        {
          "area":{"name":"大島","code":"44172"},
          "min":"6.3","max":"26.7"
        },
        {
          "area":{"name":"八丈島","code":"44263"},
          "min":"20.9","max":"49.3"
        },
        {
          "area":{"name":"父島","code":"44301"},
          "min":"4.7","max":"26.4"
        }
      ]
    }
  }
]
```
</div></details>
 

* [気象庁API - アメダス @千代田区 (北の丸公園)](https://www.jma.go.jp/bosai/amedas/data/point/44132/20211209_21.json)
<details><summary>例 (アメダス @千代田区 (北の丸公園))</summary><div>

取得日 : 2021/12/09 22:00~
地域 : 東京都 千代田区 北の丸公園
アメダス(観測所)番号 : 44132
ベースとなるURL : `https://www.jma.go.jp/bosai/amedas/data/point/{アメダス(観測所)番号}/{yyyymmdd}_{h3}.json`

- `yyyymmdd` : 年月日
- `h3` : 3時間ごとの時間(24時間表記), 24は無し -> 00, 03, 06, ... , 18, 21
    - なお、未来の時刻を入れてもデータはないのでデータの取得はできません。
    - 時刻は[気象庁が配信しているデータに対応する時刻](https://www.jma.go.jp/bosai/amedas/data/latest_time.txt)を元に適切な時刻を入力し、データを取得してください。
<br>
<div>データの詳細↓</div>

```json
{
  "20211209210000":{ // 2021/12/09/21:00:00 を指しています
    "prefNumber":44, // 都道府県
    "observationNumber":132, // 観測所
    "pressure":[1026.5,0], // 現地気圧
    "normalPressure":[1029.5,0], // 海面気圧
    "temp":[9.3,0], // 気温
    "humidity":[64,0], // 湿度
    "snow":[0,0], // 積雪深
    "snow1h":[0,0], // 1時間降雪量
    "snow6h":[0,0], // 6時間降雪量
    "snow12h":[0,0], // 12時間降雪量
    "snow24h":[0,0], // 24時間降雪量
    "sun10m":[0,0], // 10分間日照時間
    "sun1h":[0.0,0], // 1時間日照時間
    "precipitation10m":[0.0,0], // 10分間降水量
    "precipitation1h":[0.0,0], // 1時間降水量
    "precipitation3h":[0.0,0], // 3時間降水量
    "precipitation24h":[0.5,0], // 24時間降水量
    "windDirection":[1,0], // 風向
    "wind":[3.5,0], // 風速
    "maxTempTime":{"hour":3,"minute":55}, // これまでの時間までで日最高気温が出た時刻
    "maxTemp":[14.2,0], // これまでの時間までの日最高気温
    "minTempTime":{"hour":20,"minute":36}, // これまでの時間までで日最低気温が出た時刻
    "minTemp":[8.4,0], // これまでの時間までで日最高気温
    "gustTime":{"hour":16,"minute":50}, // これまでの時間までで日最大風速が出た時刻
    "gustDirection":[1,0], // これまでの時間までで日最大風速が出た風向
    "gust":[10.8,0] // これまでの時間までで日最大風速
  },
  "20211209211000":{
    "prefNumber":44,
    "observationNumber":132,
    "pressure":[1026.4,0],
    "normalPressure":[1029.4,0],
    "temp":[9.3,0],
    "humidity":[64,0],
    "sun10m":[0,0],
    "sun1h":[0.0,0],
    "precipitation10m":[0.0,0],
    "precipitation1h":[0.0,0],
    "precipitation3h":[0.0,0],
    "precipitation24h":[0.5,0],
    "windDirection":[1,0],
    "wind":[4.9,0],
    "maxTempTime":{"hour":3,"minute":55},
    "maxTemp":[14.2,0],
    "minTempTime":{"hour":20,"minute":36},
    "minTemp":[8.4,0],
    "gustTime":{"hour":16,"minute":50},
    "gustDirection":[1,0],
    "gust":[10.8,0]
  },
  "20211209212000":{
    "prefNumber":44,
    "observationNumber":132,
    "pressure":[1026.3,0],
    "normalPressure":[1029.3,0],
    "temp":[9.2,0],
    "humidity":[64,0],
    "sun10m":[0,0],
    "sun1h":[0.0,0],
    "precipitation10m":[0.0,0],
    "precipitation1h":[0.0,0],
    "precipitation3h":[0.0,0],
    "precipitation24h":[0.0,0],
    "windDirection":[1,0],
    "wind":[4.1,0],
    "maxTempTime":{"hour":3,"minute":55},
    "maxTemp":[14.2,0],
    "minTempTime":{"hour":20,"minute":36},
    "minTemp":[8.4,0],
    "gustTime":{"hour":16,"minute":50},
    "gustDirection":[1,0],
    "gust":[10.8,0]
  },
  // それぞれの値は配列で格納されており、0番目の要素は値、1番目の要素にAQC識別符(品質情報)が入ります。
  // AQC識別符が0の場合、正常を示しています。その他の値が入っている場合は異常値になっている可能性がありますが、観測データによってAQC識別符が意味する内容が変わるようなので、それぞれの項目に対してAQC識別符を確認するようにして下さい。
  // 後略
}
```
</div></details>  

今回は例として東京都を対象としてデータの収集を行っていますが、
対象とするエリアや観測所を変更してデータの収集を行いたい場合、下記を参考にして対象とするデータの取得が可能です。

- [エリア一覧](https://www.jma.go.jp/bosai/common/const/area.json)
- [アメダス(観測所)一覧](https://www.jma.go.jp/bosai/amedas/const/amedastable.json)

また天気予報内で使われている各天気に対応するコードについては下記をご参照下さい。
<details><summary>天気に対応するコード一覧</summary><div>

```json:weatherCodes.json
{
  100: '晴',
  101: '晴時々曇',
  102: '晴一時雨',
  103: '晴時々雨',
  104: '晴一時雪',
  105: '晴時々雪',
  106: '晴一時雨か雪',
  107: '晴時々雨か雪',
  108: '晴一時雨か雷雨',
  110: '晴後時々曇',
  111: '晴後曇',
  112: '晴後一時雨',
  113: '晴後時々雨',
  114: '晴後雨',
  115: '晴後一時雪',
  116: '晴後時々雪',
  117: '晴後雪',
  118: '晴後雨か雪',
  119: '晴後雨か雷雨',
  120: '晴朝夕一時雨',
  121: '晴朝の内一時雨',
  122: '晴夕方一時雨',
  123: '晴山沿い雷雨',
  124: '晴山沿い雪',
  125: '晴午後は雷雨',
  126: '晴昼頃から雨',
  127: '晴夕方から雨',
  128: '晴夜は雨',
  130: '朝の内霧後晴',
  131: '晴明け方霧',
  132: '晴朝夕曇',
  140: '晴時々雨で雷を伴う',
  160: '晴一時雪か雨',
  170: '晴時々雪か雨',
  181: '晴後雪か雨',
  200: '曇',
  201: '曇時々晴',
  202: '曇一時雨',
  203: '曇時々雨',
  204: '曇一時雪',
  205: '曇時々雪',
  206: '曇一時雨か雪',
  207: '曇時々雨か雪',
  208: '曇一時雨か雷雨',
  209: '霧',
  210: '曇後時々晴',
  211: '曇後晴',
  212: '曇後一時雨',
  213: '曇後時々雨',
  214: '曇後雨',
  215: '曇後一時雪',
  216: '曇後時々雪',
  217: '曇後雪',
  218: '曇後雨か雪',
  219: '曇後雨か雷雨',
  220: '曇朝夕一時雨',
  221: '曇朝の内一時雨',
  222: '曇夕方一時雨',
  223: '曇日中時々晴',
  224: '曇昼頃から雨',
  225: '曇夕方から雨',
  226: '曇夜は雨',
  228: '曇昼頃から雪',
  229: '曇夕方から雪',
  230: '曇夜は雪',
  231: '曇海上海岸は霧か霧雨',
  240: '曇時々雨で雷を伴う',
  250: '曇時々雪で雷を伴う',
  260: '曇一時雪か雨',
  270: '曇時々雪か雨',
  281: '曇後雪か雨',
  300: '雨',
  301: '雨時々晴',
  302: '雨時々止む',
  303: '雨時々雪',
  304: '雨か雪',
  306: '大雨',
  308: '雨で暴風を伴う',
  309: '雨一時雪',
  311: '雨後晴',
  313: '雨後曇',
  314: '雨後時々雪',
  315: '雨後雪',
  316: '雨か雪後晴',
  317: '雨か雪後曇',
  320: '朝の内雨後晴',
  321: '朝の内雨後曇',
  322: '雨朝晩一時雪',
  323: '雨昼頃から晴',
  324: '雨夕方から晴',
  325: '雨夜は晴',
  326: '雨夕方から雪',
  327: '雨夜は雪',
  328: '雨一時強く降る',
  329: '雨一時みぞれ',
  340: '雪か雨',
  350: '雨で雷を伴う',
  361: '雪か雨後晴',
  371: '雪か雨後曇',
  400: '雪',
  401: '雪時々晴',
  402: '雪時々止む',
  403: '雪時々雨',
  405: '大雪',
  406: '風雪強い',
  407: '暴風雪',
  409: '雪一時雨',
  411: '雪後晴',
  413: '雪後曇',
  414: '雪後雨',
  420: '朝の内雪後晴',
  421: '朝の内雪後曇',
  422: '雪昼頃から雨',
  423: '雪夕方から雨',
  425: '雪一時強く降る',
  426: '雪後みぞれ',
  427: '雪一時みぞれ',
  450: '雪で雷を伴う'
}
```
</div></details>  

## 実行環境
今回の実行環境は以下のようになっています。
Python
> Google Colaboratory
Python 3.7.12

## ソースコード

簡単にですが、参考用のソースコードを記載します。
殴り書きで雑な書き方になっているところご了承ください。

```python:
# -*- coding: utf-8 -*-
import requests
from datetime import datetime

def confirm_aqc(data:list) -> str:
  """
  品質情報を確認し、データを文字列で返す
  input : list
  return : str
  """
  if data[1] == 0:
    return str(data[0])
  else:
    return "品質情報を確認して下さい"


def find_index(data:list, code:str) -> int:
  """
  対象のエリアのデータが格納されているインデックス番号を返す
  input : list
  return : int
  """
  index = [num for num, i in enumerate(data) if i["area"]["code"] == code][0]
  return index

latest_time_url = "https://www.jma.go.jp/bosai/amedas/data/latest_time.txt"
latest_time_req = requests.get(latest_time_url)
latest_datetime = datetime.strptime(latest_time_req.text, "%Y-%m-%dT%H:%M:%S%z") # タイムゾーン込みで日時文字列をdatetime型へ
yyyymmdd = latest_datetime.strftime('%Y%m%d') # 年月日　- アメダスデータ取得時に必要
h3 = ("0" + str((latest_datetime.hour//3)*3))[-2:] # 3時間ごとの時間 - アメダスデータ取得時に必要
area = "130000" # エリア番号 - 今回は東京都
detail_area = "130010" # 詳細の予報エリア番号 - 今回は東京地方
stnid = "44132" # 観測所番号 - 今回は千代田区 北の丸公園

# 天気概況
overview_forecast_url = f"https://www.jma.go.jp/bosai/forecast/data/overview_forecast/{area}.json"
overview_forecast_req = requests.get(overview_forecast_url)
overview_forecast_data = overview_forecast_req.json() # 天気概況
overview_forecast_text = "\n".join(overview_forecast_data["text"].split())

# 天気予報
forecast_url = f"https://www.jma.go.jp/bosai/forecast/data/forecast/{area}.json"
forecast_req = requests.get(forecast_url)
forecast_data = forecast_req.json()
forecast_data = forecast_data[0]["timeSeries"][0]["areas"] #エリア毎の予報データ（天気, 風速, 風向...etc）が格納
forecast_data_target_index = find_index(forecast_data, detail_area)
weathers = forecast_data[forecast_data_target_index]["weathers"] # 天気
tommorow_weather = " ".join(weathers[1].split())

# アメダス
amedas_url = f"https://www.jma.go.jp/bosai/amedas/data/point/{stnid}/{yyyymmdd}_{h3}.json"
amedas_req = requests.get(amedas_url)
amedas_data = amedas_req.json()
latest_key = max(amedas_data) # 最新のアメダスデータが入っているkey
latest_temp = confirm_aqc(amedas_data[latest_key]["temp"]) # 最新の気温データを取得, 品質情報を確認
latest_precipitation10m = confirm_aqc(amedas_data[latest_key]["precipitation10m"]) # 最新の降水量データを取得, 品質情報を確認

print(f"現在の気温 : {latest_temp} 度")
print(f"現在の降水量(10分あたり) : {latest_precipitation10m} mm")
print(f"翌日の天気: {tommorow_weather}")
print(f"天気概況 : {overview_forecast_text}")
```

下記が結果です。

```:結果
現在の気温 : 11.3 度
現在の降水量(10分あたり) : 0.0 mm

翌日の天気: 晴れ 夜 くもり

天気概況 : 本州付近は高気圧に覆われていますが、上空の気圧の谷が通過しています。また、関東甲信地方には湿った空気が流れ込んでいます。
東京地方は、曇りや晴れとなっています。
１０日は、高気圧に覆われますが、上空の気圧の谷や湿った空気の影響を受けるため、曇り時々晴れとなるでしょう。
１１日は、高気圧に覆われますが、気圧の谷や寒気の影響を受けるため、晴れで夜は曇りとなる見込みです。
【関東甲信地方】
関東甲信地方は、曇りや晴れとなっています。
１０日は、高気圧に覆われますが、上空の気圧の谷や湿った空気の影響を受けるため、曇りや晴れとなるでしょう。
１１日は、高気圧に覆われますが、気圧の谷や寒気の影響を受けるため、晴れや曇りの見込みです。
関東地方と伊豆諸島の海上では、１０日から１１日にかけて、うねりを伴い、しけるでしょう。船舶は高波に注意してください。
```

## 気象庁API一覧 
把握している気象庁API中で利用できそうなものを紹介します。
今回上記の本文中で触れられなかったものもこちらに記載しようと思います。

##### [気象庁API - 配信しているデータに対応する時刻](https://www.jma.go.jp/bosai/amedas/data/latest_time.txt)
##### [気象庁API - エリア一覧](https://www.jma.go.jp/bosai/common/const/area.json)
##### [気象庁API - アメダス(観測所)一覧](https://www.jma.go.jp/bosai/amedas/const/amedastable.json)
##### [気象庁API - アメダス配信データ　各要素の説明](https://www.jma.go.jp/bosai/const/selectorinfos/amedas.json)
##### [気象庁API - レーダー実況の配信時刻](https://www.jma.go.jp/bosai/jmatile/data/nowc/targetTimes_N1.json)
##### [気象庁API - 降水ナウキャストの配信時刻](https://www.jma.go.jp/bosai/jmatile/data/nowc/targetTimes_N2.json)
##### [気象庁API - ひまわり(日本付近の画像)の配信時刻](https://www.jma.go.jp/bosai/himawari/data/satimg/targetTimes_jp.json)
##### [気象庁API - ひまわり（フルディスク画像）の配信時刻](https://www.jma.go.jp/bosai/himawari/data/satimg/targetTimes_fd.json)

以下からは地点や時刻などを選んでリクエストを送る気象庁APIの一覧

##### [気象庁API - エリア毎の注意報/警報](https://www.jma.go.jp/bosai/warning/data/warning/130000.json)

```
https://www.jma.go.jp/bosai/warning/data/warning/{area}.json
```

##### [気象庁API - アメダス（全国地図表示用）](https://www.jma.go.jp/bosai/amedas/data/map/20211210200000.json)

```
https://www.jma.go.jp/bosai/amedas/data/map/{latest_time}.json
```
`latest_time` -> yyyymmddhhmm00 (例:`"20211210202000"`)  

##### [気象庁API - アメダス（地点系）](https://www.jma.go.jp/bosai/amedas/data/point/44132/20211210_18.json)

```
https://www.jma.go.jp/bosai/amedas/data/point/{stnid}/{yyyymmdd}_{h3}.json
```

`stnid` -> アメダス(観測所)番号 (例:`"44132"` / 千代田区 北の丸公園)
`yyyymmdd` -> yyyymmdd (例:`"20211210"`)
`h3` -> 3時間ごとの時間(24時間表記), 24は無し(例: `"00"`, `"03"`, `"06"`, ... , `"18"`, `"21"`)

- なお、未来の時刻を入れてもデータはないのでデータの取得はできません。
- 時刻は[気象庁が配信しているデータに対応する時刻](https://www.jma.go.jp/bosai/amedas/data/latest_time.txt)に対応する



## 参考にさせて頂いた記事

@e_toyoda 
- [気象庁ホームページ防災気象情報のURL構造](https://qiita.com/e_toyoda/items/7a293313a725c4d306c0)