dsh-fact-check 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,149 @@
1
+ {
2
+ "_about": "渠道路由表:确定性映射,模型不参与。**这是模板,不是配置**:表里所有 ${...} 都是变量,取值由 tools/local.json 的 overrides(或 JEV_* 环境变量)提供;未填也能跑,计划会原样显示占位符并把它列进 localPlaceholdersUnset。",
3
+ "_template_note": "本表只描述公开可用的渠道与接口,不包含任何主机地址。下面的 capabilities 段是「这类渠道能干什么」,具体地址由你填。",
4
+ "capabilities": {
5
+ "searxng": "${SEARXNG_URL} —— 自托管元搜索:GET /search?q=…&format=json;引擎数量看你自己实例的 GET /config;若走 HTTP 代理,本地地址必须绕过代理;冷启首查可能超时,建议放宽到 20~30s",
6
+ "proxy": "${HTTP_PROXY_URL} —— HTTP(S) 代理(海外站点可能需要;国内站点通常直连;本地服务必须绕过代理)",
7
+ "video_fetch": "${VIDEO_FETCH_CMD} —— 视频平台字幕/弹幕/评论提取工具(可选;评论与字幕通常需要登录态,弹幕一般免登录)",
8
+ "fetch_fallbacks": ["搜索服务自带的正文抽取(多数搜索 API 都有)", "markitdown / trafilatura / readability 等 HTML→Markdown 工具", "内置网页抓取能力", "curl -sL -A 'Mozilla/5.0'"]
9
+ },
10
+ "routes": [
11
+ {
12
+ "id": "general_web",
13
+ "when": "通用事实、需要中英双语多源",
14
+ "primary": ["批量搜索(多条查询并发,中英各一组)", "多引擎交叉搜索(按命中引擎数分置信度)", "单条快搜"],
15
+ "notes": "铁律 2 的主力:一次发多条查询,不要串行"
16
+ },
17
+ {
18
+ "id": "searxng_meta",
19
+ "when": "需要跨引擎交叉、或需要常规搜索 API 索引不到的生态",
20
+ "primary": ["自托管元搜索 JSON API ${SEARXNG_URL}/search?q=…&format=json(支持 categories / language / pageno)"],
21
+ "notes": "元搜索通常聚合百度/360/搜狗(含公众号)/B站/bing/brave/wikipedia/arxiv/pubmed 等;是否检索得到某个社区(如 Reddit)取决于你启用了哪些引擎,请在你的实例上验证"
22
+ },
23
+ {
24
+ "id": "vertical_domain",
25
+ "when": "金融 / 学术 / 法律 / 医疗 / 安全 / 能源 等垂直领域",
26
+ "primary": ["搜索服务的垂直域/tag 能力(先取 tag 清单再带 tag 调用)"],
27
+ "notes": "没有垂直域能力时,用 `site:` 限定 + 权威站点白名单替代"
28
+ },
29
+ {
30
+ "id": "official_json_api",
31
+ "when": "中国政策文件、法条、辟谣",
32
+ "primary": [
33
+ "国务院政策文件库 https://sousuo.www.gov.cn/search-gov/data?t=zhengcelibrary_gw_bm_gb&q=<kw>&p=1&n=100",
34
+ "国家法律法规数据库 https://flk.npc.gov.cn/",
35
+ "中国互联网联合辟谣平台 https://www.piyao.org.cn/"
36
+ ],
37
+ "notes": "结构化 JSON、免登录,优先于媒体转述"
38
+ },
39
+ {
40
+ "id": "gov_notice",
41
+ "when": "需要主管部门的一手通报:灾害事故、食品安全与药品抽检、教育考试政策、警情与判例",
42
+ "primary": [
43
+ "应急管理部 https://www.mem.gov.cn/ 与地方应急管理部门通报",
44
+ "中国地震台网速报目录 https://data.earthquake.cn/(发震时刻/震中/震源深度/震级)",
45
+ "市场监管总局、国家药监局与地方市场监管局的抽检与批准公告",
46
+ "教育部与省级教育考试院公告",
47
+ "法院公告、检察院通报、公安警情通报(判决书原文另见裁判文书网,但该站现需手机号注册登录、公开率已大幅下降,检索不到不等于案件不存在)"
48
+ ],
49
+ "notes": "这些是发布机构的一手通报,优先于任何媒体转述;伤亡数字、震级、抽检结果、判决结果一律回到原始通报核对,转述里的「据通报」不计为独立来源"
50
+ },
51
+ {
52
+ "id": "academic_api",
53
+ "when": "学术结论、论文是否被撤稿",
54
+ "primary": ["Crossref https://api.crossref.org/works/<DOI>", "Retraction Watch 数据库", "PubMed / Semantic Scholar"],
55
+ "notes": "查 has-update:1 判断撤稿或更正"
56
+ },
57
+ {
58
+ "id": "science_authority",
59
+ "when": "科学常识类说法、伪科普、健康养生流言",
60
+ "primary": [
61
+ "科学辟谣平台 https://piyao.kepuchina.cn/(科普中国 · 中国科协,含专家库与谣言库)",
62
+ "学科对口的专业学会与科研机构官网",
63
+ "航天 / 气象 / 海洋 / 地质等主管机构的公开数据"
64
+ ],
65
+ "notes": "科学常识的判据是专业共识与原始数据,不是「某个专家说过」;要把论文结论当常识用之前,先走 academic_api 核一遍"
66
+ },
67
+ {
68
+ "id": "news_rss",
69
+ "when": "新闻回溯、对权威源的定向监控、报道量随时间的变化",
70
+ "primary": [
71
+ "Google News RSS https://news.google.com/rss/search?q=<kw>&hl=en-US&gl=US&ceid=US:en",
72
+ "GDELT DOC 2.0 https://api.gdeltproject.org/api/v2/doc/doc?query=<kw>&mode=artlist(65 语种全文检索 + 报道量时间线,免费无 Key)",
73
+ "GDELT TV 2.0 https://api.gdeltproject.org/api/v2/tv/tv?query=<kw>(美国电视新闻字幕检索,免费无 Key)",
74
+ "媒体官方 RSS(例:中新网 https://www.chinanews.com.cn/rss/index.shtml —— 少有的央媒官方 RSS)"
75
+ ],
76
+ "notes": "支持 site: / when:7d / after: / before: 运算符;Google News 的结果链接为编码重定向需解码;GDELT 适合补『报道量随时间变化』这个维度"
77
+ },
78
+ {
79
+ "id": "archive",
80
+ "when": "页面是否存在/被删/被改,或需要主动留证",
81
+ "primary": ["Wayback Availability API", "Wayback CDX API(列全部快照)", "Wayback Save(主动存档)"],
82
+ "notes": "核查「事后删除」类事件的关键动作,公开免 Key"
83
+ },
84
+ {
85
+ "id": "closed_cn_social",
86
+ "when": "需要登录态的中国平台内容(公众号 / 知乎 / 视频站 / 微博 等)",
87
+ "primary": ["自托管元搜索(部分引擎能索引到这类内容)", "${VIDEO_FETCH_CMD}(视频站字幕/弹幕/评论)", "社交域名限定搜索(通常只能到标题/热搜层级)"],
88
+ "notes": "这类内容的正文通常需要登录态:抓不到就如实写「未能直接获取原文」,不要伪造"
89
+ },
90
+ {
91
+ "id": "closed_intl_social",
92
+ "when": "X / Reddit / Facebook 等平台内容",
93
+ "primary": [
94
+ "X 单条推文 syndication 接口:https://cdn.syndication.twimg.com/tweet-result?id=<tweet_id>&token=a(公开、免登录)",
95
+ "X oembed:https://publish.twitter.com/oembed?url=<url>(需跟随重定向)",
96
+ "Reddit:用正文抓取工具抓帖 URL;检索用 `site:reddit.com <关键词>`"
97
+ ],
98
+ "notes": "Facebook 免登录基本无解;先试公开接口,失败即如实标注未能获取"
99
+ },
100
+ {
101
+ "id": "sports_official",
102
+ "when": "体育赛事、转会、记录、兴奋剂",
103
+ "primary": [
104
+ "联赛 / 协会 / 俱乐部官网公告(转会与名单以官方注册信息为准)",
105
+ "赛事组委会与官方计时计分数据",
106
+ "WADA https://www.wada-ama.org/ 与中国反兴奋剂中心 https://www.chinada.cn/"
107
+ ],
108
+ "notes": "转会与名单以官方注册/官宣为准,传闻阶段的媒体报道只能算线索;运动员健康与死讯以本人或所属机构的认证账号为准"
109
+ },
110
+ {
111
+ "id": "entertainment_official",
112
+ "when": "娱乐名人传闻(去世 / 健康 / 恋情 / 违法)",
113
+ "primary": [
114
+ "本人及工作室 / 经纪公司的认证账号与书面声明",
115
+ "出品方或平台的官方物料与排播信息",
116
+ "涉死亡或违法时以警方、官方机构的通报为准(声明不能替代通报)",
117
+ "权威娱乐媒体的独立核实报道"
118
+ ],
119
+ "notes": "声明是当事人立场而非中立证据,写进报告要标注为「当事人声明」;声明已被删除的,用 archive 留证"
120
+ },
121
+ {
122
+ "id": "media_metadata",
123
+ "when": "图片/视频溯源",
124
+ "primary": ["${EXIFTOOL_CMD}(EXIF:拍摄时间/GPS/编辑痕迹)", "平台首发页", "Wayback"],
125
+ "notes": "照片溯源第一动作是读 EXIF,不是搜文字"
126
+ },
127
+ {
128
+ "id": "domain_intel",
129
+ "when": "域名真伪、识别冒名站",
130
+ "primary": ["crt.sh https://crt.sh/?q=<domain>&output=json(证书透明度→子域与域名年龄)", "whois(系统 CLI 或 python-whois 模块)"],
131
+ "notes": "可疑 SEO 站/冒名站要先证域名"
132
+ },
133
+ {
134
+ "id": "factcheck_registry",
135
+ "when": "说法是否已被核查机构核查过",
136
+ "primary": ["Google Fact Check Tools API(需自备免费 Key)", "中国互联网联合辟谣平台 piyao.org.cn", "Snopes / Politifact / 澎湃明查"],
137
+ "notes": "Google 该 API 需要 Key;没配就只用后几个"
138
+ }
139
+ ],
140
+ "_failure_actions": [
141
+ {"match": "HTTP 403 / 401 / 验证码 / 安全检测", "action": "换渠道:搜索引擎缓存 → 转载站 → 镜像 → 官方 API;仍失败则标注「未能获取原文」"},
142
+ {"match": "连接超时 / 无响应 / 被代理劫持", "action": "本地服务绕过代理;外网站确认代理可用;抓取放宽超时并重试一次"},
143
+ {"match": "0 结果", "action": "换措辞(中英互译、5~10 组关键词)→ 换工具 → 加 site: / 时间限定 → 换垂直域"},
144
+ {"match": "结果全是同一篇转载", "action": "按「伪多源」处理,追转载链到最上游再计独立来源数"},
145
+ {"match": "内容像 JS 空壳/登录墙", "action": "先用决策模型的 usable_page 判定;是空壳就换渠道,且不计入证据"},
146
+ {"match": "同一机构的伤亡数字 / 震级前后不一(初报 vs 续报)", "action": "按「数字滚动更新」处理:以最新一次通报为准,并在报告里写明该数字经过修正——不要判成来源互相矛盾;只有跨机构口径不同才算真矛盾"},
147
+ {"match": "官方源要求注册登录(裁判文书网、部分政务平台)", "action": "改走该机构的公开栏目或权威媒体的转述并注明出处层级,把「需登录」如实写进局限,不要伪造原文"}
148
+ ]
149
+ }