kb-meta-fetch

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

KB Meta Fetch

KB元数据获取

Core Goal

核心目标

  • Pull
    journal-article
    records from Crossref after a given
    --from-date
    .
  • Read ISSN seed rows from
    journals_issn
    (
    journal
    ,
    issn1
    ).
  • Insert rows into
    journals
    with
    ON CONFLICT (doi) DO NOTHING
    .
  • Keep the implementation aligned with
    1_crossref_multi_increment.py
    .
  • 从Crossref拉取指定
    --from-date
    之后的
    journal-article
    记录。
  • journals_issn
    表读取ISSN种子数据行(
    journal
    issn1
    字段)。
  • 使用
    ON CONFLICT (doi) DO NOTHING
    语句将数据行插入
    journals
    表。
  • 保持实现与
    1_crossref_multi_increment.py
    一致。

Run Workflow

运行流程

  1. Set database connection env vars (user-managed keys prefixed with
    KB_
    ):
  • KB_DB_HOST
  • KB_DB_PORT
  • KB_DB_NAME
  • KB_DB_USER
  • KB_DB_PASSWORD
  • KB_LOG_DIR
    (required, log output directory)
  1. Run incremental fetch with a required date:
bash
python3 scripts/crossref_multi_increment.py --from-date 2024-05-01
  • If executing through an
    exec
    tool call, set timeout to 1800 seconds (30 minutes).
  1. Check logs in:
  • ${KB_LOG_DIR}/crossref-YYYYMMDD-HHMMSS.log
    (UTC timestamp, one file per run)
  1. Build user-facing summary strictly from the current run output:
  • Prefer
    RUN_SUMMARY_JSON
    emitted by
    crossref_multi_increment.py
    .
  • If JSON is unavailable, parse only this run's
    ${KB_LOG_DIR}/crossref-YYYYMMDD-HHMMSS.log
    .
  • total_inserted
    must mean rows inserted in this run (after DOI dedup), not cumulative rows in table.
  1. 设置数据库连接环境变量(用户管理的密钥前缀为
    KB_
    ):
  • KB_DB_HOST
  • KB_DB_PORT
  • KB_DB_NAME
  • KB_DB_USER
  • KB_DB_PASSWORD
  • KB_LOG_DIR
    (必填,日志输出目录)
  1. 使用必填的日期参数运行增量获取:
bash
python3 scripts/crossref_multi_increment.py --from-date 2024-05-01
  • 如果通过
    exec
    工具调用执行,设置超时时间为1800秒(30分钟)
  1. 查看日志:
  • ${KB_LOG_DIR}/crossref-YYYYMMDD-HHMMSS.log
    (UTC时间戳,每次运行生成一个文件)
  1. 严格基于当前运行输出构建面向用户的摘要:
  • 优先使用
    crossref_multi_increment.py
    输出的
    RUN_SUMMARY_JSON
  • 如果JSON不可用,仅解析本次运行的
    ${KB_LOG_DIR}/crossref-YYYYMMDD-HHMMSS.log
    日志文件。
  • total_inserted
    必须表示本次运行中插入的行数(经过DOI去重后),而非表中的累计行数。

Behavior Contract

行为约定

  • Query Crossref endpoint:
    https://api.crossref.org/journals/{issn}/works
    .
  • Filter with
    type:journal-article,from-pub-date:<from-date>
    .
  • Keep only items whose
    container-title
    equals target journal title (case-insensitive).
  • Continue pagination with cursor until no matching items remain.
  • Store fields in
    journals
    :
    title
    ,
    doi
    ,
    journal
    ,
    authors
    ,
    date
    .
  • Reporting/announcement metrics must use current-run log/summary only.
  • Do not compute announcement counts via database-wide or time-window SQL such as
    WHERE date >= ...
    .
  • 查询Crossref的端点:
    https://api.crossref.org/journals/{issn}/works
  • 使用过滤条件:
    type:journal-article,from-pub-date:<from-date>
  • 仅保留
    container-title
    与目标期刊标题匹配的条目(不区分大小写)。
  • 使用游标继续分页,直到没有匹配的条目为止。
  • journals
    表中存储以下字段:
    title
    doi
    journal
    authors
    date
  • 报告/通知指标必须仅使用当前运行的日志/摘要。
  • 禁止通过全库或时间窗口SQL(如
    WHERE date >= ...
    )计算通知计数。

Scope Boundary

范围边界

  • Implement only Crossref incremental fetch + insert into
    journals
    .
  • 仅实现Crossref增量获取 + 插入
    journals
    表的功能。

Script

脚本

  • scripts/crossref_multi_increment.py
  • scripts/crossref_multi_increment.py