同一份档案,更多种连接。
网站与 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,并非官方机构原始电文。灾害应对请以主管机构发布为准。
← 返回报文档案