過去の記事で「気象庁ホームページの内部apiの構造は、気象庁防災情報XMLの構造をモデルとしているものが多いです」と何度も書いてきましたが、気象庁防災情報XMLとは何かについてざっくりと説明したいと思います
気象庁防災情報XMLとは
気象庁のホームページに公式の解説がありますが、気象・地震・火山・海洋など、さまざまな防災気象情報を、汎用的なXML形式で提供しようという試みです
従来気象庁が発表する防災気象情報は、それぞれの情報に応じて独自の電文形式を使っており、気象と地震で全く電文構造が違ったり、電文から機械的に必要な情報を読み取るのが難しくなったりしていました。XML形式とすることで形式の統一を図り、機械可読性も向上しました
利点もあれば欠点もあります。一番大きいのは階層の深さですかね
<Report>
<Body>
<MeteorologicalInfos type="量的予想時系列(市町村等)">
<TimeSeriesInfo>
<Item>
<Kind>
<Status>発表</Status>
<DateTime type="発表時刻">2026-07-10T16:55:00+09:00</DateTime>
<Property>
<Type>大雨浸水危険度</Type>
<SignificancyPart>
<Base>
<Significancy refID="1" type="大雨浸水危険度">
<Name>警戒レベル2</Name>
<Code>21</Code>
</Significancy>
<Significancy refID="2" type="大雨浸水危険度">
<Name>警戒レベル2</Name>
<Code>21</Code>
</Significancy>
<Significancy refID="3" type="大雨浸水危険度">
<Name>警戒レベル3相当</Name>
<Code>31</Code>
</Significancy>
......
<Significancy refID="10" type="大雨浸水危険度">
<Name>警戒レベル2</Name>
<Code>21</Code>
</Significancy>
</Base>
</SignificancyPart>
</Property>
</Kind>
<Area>
<Name>石垣市</Name>
<Code>4720700</Code>
</Area>
</Item>
......
</TimeSeriesInfo>
</MeteorologicalInfos>
</Body>
</Report>
気象庁防災情報XMLの仕様
気象庁防災情報XMLの技術資料のページに掲載されています。電文の解説資料は「電文毎の解説資料」の節にあります
一部電文中の地域名や注意報種別等を読み取るために必要なコードが、解説資料の別表のxlsファイルにまとめられていたり「個別コード表」の節に記載されているものもあります
「サンプルデータ」の節に、過去の災害時に発表された電文やシミュレーションとして作成された電文が掲載されています
気象庁防災情報XMLの取得方法
| 取得元 | 料金 | 遅延 |
|---|---|---|
| 気象庁サイト | 無料 | 1~3分ほど |
| 支援センター | 月10万円とか | 数秒~ |
| 民間会社 | 月数千円~ | 数秒~ |
気象庁ホームページから取得
- 気象庁ホームページの電文公開ページから取得
- 無料で取得可能
- 遅延は1~3分ほど(毎分更新のフィードの場合)
- 緊急地震速報等、一部配信対象外の電文もあり
ページに行くと、高頻度フィードと長期フィードの2種類のサイクル、「定時」「随時」「地震火山」「その他」の4つのカテゴリーの都合8種類のフィードがあります。リアルタイム処理なら高頻度フィードを、低頻度の処理かつ長時間の電文が必要な場合は長期フィードを用いるのがよいでしょう
<feed lang="ja">
<title>高頻度(定時)</title>
<subtitle>JMAXML publishing feed</subtitle>
<id>https://www.data.jma.go.jp/developer/xml/feed/regular.xml</id>
<link rel="related" href="https://www.jma.go.jp/"/>
<link rel="self" href="https://www.data.jma.go.jp/developer/xml/feed/regular.xml"/>
<link rel="hub" href="http://alert-hub.appspot.com/"/>
<rights type="html">
<a href="https://www.jma.go.jp/jma/kishou/info/coment.html">利用規約</a>, <a href="https://www.jma.go.jp/jma/en/copyright.html">Terms of Use</a>
</rights>
<entry>
<title>気象警報・注意報(R06)(集約通報)</title>
<id>https://www.data.jma.go.jp/developer/xml/data/yyyymmddhhnnss_0_XXXXNN_YY0000.xml</id>
<updated>yyyy-mm-ddThh:nn:ssZ</updated>
<author>
<name>気象庁</name>
</author>
<link type="application/xml" href="https://www.data.jma.go.jp/developer/xml/data/yyyymmddhhnnss_0_XXXXNN_YY0000.xml"/>
<content type="text">【警戒・注意事項集約定時通報】</content>
</entry>
<entry>
<title>気象警報・注意報(R06)(集約通報)</title>
<id>https://www.data.jma.go.jp/developer/xml/data/nannnichinanji_0_infoID_office.xml</id>
<updated>yyyy-mm-ddThh:nn:ssZ</updated>
<author>
<name>気象庁</name>
</author>
<link type="application/xml" href="https://www.data.jma.go.jp/developer/xml/data/nannnichinanji_0_infoID_office.xml"/>
<content type="text">【警戒・注意事項集約定時通報】</content>
</entry>
<entry>
......
みたいな感じで最近発表された電文のが延々と並んでいます。idを読み取るか <link type="application/xml" href=" 以下の文字列を読み取って取得すれば対象の電文を読み取ることができます
1日10GB以上のアクセスがあるとIPアドレスが遮断される場合があるとのことです。一度取得したファイルは再度取得しない実装にするよう注意してください
ドメイン制限もかかっていない(2026年7月時点)ため、以下のような簡素なコードで情報を読み取ることもできます
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
</head>
<body>
<div>
<div id="menu">
<select id="feed">
<option value="regular">定時</option>
<option value="extra">随時</option>
<option value="eqvol">地震火山</option>
<option value="other">その他</option>
</select>
</div>
<div id="out"></div>
</div>
<script>
"use strict";
get();
document.getElementById("feed").addEventListener("change", function(e){
get();
});
function get(){
fetch("https://www.data.jma.go.jp/developer/xml/feed/" + document.getElementById("feed").value + ".xml")
.then((response) => response.text())
.then((datas) => display(datas));
}
function display( datas){
let out = "";
out += "<table>";
const parser = new DOMParser();
const feed = parser.parseFromString(datas, "application/xml");
for( let feedChild of feed.firstChild.children){
if( feedChild.nodeName=="entry"){
out += "<tr>"
let entry = feedChild, report = {};
for( let entryChild of entry.children){
let key = entryChild.nodeName;
if( key == "author"){
for( let authorChild of entryChild.children){
if( authorChild.nodeName=="name"){
out += "<td>" + authorChild.textContent + "</td>";
}
}
}else if( key=="id"){
out += "<td><a href='" + entryChild.textContent + "'>リンク</a></td>";
}else if( key!="content"){
out += "<td>" + entryChild.textContent + "</td>";
}
}
out += "</tr>"
}
}
document.getElementById("out").innerHTML = out;
}
</script>
</body>
</html>
気象業務支援センターから取得
一般財団法人 気象業務支援センターから取得する方法です
- 気象庁直結、東西2系統で配信で信頼性抜群
- 遅延も極めて少ない(数秒以内)
- 気象庁ホームページにない電文も取得可能
- 料金が高い
利用料金は財団の「負担金」のページに記載されていますが(以下2026年7月時点の情報)、
- 開設時負担金 5万円~20万円(税別、以下同じ)
- 基本負担金 4200円/月
- 情報別負担金 5000~1万円程度/月 × 情報数
- 通信設備負担金 1500円/月(電文形式データ、インターネット経由の場合)
ということで、たとえば地震火山情報(緊急地震速報以外)を受信しようと思うと、
4200+9000+1500=15000円弱/月
電文形式のデータ全部を受信しようと思うと
4200+109200+1500=11万円強/月
という感じです。特に受信する電文の種類が多い場合には、個人で契約するのは厳しい金額だと思います
民間会社から取得
これは会社によってピンキリですが、私はそうし(soshi1822)さんが提供するdmdata.jpを利用させていただいています
- 提供形態についてはサービスのホームページを参照。websocketを使用してプッシュ型で情報を受信可能です
- 遅延は数秒以内
- 地理冗長もされていて信頼度も高いと思います
- 料金は種類を限定すれば月1000円前後。気象・地震・火山の主だった電文を全て取得しても月5000円強
- ファイル形式など一部のデータは個人向けの価格設定がないほか、緊急地震速報(高度利用者向け)は個人用プランでは二次配信に一部制限あり
まとめ
気象庁ホームページから内部apiをスクレイピングして情報を読み取る方法を連載していますが、業務利用する場合や信頼度を求める用途の場合は、今回掲載したようなルートからデータを取得するようにしてください