关于 sustainability-fulltext-fetch
sustainability-fulltext-fetch 用于补充相关 DOI RSS 记录,获取摘要或网页正文,并将结果单独存储。它适合可持续发展研究工作流,用于增量更新内容并安全重试。
主要功能
- 01抓取相关 DOI 记录的内容
- 02优先使用 OpenAlex,再尝试 Semantic Scholar
- 03无法取得 API 元数据时提取网页正文
- 04按 DOI 保存并更新内容记录
- 05支持增量同步与重试
适用场景
- 01为 RSS 条目补充摘要
- 02API 元数据不可用时提取全文
- 03重试失败抓取且避免 DOI 记录重复
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tiangong-ai/ agent-skills --skill sustainability-fulltext-fetch安装后在 Claude Code 中输入/sustainability-fulltext-fetch确认已加载。
详细介绍
可持续性全文获取
核心目标
- 从 RSS 元数据数据库读取相关 DOI 条目。
- 将获取的内容写入单独的全文数据库。
- 仅处理相关条目(
is_relevant=1)。 - 优先通过 DOI 获取 API 元数据(首先使用 OpenAlex,失败时回退到 Semantic Scholar)。
- API 元数据不可用时,回退到网页全文提取。
- 在
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 "[email protected]" \
--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 数据库的
entries表读取:doi、doi_is_surrogate、is_relevant、canonical_url、url、title。
- 写入全文数据库的
entry_content表(主键为doi):- 来源 URL/状态/提取器
content_kind(abstract或fulltext)content_text、content_hash、content_length- 重试字段和时间戳。
提取优先级
- API 元数据路径:
- 按 DOI 查询 OpenAlex。
- 按 DOI 回退查询 Semantic Scholar。
- 若符合条件(
--api-min-chars),则以content_kind=abstract保存。
- 网页回退路径:
- 依次使用
canonical_url和url。 - 有
trafilatura时使用它提取,否则使用内置 HTML 解析器。 - 以
content_kind=fulltext保存。
更新语义
- Upsert 键:
doi。 - 成功:状态设为
ready,重置重试计数器。 - 失败且已有状态为 ready 的记录:保留旧内容,记录最新错误。
- 失败且没有状态为 ready 的记录:将
status设为failed,增加重试状态计数。
可配置参数
--rss-db--content-dbSUSTAIN_RSS_DB_PATHSUSTAIN_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 数据库与全文数据库路径冲突:立即失败,并要求使用不同文件。
- API/网络/HTTP 失败:记录失败并继续处理队列。
- 网页内容为非文本:将该 DOI 标记为失败。
- 提取内容过短:根据阈值判定失败,以避免低质量内容。
参考资料
references/schema.mdreferences/fetch-rules.md
资源文件
assets/config.example.json
脚本
scripts/fulltext_fetch.py
评论
支持 Markdown