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

地震情報

地震情報は、中央気象署(CWA)が発表した地震情報です。震央の位置、マグニチュード、深さ、および各県・市と各観測点の観測震度を含みます。サーバーは数秒ごとに気象署へ新しい情報がないか確認します。地震の一覧、過去の検索、震度分布図に向いています。

  • 新しい情報をリアルタイムで受け取るときは、SSE 配信 eq.report.v1 を使ってください。
  • 一覧(/api/v2/eq/report)には各地の震度は含まれません。震度分布が必要なときは、一覧で id を取得してから1 件の情報を検索してください。
上流の条件
  • 中央気象署:中央気象署のデータ利用規約(政府データオープンライセンスなど)も適用されます。気象・地震情報は中央気象署の発表を正とします。

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

現在、API Token は不要です。

条件で地震情報を検索し、配列を返します。既定では地震発生時刻の新しい順、1 ページ 1 件で、台湾全域の最大震度が 1 以上の情報だけを含みます(注意事項を参照)。

GEThttps://api.core.exptech.dev/api/v2/eq/report
クエリパラメーター
  • limitint任意既定値 1

    1 ページの件数。1–150。範囲外は最も近い上下限を適用します。

  • pageint任意既定値 1

    ページ番号。1–10000。

  • sortstring任意既定値 time

    並べ替えのフィールド:time(地震発生時刻)、intensity(台湾全域の最大震度)、magnitude(マグニチュード)、depth(深さ)。値が同じときは情報番号の新しい順です。

  • orderstring任意既定値 desc

    並べ替えの方向:asc または desc。

  • minIntensityint任意既定値 1

    台湾全域の最大震度の下限。0–9(対応は「震度の表し方」)。震度 0 の情報を含めるときは minIntensity=0 を付けます。

  • maxIntensityint任意既定値 9

    台湾全域の最大震度の上限。0–9。

  • minMagnitudefloat任意既定値 0

    マグニチュードの下限。0–10。

  • maxMagnitudefloat任意既定値 10

    マグニチュードの上限。0–10。

  • minDepthfloat任意既定値 0

    深さの下限(キロメートル)。0–700。

  • maxDepthfloat任意既定値 700

    深さの上限(キロメートル)。0–700。

  • startTimestring任意

    開始日 YYYY-MM-DD(台湾時間)。当日の 00:00:00 を含みます。形式が不正なときは無視します。

  • endTimestring任意

    終了日 YYYY-MM-DD(台湾時間)。当日の 23:59:59 を含みます。形式が不正なときは無視します。

  • citystring任意

    県・市の名前。完全一致。例:花蓮縣、臺北市(「臺」であり「台」ではありません)。その県・市で震度が観測された情報だけを返します。

  • cityMinIntint任意

    県・市の震度の下限。city と一緒のときはその県・市に適用します。単独のときは、いずれかの県・市が条件を満たせば含めます。

  • cityMaxIntint任意

    県・市の震度の上限。規則は cityMinInt と同じです。

リクエスト例
curl -L "https://api.core.exptech.dev/api/v2/eq/report"
レスポンス

成功(一致する情報がないときは空配列 [])

[
{
"id": "115079-2026-1109-122157",
"lat": 23.62,
"lon": 120.66,
"depth": 10.5,
"loc": "雲林縣政府東南東方 23.2 公里 (位於雲林縣古坑鄉)",
"mag": 4.2,
"time": 1794198117000,
"int": 3,
"trem": 0,
"md5": "3F2A9C1E7B5D4A608E1F2C3D4B5A6978"
}
]

パラメータが正規形ではないため、正規の URL へ誘導します

HTTP/1.1 302 Found
Location: /api/v2/eq/report?limit=20&minIntensity=4

If-None-Match が ETag と同じ。本文はありませんレスポンスボディなし

サーバーエラー

{
"error": "<錯誤訊息>"
}
試してみる
クエリパラメーター

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

レスポンスは配列で、各要素が 1 件の情報です。

フィールド型説明
[].idstring情報 ID。形式は XXXXXX-YYYY-MMDD-HHMMSS。先頭 3 桁は民国年、続く 3 桁は気象署の情報番号(番号のない局地的な地震は 000)、その後ろは地震の日付と時刻(台湾時間)です。例:115079-2026-1109-122157。
[].latnumber震央の緯度(度)。
[].lonnumber震央の経度(度)。
[].depthnumber震源の深さ(キロメートル)。
[].locstring震央の位置の説明。気象署の原文のままです(連続した空白を含むことがあります)。
[].magnumberリヒターマグニチュード。
[].timeint地震発生時刻。Unix ミリ秒。
[].intint台湾全域の最大震度。0–9(対応は「震度の表し方」)。
[].tremint予約フィールド。現在は常に 0。
[].md5string情報の内容(各地の震度を含む)のハッシュ。32 桁の大文字 16 進数。内容が更新されると変わります。1 件の情報を取り直す必要があるかの判断に使えます。

情報 ID で 1 件を取得します。各県・市と各観測点の震度を含みます。

GEThttps://api.core.exptech.dev/api/v2/eq/report/{id}
パスパラメーター
  • idstring必須

    情報 ID(パスパラメータ)。形式は XXXXXX-YYYY-MMDD-HHMMSS。例:114000-2025-0829-100546。query パラメータは無視されます。

リクエスト例
curl "https://api.core.exptech.dev/api/v2/eq/report/<id>"
レスポンス

成功

{
"id": "114000-2025-0829-100546",
"lat": 22.86,
"lon": 121.28,
"depth": 16.9,
"loc": "臺東縣政府東北方 17.5 公里 (位於臺東縣近海)",
"mag": 4,
"time": 1756433146000,
"list": {
"臺東縣": {
"int": 2,
"town": {
"東河": {
"lat": 22.97,
"lon": 121.3,
"int": 2
},
"鹿野": {
"lat": 22.91,
"lon": 121.13,
"int": 2
},
"成功": {
"lat": 23.1,
"lon": 121.37,
"int": 1
}
}
},
"花蓮縣": {
"int": 1,
"town": {
"富里": {
"lat": 23.2,
"lon": 121.29,
"int": 1
}
}
}
},
"trem": 0
}

If-None-Match が ETag と同じ。本文はありませんレスポンスボディなし

ID の形式が不正、またはこの情報がない(レスポンス本文はありません)レスポンスボディなし

試してみる
パスパラメーター

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

フィールド型説明
idstring情報 ID。形式は一覧と同じです。
latnumber震央の緯度(度)。
lonnumber震央の経度(度)。
depthnumber震源の深さ(キロメートル)。
locstring震央の位置の説明。
magnumberリヒターマグニチュード。
timeint地震発生時刻。Unix ミリ秒。
listobject各県・市の震度。key は県・市の名前(例:臺東縣)。観測データがないときは空オブジェクト {} です。
<縣市>.intintその県・市の最大震度。0–9。
<縣市>.townobjectその県・市の各観測点の震度。key は観測点の名前です。
<測站>.latnumber観測点の緯度(度)。
<測站>.lonnumber観測点の経度(度)。
<測站>.intint観測点の震度。0–9。
tremint予約フィールド。現在は常に 0。

1 件のレスポンスには int(台湾全域の最大震度)と md5 はありません。台湾全域の最大震度が必要なときは、list の各県・市の int の最大値を取ってください。

int、minIntensity、cityMinInt などの震度フィールドは、0–9 の整数で中央気象署の震度階級を表します。

値 0 1 2 3 4 5 6 7 8 9
震度 0 1 2 3 4 5弱 5強 6弱 6強 7

条件で一覧を検索し、一覧の id で各地の震度を 1 件ずつ取得します(一覧には各地の震度がありません)。query を正規形で組むと(パラメータはアルファベット順、既定値は付けない)、余分な 302 が 1 回減ります。

ターミナルウィンドウ
# 最大震度 4 以上の直近 20 件
curl -L "https://api.core.exptech.dev/api/v2/eq/report?limit=20&minIntensity=4"
# 2024-04-03 当日(台湾時間)のすべての情報。震度 0 を含む
curl -L "https://api.core.exptech.dev/api/v2/eq/report?endTime=2024-04-03&limit=150&minIntensity=0&startTime=2024-04-03"
const BASE = "https://api.core.exptech.dev";
// 1. 一覧:最大震度 4 以上の直近 20 件
const params = new URLSearchParams({ limit: "20", minIntensity: "4" });
const listRes = await fetch(`${BASE}/api/v2/eq/report?${params}`);
if (!listRes.ok) throw new Error(`HTTP ${listRes.status}`);
const reports = await listRes.json();
// 2. 1 件ずつ:県・市と観測点の震度を取得する
for (const r of reports) {
console.log(r.id, new Date(r.time).toISOString(), `M${r.mag}`, `最大震度 ${r.int}`);
const res = await fetch(`${BASE}/api/v2/eq/report/${r.id}`);
if (res.status === 404) continue; // この情報はない
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const report = await res.json();
for (const [city, area] of Object.entries(report.list)) {
for (const [station, s] of Object.entries(area.town)) {
console.log(" ", city, area.int, station, s.int);
}
}
}
  • 既定では震度 0 の情報を除きます。 一覧の minIntensity の既定は 1 です。このパラメータを付けないと、台湾全域の最大震度が 0 の情報は出ません。すべての情報を出すときは minIntensity=0 を付けてください。

  • パラメータが正規形でないときは、先に 302 を返します。 一覧(v2 と v1)は query を正規化し、正規形と違うときは 302 で正規の URL へ誘導してからデータを返します。正規形の規則:

    • パラメータは名前のアルファベット順。
    • 既定値と等しいパラメータを除く(例:page=1、sort=time、limit=1)。
    • 未知のパラメータを除く。
    • 数値は上下限を適用し、余分な 0 を除く(例:limit=500 は limit=150、minMagnitude=4.50 は minMagnitude=4.5)。形式が不正な日付は除く。

    ブラウザの fetch は 302 に自動で従います。curl には -L が必要です。上の規則で URL を組むと、往復を 1 回省けます。1 件の情報(/api/v2/eq/report/{id})は正規化せず、302 にもなりません。

  • パラメータの値が不正でも 400 は返りません。 解析できない整数や小数は 0 としてから上下限を適用します(例:minIntensity=abc は minIntensity=0 と同じ)。sort と order の未知の値は既定値に戻ります。

  • キャッシュと ETag。 レスポンスには ETag が付きます。同じ If-None-Match を付けると 304 になります(本文なし)。サーバー側のキャッシュは 1 秒です。HEAD にも対応しています。

  • エラーレスポンス。 サーバーエラーのときは 500 を返し、本文は {"error": "..."} です。メッセージはデバッグの参考だけで、内容で判断しないでください。1 件の情報が見つからないとき、または ID の形式が不正なときは 404 を返し、レスポンス本文はありません。

  • 時刻と座標。 time は Unix のミリ秒です。日付パラメータ startTime と endTime は台湾時間(UTC+8)として解釈します。震央の座標は小数第 2 位に丸めます。

  • 一覧と 1 件でフィールドが違います。 一覧には int と md5 があり、list はありません。1 件には list があり、int と md5 はありません。

最新の N 件(地震発生時刻の新しい順)を返します。各件に県・市と観測点の震度が含まれます。震度やマグニチュードなどの絞り込みはなく、震度 0 の情報も除きません。

GEThttps://api.core.exptech.dev/api/v1/eq/report
クエリパラメーター
  • limitint任意既定値 1

    返す件数。1–50。無効な値は 1、50 を超える値は 50 とします。

リクエスト例
curl -L "https://api.core.exptech.dev/api/v1/eq/report"
レスポンス

成功(データがないときは空配列 [])

[
{
"id": "CWA-EQ114000-2025-0829-100546",
"no": "2025082910054600000",
"lat": 22.86,
"lon": 121.28,
"depth": 16.9,
"loc": "臺東縣政府東北方 17.5 公里 (位於臺東縣近海)",
"mag": 4,
"time": 1756433146000,
"list": {
"臺東縣": {
"int": 2,
"town": {
"東河": {
"lat": 22.97,
"lon": 121.3,
"int": 2
}
}
}
}
}
]

パラメータが正規形ではないため、正規の URL へ誘導します

HTTP/1.1 302 Found
Location: /api/v1/eq/report

If-None-Match が ETag と同じ。本文はありませんレスポンスボディなし

サーバーエラー

{
"error": "<錯誤訊息>"
}
試してみる
クエリパラメーター

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

v2 との違い:

フィールド型説明
[].idstring情報 ID。v2 より CWA-EQ のプレフィックスが付きます。例:CWA-EQ114000-2025-0829-100546。プレフィックスを除くと v2 の ID です。
[].nostring気象署の地震番号の文字列。先頭 14 桁は地震発生時刻 YYYYMMDDHHMMSS(台湾時間)。v2 にはこのフィールドがありません。
[].listobject各県・市と観測点の震度。形式は v2 の 1 件の list と同じです。

残りのフィールド(lat、lon、depth、loc、mag、time)は v2 と同じです。v1 には int、trem、md5 がありません。?limit=1 は既定値と同じなので、query のない URL へ 302 します。