気象庁ホームページ防災気象情報のURL構造

# 無保証です。間違っているかもしれないし変わるかもしれません

開発者に直接聞いたわけじゃなくて、私もF12押してブラウザの挙動みて考えたものです。

あと、利用規約についてですが、これらリソースの設置目的はAPIとしてのデータ提供ではありません。安定した仕様、きちんとした文書、運用・連絡体制のある機械可読な情報提供は、気象業務支援センターにお願いいたします。あくまで「たまたま使えてしまっている」という程度にとどまります。ただ、まあ、[気象庁ホームページについて](https://www.jma.go.jp/jma/kishou/info/coment.html)にあるとおり、気象業務法にいう予報業務にあたることでなければ、CC-BY 4.0 でいけるとおもっていただいてよいです。

あと、HTTP ヘッダ見たひとはお気づきでしょうが、今のところ Access-Control-Allow-Origin: * 設定になっています。今のところ。

# ひまわり（フルディスク画像）

毎度そうなんですが、 **どうせ一億国民が見られるように用意して、何の道具で持っていくかはいいから、時刻リストを見て持って行ってください** です。

まず時刻一覧を https://www.jma.go.jp/bosai/himawari/data/satimg/targetTimes_fd.json で取得すべきです。結果として得られるJSONは配列で、各要素が basetime, validtime という二種類の時間を与えます。ひまわりについてはこの二種類の時間は同一値の撮影時間です。時間帯はUTCです。

```json:targetTimes_fd.json
[
  {"basetime" : "20210224190000", "validtime" : "20210224190000"}, 
  {"basetime" : "20210224191000", "validtime" : "20210224191000"}, 
  {"basetime" : "20210224192000", "validtime" : "20210224192000"}, 
中略
  {"basetime" : "20210226064000", "validtime" : "20210226064000"}, 
  {"basetime" : "20210226065000", "validtime" : "20210226065000"} 
]

```

ほしい時間が決まったらタイルにアクセスします。このステップを飛ばして現在時刻からファイル発生時刻を予想して**先取りしようとしないでください**。有害無益です。どうせ無駄なので404 Not Found を得るだけでなく、CDNにその404応答が記憶されて次回アクセス時に帰ってきますから、あなたが結果を得るのが遅れるだけでなく、他の利用者さんに迷惑です。

```bash:URI構造
https://www.jma.go.jp/bosai/himawari/data/satimg/{basetime}/fd/{validtime}/{band}/{prod}/{z}/{x}/{y}.jpg
```

* `{basetime}`: 撮影時間
* `{validtime}`: 撮影時間
* `{band}/{prod}`: `B13/TBB` 赤外画像、`B03/ALBD` 可視画像、`B08/TBB` 水蒸気画像、`REP/ETC` トゥルーカラー再現画像、`SND/ETC` 雲頂強調画像
* `{z}/{x}/{y}`: タイル番号。[地理院地図の命名法](https://maps.gsi.go.jp/development/siyou.html#siyou-zm)と共通。

注意

* z（ズームレベル）は 3～5, 範囲外は 404 Not Found 
* x/y はひまわり撮像範囲全体、上記地理院サイトからリンクされている[タイル座標確認ページ](https://maps.gsi.go.jp/development/tileCoordCheck.html#5/35.317/138.691)で調べられます。たとえば東京を含むのは3/7/3, 4/14/6, 5/28/12。
* 用意されていない x/y の組み合わせでは空白画像が返ります

# ひまわり（日本付近画像）

ズームレベル６の（拡大された）画像が、日本付近でだけ提供されています。これは[もともとひまわり8号では日本域を2.5分毎に高解像度撮影している](https://www.data.jma.go.jp/mscweb/ja/info/observation.html)ものです。

時刻一覧は https://www.jma.go.jp/bosai/himawari/data/satimg/targetTimes_jp.json で、2.5分毎に提供されています。

```bash:URI構造
https://www.jma.go.jp/bosai/himawari/data/satimg/{basetime}/jp/{validtime}/{band}/{prod}/{z}/{x}/{y}.jpg
```

* z は 6 だけです。
* そのほかのパラメタはフルディスク画像と共通です。

# レーダー・降水ナウキャスト（雨雲の動き）

気象庁ホームページの「雨雲の動き」ページには降水ナウキャスト・雷活動度・竜巻発生確度・雷観測・アメダス10分降水量と多くのレイヤが一体的に提供されていて、その提供間隔が異なるので複雑なことになっていますが、とりあえずいわゆるレーダー、降水ナウキャストの話をします。

時刻一覧は３つファイルがあります。レーダー実況は https://www.jma.go.jp/bosai/jmatile/data/nowc/targetTimes_N1.json をみればいいようです。

内容はこんな風です： basetime と validtime が同じ値で、5分毎に新しいものが出てきます。
なんでこれは降順なんですかね。たぶん担当が別だったからなんだろうけど、こんなの仕様じゃないし、ちゃんと動いているから文句は言えません。

```json:targetTimes_N1.json
[
  {"basetime": "20210227064500", "validtime": "20210227064500", "elements": ["hrpns", "hrpns_nd"]}
 ,{"basetime": "20210227064000", "validtime": "20210227064000", "elements": ["hrpns", "hrpns_nd"]}
中略
 ,{"basetime": "20210227035000", "validtime": "20210227035000", "elements": ["hrpns", "hrpns_nd"]}
 ,{"basetime": "20210227034500", "validtime": "20210227034500", "elements": ["hrpns", "hrpns_nd"]}
]
```

もうひとつ、降水ナウキャストは予報の一種です。この時刻は https://www.jma.go.jp/bosai/jmatile/data/nowc/targetTimes_N2.json で与えられていて、basetime が同じ値 2021-02-27T06:55:00Z ですが、同じ最新のレーダー実況に基づいて、向こう一時間の5分間隔の予想が出ているわけです。

```json:targetTimes_N2.json
[
  {"basetime": "20210227065500", "validtime": "20210227075500", "elements": ["hrpns", "hrpns_nd"]}
 ,{"basetime": "20210227065500", "validtime": "20210227075000", "elements": ["hrpns", "hrpns_nd"]}
中略
 ,{"basetime": "20210227065500", "validtime": "20210227070500", "elements": ["hrpns", "hrpns_nd"]}
 ,{"basetime": "20210227065500", "validtime": "20210227070000", "elements": ["hrpns", "hrpns_nd"]}
]
```

でもって、URI構造はだいたい一緒なんですが、

```bash:URI構造
https://www.jma.go.jp/bosai/himawari/data/nowc/{basetime}/none/{validtime}/surf/hrpns/{z}/{x}/{y}.png
```

* z (ズームレベル) は 4～10 があります。表示は14までズームインできますが、単にZ=10の画像を拡大表示しているだけです。
* 形式はJPEGじゃなくてPNGです。なんでかというと、無降水域は透明にして、地理院タイルを透けて見えるようにしているからです。

ふたつの時刻、basetime と validtime がある理由がおわかりいただけましたでしょうかね。同じ時刻 07:50Z の予想であっても、5分毎に新しい予想が出てきますから、これに異なる URL を与えないと、CDNに古いのが刺さってぐちゃぐちゃモザイクになってしまうのです。（今解析したんだけど気象エンジニアならまあこうするんですわ）

ところで、時刻ファイルにある hrpns_nd って何ですかね。hrpns は高解像度降水ナウキャストなのはわかるんですが、私もわかりませんよ。さしあたり F12 で解析している限りは hrpns の画像だけを読んでいますが、ひょっとするとなんらかの条件で hrpns_nd の画像を使うのかもしれません。が、わかりません。JS読めないし。だれか気づいたら教えてください。

# アメダス（全国地図表示用）

地点系観測については、全国俯瞰で最新状況を一覧する切り取り方と、特定地点に着目して時系列を取る切り取り方があります。どちらを希望する方も、当然それが唯一の正しい見方に決まっていると固く信じています。まずは全国の方。

最初に最新時刻を取得しましょう： https://www.jma.go.jp/bosai/amedas/data/latest_time.txt
なぜかアメダスは日本時間です。何故かはしりません。

```text:latest_time.txt
2021-02-27T16:40:00+09:00
```

データは時刻のファイル名ですが、 20210227164000.json のように記号類を削ります。

```bash:URI構造
https://www.jma.go.jp/bosai/amedas/data/map/{latest_time}.json
```

開くとあまり説明は要らないかな。地点ごとに、観測されている量だけが書かれています。
各要素が2つの数値の配列になっていますが、先のfloatが値そのもの、後の0ばかりなのがAQCフラグです。
実際上は、AQCが0のものだけ使えばよいです。

```json:20210227164000.json
{
 "11001":{
  "temp":[-3.7,0],
  "sun1h":[0.0,0],
  "precipitation10m":[0.0,0],
  "precipitation1h":[0.0,0],
  "precipitation3h":[0.0,0],
  "precipitation24h":[0.5,0],
  "windDirection":[14,0],
  "wind":[8.4,0]
 },
 "11016":{ //湿度を測っている地点の例
  "temp":[-3.9,0],
  "humidity":[68,0],
  "sun1h":[0.0,0],
  "precipitation10m":[0.0,0],
  "precipitation1h":[0.0,0],
  "precipitation3h":[0.0,0],
  "precipitation24h":[3.0,0],
  "windDirection":[13,0],
  "wind":[2.1,0]
 },
中略
 "88781":{ //降水だけの地点の例
  "precipitation10m":[0.0,0],
  "precipitation1h":[0.5,0],
  "precipitation3h":[3.0,0],
  "precipitation24h":[8.0,0]
 }
後略
```

各地点の位置および名称は https://www.jma.go.jp/bosai/amedas/const/amedastable.json で与えられます。
各要素の名称（英文・和文）はまあ見ればわかるでしょうが、 https://www.jma.go.jp/bosai/const/selectorinfos/amedas.json で与えられます。

# アメダス（地点系）

まずは最新時刻を上述 latest_time.txt で得て、あとは地点のファイルです。

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

* `stnid` は上記 amedastable.json から選びます。
* `yyyymmdd` は年月日です。
* `h3` は3時間毎の時間です。00, 03, 06, ... 18, 21 です。24はありません。