コンテンツにスキップ
コンソール

防災イベント API

DPIP の防災イベント API は、中央気象署、国家災害防救科技センター(NCDR)、経済部水利署、行政院人事行政総処などが発表する防災情報を集め、同じイベント形式に整えます。ExpTech はこれらの情報を転送するだけで、自ら警報を発表することはありません。全国、または単一の市区町村について、現在有効なイベント、直近 3 日のイベント、単一イベントの影響範囲(GeoJSON)を照会できます。見出しと本文は、lang パラメータで簡体字中国語、英語、日本語などの言語を取得できます。

  • 推奨表記データ出典:中央気象署などの発表機関、ExpTech Studio(exptech.dev)

上流の条件
  • 中央気象署、国家災害防救科技センター、経済部水利署、行政院人事行政総処などの発表機関:各発表機関の利用規約も適用されます。各イベントの発表元は author フィールドにあり、単独で表示する場合は発表元も明記してください。

表記の場所、例、商用利用の申請はデータの利用条件と出典表記をご覧ください。

現在は API Token は不要です。

region パスパラメータと、イベントの area フィールドは、どちらも郷鎮市区の 3 桁の郵便番号です。たとえば 105 は台北市松山区、970 は花蓮県花蓮市です。市区町村の 1 時間ごとの予報の市区町村コードと同じです。

  • 市区町村のエンドポイントは、area にそのコードを含むイベントだけを返すので、自分で絞り込む必要はありません。
  • area が [] のイベント(たとえば範囲を多角形で表す大雷雨、道路通行止め)は、全国のエンドポイントにだけ現れます。この種のイベントは、hasPolygon と /event/{id} で範囲を取得し、自分で判断してください。

5 つのエンドポイントはすべて、クエリパラメータ lang を受けます。一度に 1 言語です。付けない、空白、または判別できないときは zh とみなし、400 にはしません。

lang 言語 変換のしかた
zh 繁体字中国語(台湾) 原文のまま
zh_Hant_HK 繁体字中国語(香港) リクエスト時に変換
zh_Hans 简体中文 リクエスト時に変換
en English バックグラウンドで翻訳
ja 日本語 バックグラウンドで翻訳
ko 한국어 バックグラウンドで翻訳
vi Tiếng Việt バックグラウンドで翻訳
th ไทย バックグラウンドで翻訳
id Bahasa Indonesia バックグラウンドで翻訳
fil Filipino バックグラウンドで翻訳

解釈の規則:

  1. 値が複数あるときは最初の 1 つだけを取ります。カンマがあるときは最初の区間だけを取ります(en,ja は en)。
  2. 前後の空白を除き、- を _ にします(zh-TW は zh_TW と同じです)。
  3. 上の表と完全に同じなら、それを採用します。
  4. 別名(大文字小文字は区別しません):zh_TW、zh_Hant、zh_Hant_TW → zh。yue、zh_HK、yue_Hant、zh_Hant_MO → zh_Hant_HK。zh_CN、zh_SG、zh_Hans_CN → zh_Hans。
  5. それ以外は、最初の _ より前の主言語を取り、上の表にあれば採用します(en_US → en、ja_JP → ja)。
  6. 残りはすべて zh です。

変換または翻訳されるのは title、subtitle、description だけです。raw は常に台湾の正字の原文です。バックグラウンド翻訳の言語で、3 フィールドのいずれかの訳が欠けているときは、その 1 件全体が zh に戻ります(lang フィールドが zh)。中国語と訳文が混ざることはありません。少しあとで同じ URL をリクエストすると訳文が返り、ETag も変わります。訳が揃ったかは、各件の lang とリクエストした言語を比べてください。

全国で、まだ期限が切れていない(expires が現在より大きい)イベントです。多角形の範囲は含みません。

GEThttps://api.core-tnn1.exptech.dev/api/v2/dpip/realtime/list
サーバーTNN-1
クエリパラメーター
  • langstring任意既定値 zh

    クエリパラメータ。言語。「言語」の節を参照

リクエスト例
curl "https://api.core-tnn1.exptech.dev/api/v2/dpip/realtime/list"
レスポンス

成功。イベントがないときは []

[
{
"id": "1794632460",
"status": 1,
"type": "thunderstorm",
"author": "cwa",
"send": 1794632400000,
"expires": 1794636000000,
"title": "大雷雨即時訊息",
"subtitle": "雷雨即時訊息",
"description": "氣象署發布大雷雨即時訊息,持續時間至 14 時。",
"lang": "zh",
"area": [],
"hasPolygon": true
}
]

データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし

試してみる
クエリパラメーター

トークンはこのブラウザから API へ直接送信されます。

レスポンスはイベントの配列です。4 つのリストエンドポイントの各件は、すべてこの形です。

フィールド型説明
[].idstringイベントの識別子。数字だけの文字列(書き込んだ瞬間の Unix 秒)で、全体で一意です。単位は send と違うので、時刻として使わないでください
[].statusnumber1:出典が正式発表と示したもの。0:それ以外(訓練、テストなど)
[].typestringイベントの種類。「イベントの種類」を参照
[].authorstring発表元の識別子。例:cwa、ncdr、wra、dgpa。一部の種類は出典データからそのまま取るため、形式は一定ではありません
[].sendnumber発表時刻。Unix ミリ秒
[].expiresnumber期限。Unix ミリ秒
[].titlestring見出し
[].subtitlestring副見出し
[].descriptionstring本文。市区町村のエンドポイントでは、その市区町村の要約であることがあります。「description と raw」を参照
[].rawstring任意。全国の原文。市区町村のエンドポイントで、description にその市区町村の要約を使ったときだけ現れます。翻訳しません
[].langstringこの 1 件が実際に採用した言語。訳が揃っていないときは zh
[].areanumber[]影響する市区町村の地域コード(3 桁の郵便番号)。[] のこともあります
[].hasPolygonbooleantrue なら /event/{id} で多角形の範囲を取得できます
[].additionobject任意。種類に応じた追加データ。「付加データ addition」を参照

指定した市区町村の有効なイベントを取得

Section titled “指定した市区町村の有効なイベントを取得”

area に指定した市区町村を含み、かつその市区町村でまだ期限が切れていないイベントです。

GEThttps://api.core-tnn1.exptech.dev/api/v2/dpip/realtime/{region}
サーバーTNN-1
パスパラメーター
  • regioninteger必須

    パスパラメータ。3 桁の郵便番号。例:105

クエリパラメーター
  • langstring任意既定値 zh

    クエリパラメータ。言語

リクエスト例
curl "https://api.core-tnn1.exptech.dev/api/v2/dpip/realtime/<region>"
レスポンス

成功。イベントがないときは []

[
{
"id": "1794626412",
"status": 1,
"type": "heavy-rain",
"author": "cwa",
"send": 1794626400000,
"expires": 1794662400000,
"title": "大雨特報",
"subtitle": "大雨特報",
"description": "臺北市松山區今晚有局部大雨,請注意。",
"raw": "東北風影響,今(14)日基隆北海岸、臺北市山區及新北市山區有局部大雨發生的機率。",
"lang": "zh",
"area": [
105,
106,
110
],
"hasPolygon": false
}
]

データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし

region が数値ではない

{
"error": "Invalid region"
}
試してみる
パスパラメーター
クエリパラメーター

トークンはこのブラウザから API へ直接送信されます。

全国で有効なイベントを取得と同じです。違うのは description と raw です。description と rawを参照してください。

全国の直近 3 日のイベントを取得

Section titled “全国の直近 3 日のイベントを取得”

全国で、send が直近 3 日以内のイベントです。期限が切れたものも含みます。

GEThttps://api.core-tnn1.exptech.dev/api/v2/dpip/history/list
サーバーTNN-1
クエリパラメーター
  • langstring任意既定値 zh

    クエリパラメータ。言語

リクエスト例
curl "https://api.core-tnn1.exptech.dev/api/v2/dpip/history/list"
レスポンス

成功。イベントがないときは []

[
{
"id": "1794630005",
"status": 1,
"type": "earthquake",
"author": "cwa",
"send": 1794630005000,
"expires": 1794716405000,
"title": "地震報告",
"subtitle": "地震報告 [115071]",
"description": "11/14 12:16左右,花蓮縣近海發生地震。震源深度15公里,地震規模M5.1,花蓮縣觀測到最大震度4級。",
"lang": "zh",
"area": [
970,
971,
972
],
"hasPolygon": false,
"addition": {
"id": "115071-2026-1114-121630"
}
}
]

データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし

試してみる
クエリパラメーター

トークンはこのブラウザから API へ直接送信されます。

全国で有効なイベントを取得と同じです。

指定した市区町村の直近 3 日のイベントを取得

Section titled “指定した市区町村の直近 3 日のイベントを取得”

area に指定した市区町村を含み、send が直近 3 日以内のイベントです。期限が切れたものも含みます。

GEThttps://api.core-tnn1.exptech.dev/api/v2/dpip/history/{region}
サーバーTNN-1
パスパラメーター
  • regioninteger必須

    パスパラメータ。3 桁の郵便番号。例:105

クエリパラメーター
  • langstring任意既定値 zh

    クエリパラメータ。言語

リクエスト例
curl "https://api.core-tnn1.exptech.dev/api/v2/dpip/history/<region>"
レスポンス

成功。イベントがないときは []

[
{
"id": "1794626412",
"status": 1,
"type": "heavy-rain",
"author": "cwa",
"send": 1794626400000,
"expires": 1794662400000,
"title": "Heavy Rain Advisory",
"subtitle": "Heavy Rain Advisory",
"description": "Localized heavy rain is expected in Songshan District, Taipei tonight.",
"raw": "東北風影響,今(14)日基隆北海岸、臺北市山區及新北市山區有局部大雨發生的機率。",
"lang": "en",
"area": [
105,
106,
110
],
"hasPolygon": false
}
]

データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし

region が数値ではない

{
"error": "Invalid region"
}
試してみる
パスパラメーター
クエリパラメーター

トークンはこのブラウザから API へ直接送信されます。

全国で有効なイベントを取得と同じです。上の例は ?lang=en です。raw は中国語の原文のままです。

id で 1 件のイベントを取得します。範囲があるときは polygon(GeoJSON)が 1 つ加わります。リストに polygon はなく、hasPolygon が true のときにこのエンドポイントで取得します。

GEThttps://api.core-tnn1.exptech.dev/api/v2/dpip/event/{id}
サーバーTNN-1
パスパラメーター
  • idstring必須

    パスパラメータ。イベントの id

クエリパラメーター
  • langstring任意既定値 zh

    クエリパラメータ。言語

リクエスト例
curl "https://api.core-tnn1.exptech.dev/api/v2/dpip/event/<id>"
レスポンス

成功。この id がないときは []

[
{
"id": "1794632460",
"status": 1,
"type": "thunderstorm",
"author": "cwa",
"send": 1794632400000,
"expires": 1794636000000,
"title": "大雷雨即時訊息",
"subtitle": "雷雨即時訊息",
"description": "氣象署發布大雷雨即時訊息,持續時間至 14 時。",
"lang": "zh",
"area": [],
"hasPolygon": true,
"polygon": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
121.56,
25.03
],
[
121.57,
25.04
],
[
121.58,
25.02
],
[
121.56,
25.03
]
]
]
}
}
]
}
}
]

データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし

試してみる
パスパラメーター
クエリパラメーター

トークンはこのブラウザから API へ直接送信されます。

レスポンスは配列です。通常は 1 件で、見つからないときは [](200)です。フィールドは全国で有効なイベントを取得と同じで、さらに次があります。

フィールド型説明
[].polygonobject任意。GeoJSON の FeatureCollection。geometry は Polygon、座標は [経度, 緯度]。hasPolygon が true のときだけ現れます。幾何は簡略化済みです(誤差は約 22 m)

description の選び方は全国のエンドポイントと同じです(全国の原文。raw は付きません)。

現在、イベントとして書き込まれる種類は次のとおりです。表にない種類も、そのまま表示してください(汎用のアイコンで)。その 1 件を捨てないでください。

type 名称 author area 範囲 polygon addition 備考
heavy-rain 大雨情報 cwa 市区町村コード なし なし 地域ごとの要約あり
extremely-heavy-rain 豪雨情報 cwa 市区町村コード なし なし 地域ごとの要約あり
torrential-rain 大豪雨情報 cwa 市区町村コード なし なし 地域ごとの要約あり
extremely-torrential-rain 超大豪雨情報 cwa 市区町村コード なし なし 地域ごとの要約あり
thunderstorm 大雷雨の即時情報、竜巻注意情報 cwa [] あり なし 見出しは「大雷雨即時訊息」または「龍捲風注意」
earthquake 地震情報 cwa 震度を観測した県・市の全市区町村 なし 地震情報の番号 期限は発表から 24 時間
tsunami_note 若干の海面変動 cwa 沿岸の市区町村 なし 地震情報の番号 規模 6 以上、深さ 30 km 以内、震央が海域のときに発表。期限は発表から 24 時間
debrisFlowLandSlide 土石流・大規模崩壊の警戒 出典の発表機関 [] あり なし
barrierLake 堰止湖の警戒 出典の発表機関 [] あり なし
roadClose 道路通行止め 出典の発表機関 [] あり 通行止めの位置
floodSensor 浸水検知 wra [] あり 検知点
seawave 波浪観測(高波) ncdr [] あり なし 沿岸観測点の波高が 6 m 以上のときに発表。期限は観測から 3 時間
workSchlClos 休業・休校 dgpa 市区町村コード なし なし
reservoirDischarge ダム放流 wra 市区町村コード なし なし 現在は無効で、現れません

降雨情報は軽い順に、heavy-rain、extremely-heavy-rain、torrential-rain、extremely-torrential-rain です。

addition を持つのは一部の種類だけです。フィールドはいずれも省かれることがあります。

種類 形
earthquake、tsunami_note { "id": "地震情報の番号" }。地震情報に使えます
roadClose areaDesc(範囲の説明)、county、town、roadName、location、geocode、ならびに出典原文の polygon と circle の文字列
floodSensor areaDesc、county、town、waterLevelStation(水位観測所)、waterLevel(水位)、geocode、ならびに出典原文の polygon と circle の文字列

addition の polygon と circle は、出典の元の文字列です。地図を描くときは /event/{id} の GeoJSON polygon を使ってください。

4 種の降雨情報(heavy-rain、extremely-heavy-rain、torrential-rain、extremely-torrential-rain)には、全国の原文のほかに、自動で作った地域ごとの要約があります。

エンドポイント 通常のイベント 降雨情報
全国のリスト、/event/{id} description は原文。raw はない description は全国の原文。raw はない
市区町村のリストで、その市区町村に地域ごとの要約がある 起きない description はその市区町村の要約。raw は全国の原文
市区町村のリストで、その市区町村に地域ごとの要約がない description は原文。raw はない description は全国の原文。raw はない

降雨情報は、まず原文で現れ、地域ごとの要約はあとから(通常は数分以内)補われます。同じ id の description が変わることがあります。最新のレスポンスを正としてください。id で本文をキャッシュしないでください。外国語のリクエストで、その市区町村の要約の訳がまだないときは、description は先に全国の原文の訳を使います。

MapLibre GL JS に、全国で有効なイベントの範囲を描きます。リストに polygon はなく、hasPolygon が true のイベントは単一イベントを再度照会して GeoJSON を取得します。

const API = "https://api.core-tnn1.exptech.dev";
// 1. 全国で有効なイベント。発表時刻の新しい順に並べます(レスポンスの順序は保証されません)
const events = await fetch(`${API}/api/v2/dpip/realtime/list`).then((r) => r.json());
events.sort((a, b) => b.send - a.send);
// 2. 範囲があるイベントは単一イベントを再取得し、polygon を GeoJSON source に追加します
for (const e of events.filter((e) => e.hasPolygon)) {
const [event] = await fetch(`${API}/api/v2/dpip/event/${e.id}`).then((r) => r.json());
if (!event?.polygon) continue; // 該当イベントがないときは []
map.addSource(`dpip-${event.id}`, { type: "geojson", data: event.polygon });
map.addLayer({
id: `dpip-${event.id}`,
type: "fill",
source: `dpip-${event.id}`,
paint: { "fill-color": "#ef4444", "fill-opacity": 0.25 },
});
}
  • 時刻の単位:send と expires は Unix ミリ秒です。id も時刻の数字ですが、Unix 秒であり、識別子にすぎません。
  • レスポンスの順序は保証されないので、send の新しい順に自分で並べてください。
  • データがないときは必ず [](200)です。404 ではありません。region が数値でないときだけ 400 です。
  • 有効と直近 3 日の条件は違います。期限は切れたが 3 日以内に発表されたものは history だけにあります。まだ期限が切れていないが 3 日より前に発表されたものは realtime だけにあります。
  • イベントは最大 7 日保持します。過ぎると /event/{id} でも見つかりません。
  • レスポンスには ETag(引用符なしの MD5)が付きます。If-None-Match は引用符があってもなくてもよく、一致すると 304 で body はありません。ETag はレスポンス全体をカバーし、言語とその時点の訳を含むため、キャッシュキーには完全な URL(lang を含む)を入れてください。サーバーは Cache-Control を送りません。
  • レスポンスは gzip に対応しています(curl は --compressed)。クロスオリジンの呼び出しを許可します。
  • データ出典:中央気象署、国家災害防救科技センター(NCDR)、経済部水利署、行政院人事行政総処などの公開防災情報です。