数据浏览器
全站的判定都写着「不要求你信我,每条都可自查」。这一页把自查从一条 扩到整个库:四张表随你筛、随你排、随你导出, 每一行都点得进原始页面。 筛选条件全在网址里——筛出来的任何一屏都可以直接复制链接引用, 对方打开看到的是同一批数据。
每篇收录的报道过完五个工位之后的那张成绩单。分数和标记都可以点进去看逐条依据——命中了哪个词、扣在哪一维、引文出自原文第几句,详情页上都摆着。这张表只是让你能一次看完全部。
只读接口 不用打开网页也能把数据拉走
下面每一条都是已经在跑的公开出口,全部只读、不需要登录、不需要密钥,
直接用浏览器或 curl 就能取。
拉走之后请自己复算——这一页存在的全部理由就是让你不必信我们的算法,
可以拿原始数据自己算一遍。
最新 30 篇报道的订阅源,给聚合器和 RSS 阅读器用。只出首发稿(近重复转载不进),排序与首页同一把尺子。摘要只给 AI 摘要或正文截断,不发全文——爬取稿的版权在源站。
参数:无
返回:RSS 2.0(application/rss+xml)
<item><title>…</title><link>/news/123/</link><description>…</description><pubDate>…</pubDate></item>数据总览页那三张图的原始数字:按日收录量、各品牌报道篇数、质量分分布。图只能看不能核,这个出口是给复算用的。
参数:what=daily(按日收录)/ brands(品牌声量)/ quality(质量分布),默认 daily;其余取值返回 404
返回:CSV,UTF-8 带 BOM,首行表头
日期,当日收录篇数\n2026-08-01,37首页头版那颗「本期已封存」印章背后的东西:那一期收了哪些稿、每篇的哈希是什么、汇成的 Merkle 根是什么。返回的是**封存当时那份清单文件**,不是现算的——两者对不对得上,正是 manage.py seal_issue --verify 要验的事。
参数:路径参数为日期,格式 YYYY-MM-DD;格式不对或当天没封存返回 404
返回:JSON(缩进 2,不转义中文)
{"issue": 12, "date": "2026-08-26", "merkle_root": "…", "article_count": 37, "articles": [{"id": …, "sha256": "…"}]}一批预测的逐条哈希 + Merkle 根 + git 提交号 + RFC 3161 时间戳流水号。返回值里连**怎么验时间戳的那条 openssl 命令**都写着,因为可复核不该只能在我们的页面上完成。
参数:路径参数为批次号(形如 2026-08-001),不存在返回 404
返回:JSON(缩进 2,不转义中文)
{"batch": "2026-08-001", "merkle_root": "…", "git_commit": "…", "merkle_rule": "两两配对,父 = SHA-256(左 hex + 右 hex)…", "predictions": [{"seq": "P01", "sha256": "…"}]}全部 1,534 件事各自的独立来源数与报道数——「今天传的这些事,哪些是几家都在说的,哪些还只有一家在说」的原始数据。与事件表同一份缓存、同一个口径。
参数:无
返回:JSON:{"rows": [{"id": 事件ID, "t": 标题前30字, "s": 独立来源数, "a": 报道数, "m": "YYYY-MM"}]}
{"rows": [{"id": 2331, "t": "比亚迪 7 月销量", "s": 4, "a": 4, "m": "2026-08"}]}就是上面那个「导出 CSV」按钮打的地址。参数与页面完全一致——把浏览器地址栏里的 /explorer/ 换成 /explorer/export.csv 即可,导的是**当前筛选的全量结果**,不是当前页。
参数:t=events|promises|recalls|quality,外加该表的筛选参数(q / brand / status / year / band …)与 sort
返回:CSV,UTF-8 带 BOM,首行表头;单次上限 20,000 行
/explorer/export.csv?t=quality&band=low&source=…
四张表的数字都是此刻从库里数出来的,没有一个写死的值;
筛选、排序、分页全在服务端完成,所以你现在看到的这一屏有一个固定网址。
发现哪一行对不上?告诉我们,
或者去系统中心看这批数据是怎么来的。