jma-weather
気象庁が公式サイトで公開しているJSONデータから天気予報を取得するスキル。APIキー不要、curl だけで使える。
基本の流れ
- エリアコードを決める
- 予報JSONを取得する
- 必要な時刻・地点の値を読む
1. エリアコードを決める
全国のエリア定義は1つのJSONにまとまっている。
curl -s https://www.jma.go.jp/bosai/common/const/area.json
構造: centers (管区気象台など) → offices (地方の予報単位。予報APIはこのコードを使う) → class10s / class15s / class20s (より細かい地域)。
よく使う offices コード:
| コード | 地域 | コード | 地域 |
|---|---|---|---|
| 014100 | 札幌 | 130000 | 東京 |
| 040000 | 仙台 | 270000 | 大阪 |
| 230000 | 名古屋 | 340000 | 広島 |
| 460040 | 鹿児島 | 471000 | 那覇 |
2. 予報JSONを取得する
# 天気・降水確率・気温(数日分)
curl -s https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json
# 短期予報のテキスト概況
curl -s https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json
130000 の部分を調べたい地域の offices コードに変える。
3. JSONの読み方
forecast レスポンスは配列で、要素ごとに publishingOffice (発表気象台) と reportDatetime (発表時刻) を持つ。timeSeries に時系列データが入る。通常は2要素あり、1つ目が短期(天気・降水確率・気温)、2つ目が週間(7日先までの降水確率と最高/最低気温)を持つ。週間分だけ別エンドポイントはない。
timeSeries[].timeDefines: 各時刻の枠。他の配列とインデックスが対応する。areas[].weathers: 「晴れ 時々 くもり」などの天気文字列。areas[].weatherCodes: 天気コード(文字列)。対応表は下記。areas[].pops: 降水確率(%)。時間帯ごと。areas[].temps: 気温(℃)。発表時刻によって最低/最高が入る枠が変わるので、timeDefinesと突き合わせて「何の値か」を確認する。
主な天気コード(先頭3桁):
- 100番台: 晴れ (100: 晴)
- 200番台: くもり (200: 曇)
- 300番台: 雨 (300: 雨)
- 400番台: 雪 (400: 雪)
末尾2桁で「時々」「のち」「一時」などの変化を表す。細かい値は weathers の文字列をそのまま使うのが確実。
注意
- すべて気象庁の発表データそのまま。加工せず、発表時刻(
reportDatetime)を一緒に伝える。 - 予報は1日数回更新される。古いデータを引用しない。
- 短時間に連続リクエストしない。同じ予報を繰り返し見るならローカルにキャッシュする。
エラー・失敗時の対応
- タイムアウトを付ける:
curlには必ず-m 30程度を付ける(例:curl -sm 30 <URL>)。応答がないまま待ち続けない。 - HTTP 404: エリアコードの間違いがほぼ原因。
https://www.jma.go.jp/bosai/common/const/area.jsonを取り直し、offices層のコードを使っているか確認する(class10sなどの細かいコードでは 404 になる)。 - HTTP 5xx / タイムアウト: 気象庁サイト側の障害か負荷。数秒おいて1〜2回だけ再試行し、直らなければ「気象庁のサイトで障害が起きている可能性がある。公式サイト https://www.jma.go.jp/jma/index.html を直接確認してください」とユーザーに伝える。推測で予報をでっち上げない。
- 空・壊れたJSON: JSONとして解釈できないレスポンス(HTMLのエラーページなど)が返ったら、それも失敗として扱う。古いキャッシュを「最新」として渡さない。
English summary
Fetches weather forecasts (weather, precipitation probability, temperature) for anywhere in Japan from the Japan Meteorological Agency's public JSON feeds. No API key or login required; curl is enough. Find the area code in area.json, then read the forecast JSON for that office. Always quote the JMA issue time (reportDatetime) with the data, and check the official JMA site for any real decision.