やりたいこと
無料のもので天気情報を取得したい
気象庁が非公式(?)でAPIを公開しており、JSON形式のデータが取得できる
使い方の備忘録として残しておく
Step1.予報エリアの取得
気象庁の天気は、(北海道などの例外はあるが)県ごとにエリア管理されている
取得URL
https://www.jma.go.jp/bosai/common/const/area.json
実行結果
{
"centers":{
:(中略)
,"010700":{
"name":"中国地方(山口県を除く)"
,"enName":"Chugoku (Excluding Yamaguchi)"
,"officeName":"広島地方気象台"
,"children":[
"310000"
,"320000"
,"330000"
,"340000"
]
:(中略)
}
,"offices":{
:(中略)
,"340000":{
"name":"広島県"
,"enName":"Hiroshima"
,"officeName":"広島地方気象台"
,"parent":"010700"
,"children":[
"340010"
,"340020"
]
}
}
}
解説
- centers要素:関東地方、中国地方という単位でのエリア定義。children子要素に、中国地方に所属する県のエリアコードが記載されている。
- offices要素:県単位でのエリア定義。children子要素で、更に北部地区や南部地区、場合によっては地区の区分けが無いパターンもある。このoffices要素のコード、広島県であれば「340000」というエリアコードで天気情報を取得する
Step2.指定エリアの天気情報を取得
取得URL(広島県の例)
https://www.jma.go.jp/bosai/forecast/data/forecast/340000.json
実行結果
長くなるため、南部地方、広島市内のデータをピックアップ
なお取得値は、気象庁の天気予報(広島県)と原則同値となることが確認できる
[
{
"publishingOffice":"広島地方気象台"
,"reportDatetime":"2024-01-31T05:00:00+09:00"
,"timeSeries":[
{
"timeDefines":[
"2024-01-31T05:00:00+09:00"
,"2024-02-01T00:00:00+09:00"
]
,"areas":[
{
"area":{
"name":"南部"
,"code":"340010"
}
,"weatherCodes":[
"202"
,"218"
]
,"weathers":[
"くもり 昼過ぎ 一時 雨"
,"くもり 夜遅く 雨か雪"
]
,"winds":[
"北の風 日中 南西の風"
,"北の風 後 北東の風 海上 では 後 北東の風 やや強く"
]
,"waves":[
"0.5メートル"
,"0.5メートル 後 1メートル"
]
}
:(中略)
}
,{
"timeDefines":[
"2024-01-31T06:00:00+09:00"
,"2024-01-31T12:00:00+09:00"
,"2024-01-31T18:00:00+09:00"
,"2024-02-01T00:00:00+09:00"
,"2024-02-01T06:00:00+09:00"
,"2024-02-01T12:00:00+09:00"
,"2024-02-01T18:00:00+09:00"
]
,"areas":[
{
"area":{
"name":"南部"
,"code":"340010"
}
,"pops":[
"30"
,"50"
,"20"
,"20"
,"20"
,"20"
,"50"
]
}
:(中略)
}
]
}
,{
"timeDefines":[
"2024-01-31T09:00:00+09:00"
,"2024-01-31T00:00:00+09:00"
,"2024-02-01T00:00:00+09:00"
,"2024-02-01T09:00:00+09:00"
]
,"areas":[
{
"area":{
"name":"広島"
,"code":"67437"
}
,"temps":[
"12"
,"12"
,"7"
,"13"
]
}
:(中略)
}
]
}
]
}
,{
"publishingOffice":"広島地方気象台"
,"reportDatetime":"2024-01-30T17:00:00+09:00"
,"timeSeries":[
{
"timeDefines":[
"2024-01-31T00:00:00+09:00"
,"2024-02-01T00:00:00+09:00"
,"2024-02-02T00:00:00+09:00"
,"2024-02-03T00:00:00+09:00"
,"2024-02-04T00:00:00+09:00"
,"2024-02-05T00:00:00+09:00"
,"2024-02-06T00:00:00+09:00"
]
,"areas":[
{
"area":{
"name":"南部"
,"code":"340010"
}
,"weatherCodes":[
"212"
,"203"
,"201"
,"201"
,"200"
,"203"
,"200"
]
,"pops":[
""
,"80"
,"20"
,"20"
,"40"
,"80"
,"30"
]
,"reliabilities":[
""
,""
,"A"
,"A"
,"C"
,"B"
,"B"
]
}
:(中略)
]
}
,{
"timeDefines":[
"2024-01-31T00:00:00+09:00"
,"2024-02-01T00:00:00+09:00"
,"2024-02-02T00:00:00+09:00"
,"2024-02-03T00:00:00+09:00"
,"2024-02-04T00:00:00+09:00"
,"2024-02-05T00:00:00+09:00"
,"2024-02-06T00:00:00+09:00"
]
,"areas":[
{
"area":{
"name":"広島"
,"code":"67437"
}
,"tempsMin":[
""
,"5"
,"3"
,"1"
,"2"
,"4"
,"6"
]
,"tempsMinUpper":[
""
,"8"
,"6"
,"5"
,"5"
,"6"
,"9"
]
,"tempsMinLower":[
""
,"4"
,"2"
,"0"
,"1"
,"2"
,"2"
]
,"tempsMax":[
""
,"12"
,"11"
,"11"
,"9"
,"12"
,"14"
]
,"tempsMaxUpper":[
""
,"15"
,"13"
,"12"
,"13"
,"16"
,"16"
]
,"tempsMaxLower":[
""
,"11"
,"9"
,"8"
,"6"
,"8"
,"11"
]
}
:(中略)
]
}
]
,"tempAverage":{
"areas":[
{
"area":{
"name":"広島"
,"code":"67437"
}
,"min":"1.6"
,"max":"9.8"
}
:(中略)
]
}
,"precipAverage":{
"areas":[
{
"area":{
"name":"広島"
,"code":"67437"
}
,"min":"2.6"
,"max":"14.0"
}
:(中略)
}
}
]
解説
階層1 | 階層2 | 階層3 | 階層4 | 階層5 | 概要 |
---|---|---|---|---|---|
1要素目 | publishingOffice | 観測した気象台名 | |||
reportDatetime | 観測日時 | ||||
timeSeries | 天気情報(今日明日) | ||||
timeDefines | 今日・明日天気の予想日時 取得時間によっては、今日、明日、明後日の3日分 |
||||
areas | 予測エリア群 | ||||
areas | 予測エリア(地区単位) | ||||
name | 予測エリア名称 | ||||
code | エリアコード | ||||
weatherCodes | 天気コード [100(晴)][200(曇り)]などをコード体系化 |
||||
weathers | 天気情報の説明 | ||||
winds | 風情報の説明 | ||||
waves | 波情報の説明 | ||||
timeDefines | 日時毎の降水確率 | ||||
areas | 予測エリア群 | ||||
area | 予測エリア(地区単位) | ||||
name | 予測エリア名称 | ||||
code | エリアコード | ||||
pops | 降水確率(%) | ||||
timeDefines | 日時毎の気温 | ||||
areas | 予測エリア群 | ||||
area | 予測エリア(地区単位) | ||||
name | 予測エリア名称 | ||||
code | エリアコード | ||||
temps | 予想気温(℃) | ||||
2要素目 | publishingOffice | 観測した気象台名 | |||
reportDatetime | 観測日時 | ||||
timeSeries | 天気情報(週間) | ||||
timeDefines | 日時毎の降水確率 | ||||
areas | 予測エリア群 | ||||
area | 予測エリア(地区単位) | ||||
name | 予測エリア名称 | ||||
code | エリアコード | ||||
weatherCodes | 天気コード | ||||
pops | 降水確率(%) 今日・明日の情報が欠損する場合もあるため、補完が必要 |
||||
reliabilities | 信頼度 | ||||
timeDefines | 日時毎の気温 | ||||
areas | 予測エリア群 | ||||
area | 予測エリア(地区単位) | ||||
name | 予測エリア名称 | ||||
code | エリアコード | ||||
tempsMin | 最低気温(平均) 降水確率と同様欠損有り |
||||
tempsMinUpper | 最低気温(上限) tempsMinを利用でよいと思われる |
||||
tempsMinLower | 最低気温(下限) tempsMinを利用でよいと思われる |
||||
tempsMax | 最高気温(平均) 降水確率と同様欠損有り |
||||
tempsMaxUpper | 最高気温(上限) tempsMaxを利用でよいと思われる |
||||
tempsMaxLower | 最高気温(下限) tempsMaxを利用でよいと思われる |
||||
tempAverage | 平均気温 | ||||
areas | 予測エリア群 | ||||
area | 予測エリア(地区単位) | ||||
name | 予測エリア名称 | ||||
code | エリアコード | ||||
min | 最低気温(平均値) | ||||
max | 最高気温(平均値) | ||||
precipAverage | 向こう一週間(明日から7日先まで)の平年値(降水量) | ||||
areas | 予測エリア群 | ||||
area | 予測エリア(地区単位) | ||||
name | 予測エリア名称 | ||||
code | エリアコード | ||||
min | 最低降水量(平均値) | ||||
max | 最高降水量(平均値) |
Step3.天気コードの一覧
気象庁の天気予報を開く。
開発者ツール(ChromeならF12)を起動。
コンソールに以下のコマンドを手入力しEnterで実行する
実行コマンド
Forecast.Const.TELOPS
実行結果
解説
- 各天気コードの説明が表記される(例.[100]は晴れ)
- 昼夜のコード対比表が表示される(例.晴れ:昼[100]、夜[500])
- 一部コードの置換先の天気コードが表示される(例.[103]の曇り時々雨は、[102]晴一時雨と同じ天気アイコンを使用する など
Step4.天気アイコン(SVG)の取得
天気のアイコンまで取得ができてしまう。
気象庁は至れり尽くせるな気がする。
実行URL
1個づつだが、晴[天気コード:100]を取得する場合は、以下をブラウザで実行すればSVGが表示されるので、ダウンロードを行う
https://www.jma.go.jp/bosai/forecast/img/100.svg
最後に
- 気象庁の予報は、気象庁の予想日時によってデータ構成が異なる場合があるので、対象地区の天気予報(JSON)を1日分以上、取得した方が良いと思う
- データ構成は原則同じだが、予想している気象台によっては異なるケースがあるっぽい(どこの地域かは忘れた…)
- 災害時など、通常時の予想と異なるデータ構造になる可能性がある模様