用途 该工具面向可持续性 RSS 内容的全文/摘要补全场景,从 RSS 元数据数据库中读取以 DOI 为键的条目,并将抓取到的内容写入独立的全文 SQLite 数据库。它仅处理相关条目(is_relevant=1)。
主要能力
- 优先按 DOI 通过 API 获取元数据:先 OpenAlex,失败时回退 Semantic Scholar。
- 当 API 元数据不可用时,回退到网页全文提取。
- 每个 DOI 在 entry_content 中持久化一行内容。
- 支持可重试的增量更新,不产生重复行。
- 支持按需抓取单个 DOI,以及查看已存储内容状态。
触发条件
- 收到为相关 DOI 记录补充摘要/全文内容的请求。
- 收到将“网页优先抓取”替换为“API 优先补全”的请求。
- 需要可重试的增量更新且不产生重复行。
使用方式
- 确保上游 DOI/相关性数据已存在。
- 初始化数据库: export SUSTAIN_RSS_DB_PATH="/absolute/path/to/workspace-rss-bot/sustainability_rss.db" export SUSTAIN_FULLTEXT_DB_PATH="/absolute/path/to/workspace-rss-bot/sustainability_fulltext.db" python3 scripts/fulltext_fetch.py init-db --content-db "$SUSTAIN_FULLTEXT_DB_PATH"
- 运行增量同步(API 优先,网页回退): python3 scripts/fulltext_fetch.py sync --rss-db "$SUSTAIN_RSS_DB_PATH" --content-db "$SUSTAIN_FULLTEXT_DB_PATH" --limit 50 --openalex-email "you@example.com" --api-min-chars 80 --min-chars 300
- 按需抓取单个 DOI: python3 scripts/fulltext_fetch.py fetch-entry --rss-db "$SUSTAIN_RSS_DB_PATH" --content-db "$SUSTAIN_FULLTEXT_DB_PATH" --doi "10.1038/nature12373"
- 查看已存储内容状态: python3 scripts/fulltext_fetch.py list-content --rss-db "$SUSTAIN_RSS_DB_PATH" --content-db "$SUSTAIN_FULLTEXT_DB_PATH" --status ready --limit 100
数据契约 读取 RSS DB entries 的字段:doi、doi_is_surrogate、is_relevant、canonical_url、url、title。 写入全文 DB 的 entry_content(主键 doi):source URL/status/extractor、content_kind(abstract 或 fulltext)、content_text、content_hash、content_length,以及重试字段和时间戳。
提取优先级
- API 元数据路径:按 DOI 查 OpenAlex,失败时回退 Semantic Scholar;若通过 --api-min-chars 校验,则以 content_kind=abstract 持久化。
- 网页回退路径:先 canonical_url 再 url;在可用时使用 trafilatura 提取,否则使用内置 HTML 解析器;以 content_kind=fulltext 持久化。
更新语义
- Upsert 键为 doi。
- 成功:status=ready,重置重试计数。
- 失败但已有 ready 行:保留旧内容,记录最新错误。
- 失败且无 ready 行:status=failed,递增重试状态。
可配置参数 --rss-db、--content-db、SUSTAIN_RSS_DB_PATH、SUSTAIN_FULLTEXT_DB_PATH、--limit、--force、--only-failed、--refetch-days、--timeout、--max-bytes、--min-chars、--openalex-email / OPENALEX_EMAIL、--s2-api-key / S2_API_KEY、--api-timeout、--api-min-chars、--disable-api-metadata、--max-retries、--retry-backoff-minutes、--user-agent、--disable-trafilatura、--fail-on-errors。
错误处理
- 缺少以 DOI 为键的 entries 表:停止并给出可操作提示。
- RSS DB 与全文 DB 路径冲突:快速失败,要求使用不同文件。
- API/网络/HTTP 失败:记录失败并继续队列。
- 网页非文本内容:将该 DOI 标记为失败。
- 提取内容过短:按阈值判定失败,避免低质量内容。
适用场景 适合需要将可持续性 RSS 中相关 DOI 记录增量补全为摘要或全文、并集中存入独立全文数据库的自动化流程。
限制 仅处理 is_relevant=1 的条目;RSS DB 与全文 DB 需为不同文件;网页非文本内容会被标记失败;过短提取内容会按阈值失败。其余收费、价格、平台支持等细节暂未提供。