SuperAPI AI 工具集

sustainability-fulltext-fetch

写作与研究

查看项目

更新于 10-16 01:57

技能介绍

用途 该工具面向可持续性 RSS 内容的全文/摘要补全场景,从 RSS 元数据数据库中读取以 DOI 为键的条目,并将抓取到的内容写入独立的全文 SQLite 数据库。它仅处理相关条目(is_relevant=1)。

主要能力

  • 优先按 DOI 通过 API 获取元数据:先 OpenAlex,失败时回退 Semantic Scholar。
  • 当 API 元数据不可用时,回退到网页全文提取。
  • 每个 DOI 在 entry_content 中持久化一行内容。
  • 支持可重试的增量更新,不产生重复行。
  • 支持按需抓取单个 DOI,以及查看已存储内容状态。

触发条件

  • 收到为相关 DOI 记录补充摘要/全文内容的请求。
  • 收到将“网页优先抓取”替换为“API 优先补全”的请求。
  • 需要可重试的增量更新且不产生重复行。

使用方式

  1. 确保上游 DOI/相关性数据已存在。
  2. 初始化数据库: 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"
  3. 运行增量同步(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
  4. 按需抓取单个 DOI: python3 scripts/fulltext_fetch.py fetch-entry --rss-db "$SUSTAIN_RSS_DB_PATH" --content-db "$SUSTAIN_FULLTEXT_DB_PATH" --doi "10.1038/nature12373"
  5. 查看已存储内容状态: 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 需为不同文件;网页非文本内容会被标记失败;过短提取内容会按阈值失败。其余收费、价格、平台支持等细节暂未提供。