雨猫/EEW 档案
DEVELOPER REFERENCE · V1

同一份档案,更多种连接。

网站与 App 共用的公开只读 API。支持历史事件查询、完整原文下载、增量同步和实时订阅;无需密钥,支持跨域 GET。

https://eewlist.raineko.net/api/v1

接口一览

GET 路径用途
/status各路连接、接收时间、归档统计、备份及最近连接记录
/events事件列表。支持 source、from、to、q、minMagnitude、page、limit
/events/{id}事件详情,包含所有已归档报文版本及 missingRevisions
/events/{id}/export下载事件 JSON,含全部版本及其首次接收原文 rawText
/events/{id}/deliveries该事件的全部接收记录(包括重复投递)。after / limit 游标分页
/deliveries/{id}/raw原始报文的完整字节;X-Content-SHA256 响应头可校验原文
/latest每路最近归档事件和连接状态;旧事件不会因查询变成新预警
/reports?after=0&limit=100按入库 ID 递增同步所有报文版本,返回 nextCursor / highWater
/stream?after={cursor}SSE 订阅。支持 Last-Event-ID 断线续传及历史回放

按日期、来源查阅

GET /api/v1/events?source=sc&from=2026-09-01&to=2026-09-30&minMagnitude=3&page=1&limit=20

{
  "items": [ /* 事件,latest 包含最新报文 */ ],
  "total": 0,
  "page": 1,
  "limit": 20,
  "pages": 0
}

source:cea 中国地震局栏目(Wolfx cenc_eew)、sc 四川省地震局、fj 福建省地震局。日期筛选按发震时间,from / to 均为北京时间的包含日期。q 按震中或来源事件编号搜索。事件列表 limit 为 1–100;增量和接收记录 limit 为 1–1000。参数错误返回 400,不存在返回 404,不支持的写入返回 405。

报文数据契约

所有 API 时间为 ISO 8601 UTC,界面显示北京时间。缺失数值为 null;未知深度不得解释成 0km。事件的 id 是稳定的 32 位字符串,报文的 id 是单调递增整数。各来源分别建档,不跨机构合并事件。

{
  "id": 123,
  "eventKey": "32位稳定事件标识",
  "source": "sc",
  "eventId": "上游事件主编号",
  "upstreamEventId": "含报次后缀的完整上游编号",
  "revision": 2,
  "originAt": "ISO 8601 UTC",
  "issuedAt": "ISO 8601 UTC",
  "receivedAt": "ISO 8601 UTC",
  "epicenter": "震中名称",
  "latitude": null, "longitude": null,
  "magnitude": null, "depthKm": null, "maxIntensity": null,
  "isFinal": false, "isCancelled": false, "isTest": false,
  "deliveryId": 456,
  "rawUrl": "/api/v1/deliveries/456/raw"
}

App WebSocket 实时推送

wss://eewlist.raineko.net/api/v1/ws?after={cursor}

建立连接后收到 type=ready 与 cursor。新增报文入库后立即发送 { type: "report", id, data };data 为上面的报文数据契约。每 15 秒发送 type=status 和来源连接状态。发送文本 ping 可获取 type=pong。

未指定 after 时从当前最新游标开始;指定后补发该游标以后的报文。客户端必须在消费成功后持久化 id,并在重连时传回 after,按 id 去重。单连接中断后,断线期间已经归档的每一报都可以续传。历史回放分批进行,积压耗尽后的新报文立即推送。

按月归档

GET /api/v1/months?source=sc

返回 items 数组,每项包含北京时间的 month(YYYY-MM)和事件数 events。source 可省略。用于月份跳转和归档索引。

App 增量同步与 SSE 订阅

// 初次同步:从 after=0 开始,消费完成后持久化 nextCursor。
// 重连:从上次成功消费的游标继续,按报文 id 做幂等处理。
const stream = new EventSource('/api/v1/stream?after=' + savedCursor);
stream.addEventListener('report', event => {
  const report = JSON.parse(event.data);
  // 保存 report,再持久化 Number(event.lastEventId)。
});
stream.addEventListener('status', event => {
  const status = JSON.parse(event.data);
  // 依据 sources[].health 展示连接状态。
});

未指定 after 时,只订阅建立连接后的新增报文;指定 after 或 Last-Event-ID 则补发该游标以后的已归档版本。ready 事件给出起始游标。status 每 15 秒发送一次。浏览器会自动重连;也可每 5–15 秒调用 reports 接口实现同步。SSE 历史积压每秒回放 100 份报文,新报文落盘后立即推送,慢消费者会断开后续传。

报文入库顺序不一定等于发报顺序;同一报次的内容变更会产生新版本,旧报文仍保留。App 应依据 source、eventId、revision、issuedAt 判断事件状态,并处理取消与测试标记。latest 仅表示最近归档事件,不能据此认定正在预警。

收录范围与完整性

采集使用每路独立 WebSocket 加一条 all_eew 冗余连接,主备同时接收,交叉去重。每 15 秒检查心跳,45 秒无消息后重连,失败重试间隔上限 15 秒。双连接共享 Wolfx 上游及本机网络,不能补回上游从未送达的报文。本服务持续保存实际收到的上游预警原文、SHA-256、接收时间及会话标识,不自动删除。重复投递只增加接收记录;报文版本按完整 JSON 内容去重(仅忽略传输层 type 字段)。解析失败的原文仍落盘,在 status 的 unparsed 统计中体现。心跳与 pong 不属于预警报文,不计入档案。

本服务上线前的历史不能凭最新报文补齐。首次接入查询和实时推送有时无法区分,接收记录明确使用 primary/redundant-websocket-query-or-push 标记。连接中断区间记录在 status 中;重连会查询上游最新报文,但不保证补齐中间各报次。备份在同一服务器保存,不等同于异地容灾。

非官方数据转发来自 Wolfx Project。CEA 栏目当前对应中国地震台网预警接口 cenc_eew。原文指本站收到的转发 JSON,并非官方机构原始电文。灾害应对请以主管机构发布为准。

← 返回报文档案