用途
kb-meta-fetch 的核心目标是从 Crossref 拉取指定起始日期之后的期刊文章记录,并将其写入 PostgreSQL 的 journals 表。它面向需要按 ISSN 批量、增量同步期刊元数据的场景,例如维护文献库、构建知识库的元数据层。
主要能力
- 从 journals_issn 表读取 ISSN 种子行(字段:journal、issn1)。
- 按给定的 --from-date 增量抓取 Crossref 中的期刊文章。
- 查询 Crossref 接口:https://api.crossref.org/journals/{issn}/works。
- 使用过滤条件 type:journal-article,from-pub-date:<from-date>。
- 仅保留 container-title 与目标期刊标题一致(不区分大小写)的条目。
- 使用游标(cursor)持续分页,直到没有匹配条目为止。
- 将 title、doi、journal、authors、date、abstract 写入 journals 表;当 Crossref 没有摘要时 abstract 可为空。
- 通过 ON CONFLICT (doi) DO NOTHING 实现 DOI 去重插入。
- 每次运行生成独立日志文件,并优先输出 RUN_SUMMARY_JSON 供汇总使用。
使用方式
-
设置数据库连接环境变量(用户自行管理的、以 KB_ 为前缀的键):
- KB_DB_HOST
- KB_DB_PORT
- KB_DB_NAME
- KB_DB_USER
- KB_DB_PASSWORD
- KB_LOG_DIR(必填,日志输出目录)
-
运行增量抓取,必须提供日期参数: python3 scripts/crossref_multi_increment.py --from-date 2024-05-01
-
如果通过 exec 工具调用执行,请将超时设置为 1800 秒(30 分钟)。
-
在以下位置查看日志: ${KB_LOG_DIR}/crossref-YYYYMMDD-HHMMSS.log(UTC 时间戳,每次运行一个文件)
-
面向用户的汇总必须严格基于本次运行的输出:
- 优先使用 crossref_multi_increment.py 输出的 RUN_SUMMARY_JSON。
- 如果 JSON 不可用,只解析本次运行的 ${KB_LOG_DIR}/crossref-YYYYMMDD-HHMMSS.log。
- total_inserted 必须表示本次运行中(经 DOI 去重后)插入的行数,而不是表中的累计行数。
行为约定
- 报告或公告中的指标只能使用本次运行的日志或汇总。
- 不得通过数据库全表或时间窗口 SQL(例如 WHERE date >= ...)来计算公告计数。
适用范围与限制
- 仅实现 Crossref 增量抓取并插入 journals 表。
- 实现需与 1_crossref_multi_increment.py 保持一致。
- 脚本路径:scripts/crossref_multi_increment.py。
- 其他功能、收费、价格、平台或效果信息暂未提供。