防災アプリ開発 Advent Calendar 2024 10日目の記事です。
昨日は いちはい さんの「【C#】今更ながらWxBeacon2のデータをPCで受信しよう(簡易版)」でした!
ミスドの好きなメニューはエンゼルフレンチです😊
凍らせて食べるとガチ美味い。
はじめに
はじめまして!Wagira です!
2022年くらいからプログラミングをやっている高校生です。
防災情報を通知するWindowsアプリケーションや防災情報を地図に表示するWebアプリケーションの開発経験があります。
ふと、気象情報を配信しているAPIがどれだけあるのか気になったので探してみました。
探してみた
気象情報API - Yahoo!デベロッパーネットワーク
- 指定した緯度経度の雨の強さをXML形式、もしくはJSON形式で取得できるAPI
- 現在時刻の降水強度実測値から、60分後までの降水強度予測値を取得可能
- アプリケーションを登録し、アプリケーションIDを発行する必要あり
天気予報 API(livedoor 天気互換)
- 気象庁が配信してる天気予報や天気概況情報をJSON形式で取得できるAPI
気象庁防災情報XMLフォーマット
- 天気概況や天気予報、台風情報など、様々な気象情報をXML形式で取得できるAPI
- 1分から5分程度の遅延あり
気象庁ホームページ API
- 天気予報や天気概況情報、地震情報などをJSON形式で取得できるAPI
- 公に公開されているAPIではなく、気象庁ホームページで使用されているもの
使ってみよう
気象情報API - Yahoo!デベロッパーネットワーク
URL
https://map.yahooapis.jp/weather/V1/place
レスポンス
- 東京駅の情報 (JSON形式)
https://map.yahooapis.jp/weather/V1/place?appid={Client ID}&coordinates=139.7674062,35.6811438&output=json
{
"ResultInfo": {
"Count": 1,
"Total": 1,
"Start": 1,
"Status": 200,
"Latency": 0.031,
"Description": ""
},
"Feature": [
{
"Id": "202412042125_139.767406_35.681144",
"Name": "地点(139.767406,35.681144)の2024年12月04日 21時25分から60分間の天気情報",
"Geometry": { "Type": "point", "Coordinates": "139.767406,35.681144" },
"Property": {
"WeatherAreaCode": 4410,
"WeatherList": {
"Weather": [
{ "Type": "observation", "Date": "202412042125", "Rainfall": 0 },
{ "Type": "forecast", "Date": "202412042135", "Rainfall": 0 },
{ "Type": "forecast", "Date": "202412042145", "Rainfall": 0 },
{ "Type": "forecast", "Date": "202412042155", "Rainfall": 0 },
{ "Type": "forecast", "Date": "202412042205", "Rainfall": 0 },
{ "Type": "forecast", "Date": "202412042215", "Rainfall": 0 },
{ "Type": "forecast", "Date": "202412042225", "Rainfall": 0 }
]
}
}
}
]
}
Feature.Property.WeatherList.Weather.Type
が observation
のオブジェクトが実況値で、forecast
が予測値です。
Feature.Property.WeatherList.Weather.Rainfall
は降水強度で、単位は mm/h
です。
天気予報 API(livedoor 天気互換)
URL
https://weather.tsukumijima.net/api/forecast/city/{一次細分区域等コード}
地域コード
https://weather.tsukumijima.net/primary_area.xml
レスポンス
- 東京の情報
https://weather.tsukumijima.net/api/forecast/city/130010
{
"publicTime": "2024-12-07T11:00:00+09:00",
"publicTimeFormatted": "2024/12/07 11:00:00",
"publishingOffice": "気象庁",
"title": "東京都 東京 の天気",
"link": "https://www.jma.go.jp/bosai/forecast/#area_type=offices&area_code=130000",
"description": {
"publicTime": "2024-12-07T10:36:00+09:00",
"publicTimeFormatted": "2024/12/07 10:36:00",
"headlineText": "",
"bodyText": " 日本付近は冬型の気圧配置となっています。\n\n 東京地方は、晴れています。\n\n 7日は、冬型の気圧配置が続く見込みです。このため、晴れますが、夕方から曇りとなるでしょう。\n\n 8日は、冬型の気圧配置が続く見込みです。このため、晴れ時々曇りとなるでしょう。伊豆諸島では、雨や雷雨となる所がある見込みです。\n\n【関東甲信地方】\n 関東甲信地方は、晴れや曇りで、長野県や関東地方北部では、雪の降っている所があります。\n\n 7日は、冬型の気圧配置が続く見込みです。このため、晴れや曇りで、雪や雨の降る所があるでしょう。\n\n 8日は、冬型の気圧配置が続く見込みです。このため、晴れや曇りで、雪や雨の降る所があり、伊豆諸島では気圧の谷の影響で雷を伴う所があるでしょう。\n\n 関東地方と伊豆諸島の海上では、7日から8日にかけて、波が高いでしょう。船舶は高波に注意してください。",
"text": " 日本付近は冬型の気圧配置となっています。\n\n 東京地方は、晴れています。\n\n 7日は、冬型の気圧配置が続く見込みです。このため、晴れますが、夕方から曇りとなるでしょう。\n\n 8日は、冬型の気圧配置が続く見込みです。このため、晴れ時々曇りとなるでしょう。伊豆諸島では、雨や雷雨となる所がある見込みです。\n\n【関東甲信地方】\n 関東甲信地方は、晴れや曇りで、長野県や関東地方北部では、雪の降っている所があります。\n\n 7日は、冬型の気圧配置が続く見込みです。このため、晴れや曇りで、雪や雨の降る所があるでしょう。\n\n 8日は、冬型の気圧配置が続く見込みです。このため、晴れや曇りで、雪や雨の降る所があり、伊豆諸島では気圧の谷の影響で雷を伴う所があるでしょう。\n\n 関東地方と伊豆諸島の海上では、7日から8日にかけて、波が高いでしょう。船舶は高波に注意してください。"
},
"forecasts": [
{
"date": "2024-12-07",
"dateLabel": "今日",
"telop": "晴のち曇",
"detail": {
"weather": "晴れ 夕方 から くもり",
"wind": "北の風",
"wave": "0.5メートル"
},
"temperature": {
"min": { "celsius": null, "fahrenheit": null },
"max": { "celsius": "13", "fahrenheit": "55.4" }
},
"chanceOfRain": {
"T00_06": "--%",
"T06_12": "--%",
"T12_18": "10%",
"T18_24": "10%"
},
"image": {
"title": "晴のち曇",
"url": "https://www.jma.go.jp/bosai/forecast/img/110.svg",
"width": 80,
"height": 60
}
},
{
"date": "2024-12-08",
"dateLabel": "明日",
"telop": "晴時々曇",
"detail": {
"weather": "晴れ 時々 くもり",
"wind": "北の風 23区西部 では 後 北の風 やや強く",
"wave": "0.5メートル 後 1.5メートル"
},
"temperature": {
"min": { "celsius": "4", "fahrenheit": "39.2" },
"max": { "celsius": "13", "fahrenheit": "55.4" }
},
"chanceOfRain": {
"T00_06": "0%",
"T06_12": "0%",
"T12_18": "20%",
"T18_24": "0%"
},
"image": {
"title": "晴時々曇",
"url": "https://www.jma.go.jp/bosai/forecast/img/101.svg",
"width": 80,
"height": 60
}
},
{
"date": "2024-12-09",
"dateLabel": "明後日",
"telop": "晴れ",
"detail": {
"weather": "晴れ",
"wind": "北西の風",
"wave": "0.5メートル"
},
"temperature": {
"min": { "celsius": "4", "fahrenheit": "39.2" },
"max": { "celsius": "12", "fahrenheit": "53.6" }
},
"chanceOfRain": {
"T00_06": "10%",
"T06_12": "10%",
"T12_18": "10%",
"T18_24": "10%"
},
"image": {
"title": "晴れ",
"url": "https://www.jma.go.jp/bosai/forecast/img/100.svg",
"width": 80,
"height": 60
}
}
],
"location": {
"area": "関東",
"prefecture": "東京都",
"district": "東京地方",
"city": "東京"
},
"copyright": {
"title": "(C) 天気予報 API(livedoor 天気互換)",
"link": "https://weather.tsukumijima.net/",
"image": {
"title": "天気予報 API(livedoor 天気互換)",
"link": "https://weather.tsukumijima.net/",
"url": "https://weather.tsukumijima.net/logo.png",
"width": 120,
"height": 120
},
"provider": [
{
"link": "https://www.jma.go.jp/jma/",
"name": "気象庁 Japan Meteorological Agency",
"note": "気象庁 HP にて配信されている天気予報を JSON データへ編集しています。"
}
]
}
}
description.text
が天気概況情報で、forecasts
が今日・明日・明後日の天気予報の情報です。
気象庁ホームページで配信されている情報を使いやすく加工されているので天気予報や天気概況情報だけ利用したい方はこのAPIがおすすめです!
気象庁防災情報XMLフォーマット
定時フィードは気象に関する情報のうち、天気概況など定時に発表されるもので、随時フィードは気象に関する情報のうち、警報・注意報など随時発表されるものです。
天気予報に関係する情報は 定時フィード で取得できます。
レスポンス
- 府県週間天気予報 (2024年12月07日 11時00分 発表)
- 府県天気概況 (2024年12月07日 10時36分 発表)
他にも様々な気象情報を取得できます。
XML ちょっと扱いにくい (Node.js)
普段、JSONを使ってる方からしたらXMLはチョットだけ扱いにくいと感じるかもしれません。
そこで登場するのが fast-xml-parser です!
XMLをオブジェクトに変換したり、オブジェクトをXMLに変換できるクソ便利なライブラリです!
こんな感じのコードで変換できます!
import { XMLParser } from 'fast-xml-parser';
const xp = new XMLParser({
numberParseOptions: {
leadingZeros: false
},
trimValues: false,
ignoreDeclaration: true,
ignoreAttributes: false
});
const parsedData = xp.parse('ここに変換したいXMLデータ');
-
numberParseOptions.leadingZeros
03
のように先頭に0
を含む数字の処理 (true
だと先頭の0
が削除されます。)
地域コードで先頭に0
が含まれることがあるのでfalse
にします。 -
trimValues
前後の不要な空白の処理 (true
だと前後の不要な空白が削除されます。)
見出し文などで先頭に空白が含まれることがあるのでfalse
にします。 -
ignoreAttributes
属性を無視するかどうか
属性を使用するのでfalse
にします。
その他のオプションは ドキュメント を確認してください!
気象庁ホームページ API
2021年に気象庁ホームページがリニューアルされ、気象情報や地震情報など、気象庁ホームページで公開されている情報は大抵取得できるようになりました。
-
今日・明日・明後日の天気予報
https://www.jma.go.jp/bosai/forecast/data/forecast/{府県予想区等コード}.json -
天気概況情報
https://www.jma.go.jp/bosai/forecast/data/overview_forecast/{府県予想区等コード}.json
レスポンス
- 名古屋の今日・明日・明後日の天気予報
https://www.jma.go.jp/bosai/forecast/data/forecast/230000.json
{
"publishingOffice": "名古屋地方気象台",
"reportDatetime": "2024-12-07T16:35:00+09:00",
"targetArea": "愛知県",
"headlineText": "",
"text": " 本州付近は冬型の気圧配置となっています。\n\n 東海地方は、曇りまたは晴れで、雨や雪の降っている所があります。\n\n 7日の東海地方は、冬型の気圧配置が続くため晴れる所もありますが、寒気や湿った空気の影響でおおむね曇りとなる見込みです。岐阜県では、雷を伴って雪や雨の降る所があるでしょう。\n\n 8日の東海地方は、引き続き冬型の気圧配置となるためおおむね晴れますが、寒気や気圧の谷の影響で雲が広がりやすく、雨や雪の降る所がある見込みです。岐阜県では、昼過ぎにかけて雷を伴う所があるでしょう。"
}
最後に
最後まで読んでくださりありがとうございました!
次は ingen084 さんの記事です!