要按某份期刊清单检索论文,第一步是确认“哪一份、哪一版”。本次以 OpenAlex 的 doyens 清单为例,实际发送三个请求:取得清单对象,再分别取前三个来源和前三篇论文。以下结果来自 2026 年 10 月 16 日的运行。

清单版本与来源样本

清单端点为 https://api.openalex.org/source-lists/doyens 。本次返回的 list_version 是 2026-07-01,来源查询返回 3292 个来源。版本日期属于清单,访问日期属于这次检索,两者都要保存;之后再运行时,总量和结果顺序可能发生变化。

来源样本中,The Lancet 的 OpenAlex ID 是 S49861241,Nature 是 S137773608,Science 是 S3880285。三者的 listed_in 都包含 doyens。显示名称帮助人辨认,稳定 ID 和 ISSN 则适合用来连接后续记录。

三个请求的代码

import json
from urllib.request import urlopen

def get(url):
    with urlopen(url) as response:
        return json.load(response)

listing = get("https://api.openalex.org/source-lists/doyens")
print("list_version:", listing["list_version"])
for kind in ("sources", "works"):
    url = listing[kind + "_api_url"] + "&per_page=3"
    page = get(url)
    print(kind, page["meta"]["count"])
    for item in page["results"]:
        print(item["id"], item["display_name"])

代码使用清单对象返回的 sources_api_url 和 works_api_url,避免自己猜筛选参数。本次运行没有使用 API 密钥;重新运行时按服务当时的访问要求处理。这里各取三条用于检查结构,并没有下载整份清单的全部论文。

样本衔接与记录保存

两组样本靠 ID 衔接。样本论文 DOI 10.1038/227680a0 的 primary_location.source.id 为 S137773608,对应来源样本中的 Nature;同一位置的 source.listed_in 可用来检查该期刊是否属于 doyens 清单。DOI 定位作品,来源 ID 定位期刊。一份期刊可能有多个 ISSN,合并记录时按来源 ID 或完整 ISSN 列表,不要只按刊名。这几条只按返回顺序选取,不代表排名或随机抽样。

保存检索结果时,可以给每条记录增加四个字段:清单 ID、清单版本、请求 URL、抓取时间。把这四项和原始响应放在一起,日后才能区分清单更新、数据库更新和自己改了检索条件。

如果还不熟悉来源清单的用途,可以先读资源介绍。本篇继续到实际请求:先核对少量样本的身份,再决定是否扩大检索范围。

资料:OpenAlex 来源清单说明;doyens 清单接口。运行记录日期:2026 年 10 月 16 日。