史 CHRONICLE · API REFERENCE 开放接口

REST · JSON · CORS 全开

把三千年的档案接到你的程序里

所有只读接口无需鉴权、支持跨域,可直接被网页、App、机器人或数据管道调用。 写操作需要 X-API-Key,数据落在 Cloudflare D1。

快速开始

一次请求拿到 1949 年之后、重要度 4 星以上的中国事件:

curl -G "https://history-events.pages.dev/api/v1/events" \
  --data-urlencode "region=中国" \
  --data-urlencode "from=1949" \
  --data-urlencode "minImportance=4" \
  --data-urlencode "pageSize=5"

返回体统一为 { ok, source, data, pagination },其中 source 会告诉你本次数据来自 D1 还是静态兜底:

{
  "ok": true,
  "source": "d1",
  "tookMs": 12,
  "pagination": { "page": 1, "pageSize": 5, "total": 42, "totalPages": 9 },
  "data": [
    {
      "id": "cn-1949-a782e5",
      "title": "中华人民共和国成立",
      "year": 1949, "month": 10, "day": 1,
      "dateText": "1949年10月1日",
      "region": "中国", "era": "冷战年代", "category": "政治",
      "importance": 5,
      "summary": "毛泽东在天安门城楼宣告中华人民共和国成立。",
      "tags": ["开国大典", "新中国"]
    }
  ]
}

基础地址

https://history-events.pages.dev/api/v1

所有响应均为 application/json; charset=utf-8,带 Access-Control-Allow-Origin: *,浏览器可直接 fetch。列出全部端点:

GET /api/v1

鉴权与写操作

读取完全开放。新增、修改、删除需要请求头携带 API Key:

curl -X POST "https://history-events.pages.dev/api/v1/events" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <your-key>" \
  -d '{
    "title": "示例事件",
    "year": 2030,
    "category": "科技",
    "importance": 3,
    "summary": "一句话摘要",
    "detail": "详细说明",
    "tags": ["示例"]
  }'
!仅 D1 模式可写。若站点未绑定 D1,写接口返回 501 D1_REQUIRED,读接口不受影响。

事件检索

GET /api/v1/events 分页 + 多条件筛选
参数说明示例
q关键词,匹配标题、摘要、详述、标签、人物、地点改革开放
region中国 / 世界,逗号分隔多选中国,世界
era时代名称古典时代
category政治 / 军事 / 科技 / 文化 / 思想 / 经济 / 探索 / 灾难 / 体育科技,探索
country国家或地区,模糊匹配罗马
tag标签精确匹配丝绸之路
figure人物精确匹配孔子
from / to年份区间,公元前用负数-221 / 1911
minImportance最低重要度 1–54
sortasc(默认)/ desc / importance / relevanceimportance
page / pageSize分页,pageSize 上限 1002 / 50
fields只返回指定字段,逗号分隔id,title,year

示例:搜索与“人工智能”相关、1945 年后的记录,按重要度排序。

GET /api/v1/events?q=人工智能&from=1945&sort=importance

单条详情

GET /api/v1/events/{id} 含相关事件推荐

返回 data(完整字段)与 related(同时代、时间相近的 6 条)。

GET /api/v1/events/cn-1949-a782e5

同一路径支持写操作:PATCH 更新、DELETE 删除,均需 API Key。

随机事件

GET /api/v1/random?n=3&region=世界&minImportance=4 适合每日一史、卡片推荐

时间轴聚合

GET /api/v1/timeline?granularity=century 按世纪 / 十年 / 年聚合

granularity 取 century(默认)、decade、year。可叠加 region、category、from、to。每个桶返回计数与至多 3 条高重要度事件,便于直接画柱状图。

统计

GET /api/v1/stats 时代 / 分类 / 地区 / 世纪分布

返回 byEra、byCategory、byRegion、byCentury、byImportance 与 topTags,并带 10 分钟 KV 缓存。

历史上的今天

GET /api/v1/on-this-day?month=11&day=3 可指定任意日期

不传日期则按北京时间取“今天”。若当日无确切日期条目,mode 变为 month,返回该月的高重要度事件。

导出

GET /api/v1/export?format=csv&region=中国 CSV / JSON 全量或筛选结果

CSV 带 UTF-8 BOM,Excel 直接打开不乱码。筛选参数与 /events 一致(不含分页)。

数据结构

字段类型说明
idstring稳定标识,可用于深链与详情查询
titlestring事件标题
year / month / dayint | null年份为负表示公元前;月日可能缺失
sortYearnumber用于排序的年份小数(含月日权重)
dateTextstring可直接展示的日期文本
region / countrystring中国 / 世界;具体国家或地区
era / eraRangestring八个时代之一及其年代范围
categorystring九个主题之一
importanceint1–5,5 为世界级影响
locationstring发生地点
figures / tagsstring[]相关人物与标签
summary / detailstring一句话摘要 / 详述

状态码

状态码含义
200成功
201创建成功
400参数错误(BAD_JSON)
401缺少或无效的 API Key(UNAUTHORIZED)
404事件或接口不存在(NOT_FOUND)
405方法不允许(METHOD_NOT_ALLOWED)
422字段校验失败(VALIDATION_ERROR)
501未绑定 D1,写操作不可用(D1_REQUIRED)

错误响应统一为:

{ "ok": false, "error": { "code": "NOT_FOUND", "message": "未找到事件: xxx" } }