用途
cnki-export 用于从中国知网(CNKI)导出论文的引用数据,并将其推送到 Zotero 桌面版,或保存为 RIS 文件,或输出 GB/T 7714 格式的引用文本。适用于需要将 CNKI 论文快速保存到文献管理工具或导出引用数据的场景。
主要能力
- 支持三种导出模式:
- zotero(默认):通过本地 API 推送到 Zotero 桌面版
- ris:保存为 .ris 文件
- gb:输出 GB/T 7714 引用文本
- 支持单篇导出(在论文详情页操作)和批量导出(在搜索结果页操作)。
- 批量导出通过直接调用 CNKI 导出 API 实现,无需逐篇进入详情页,可大幅减少工具调用次数(例如 9 篇论文从 33 次调用降至 3 次)。
- 可选择性导出搜索结果中的指定论文(按索引过滤)。
- 提供 Python 脚本处理导出数据,解析 ELEARNING 格式并调用 Zotero 本地接口。
使用方式
模式选择
根据当前页面上下文选择模式:
- 在论文详情页:使用单篇导出(步骤 1A),需 1 次 evaluate + 1 次 bash。
- 在搜索结果页,保存全部或选中论文:使用批量导出(步骤 1B),需 1 次 evaluate + 1 次 bash。
- 需要先搜索再保存:先使用 cnki-search,再进行批量导出,共 4 次调用。
当需要保存多篇论文时,优先使用批量导出(1B)。
单篇导出(步骤 1A)
在论文详情页,使用 mcp__chrome-devtools__evaluate_script 执行脚本,从页面获取导出 URL 和加密 ID,调用 CNKI 导出 API,返回包含 GBTREFER、ELEARNING、ENDNOTE 等模式的数据,并提取 ISSN、dbcode、dbname、filename 等信息。
批量导出(步骤 1B)
在 CNKI 搜索结果页,提取所有复选框(input.cbItem)的值(即导出加密 ID),直接调用导出 API(https://kns.cnki.net/dm8/API/GetExport),返回 JSON 数组。可通过索引过滤仅导出指定论文。
推送到 Zotero(步骤 2)
将导出数据(单个对象或 JSON 数组)保存到临时文件,然后运行 Python 脚本:
python "e:/cnki/.claude/skills/cnki-export/scripts/push_to_zotero.py" /tmp/papers.json
该脚本支持单篇和批量 JSON 输入,处理 UTF-8 编码,解析 ELEARNING 格式为 Zotero 条目字段,并调用 POST http://127.0.0.1:23119/connector/saveItems。返回 201 表示成功,500 表示错误,0 表示 Zotero 未运行。
报告结果(步骤 3)
单篇导出后报告标题、作者、期刊和 GB/T 7714 引用;批量导出后报告已添加的论文数量及列表。
导出 API 参考
- API URL:https://kns.cnki.net/dm8/API/GetExport(固定,任意页面可用)
- filename:加密 ID(详情页为 #export-id,结果页为 input.cbItem 的值)
- displaymode:GBTREFER,elearning,EndNote(逗号分隔)
- uniplatform:NZKPT(必需)
已验证的选择器:
- 导出 URL:#export-url(仅详情页)
- 导出 ID:#export-id(仅详情页)
- 复选框(即导出 ID):input.cbItem(搜索结果页)
- 结果行:.result-table-list tbody tr(搜索结果页)
- 标题链接:td.name a.fz14(搜索结果页)
Zotero API 参考
- POST http://127.0.0.1:23119/connector/saveItems
- Content-Type: application/json
- X-Zotero-Connector-API-Version: 3
- 响应:201 = 创建成功,500 = 错误
- 保存到 Zotero 当前选中的分类
- 查询分类:
python "e:/cnki/.claude/skills/cnki-export/scripts/push_to_zotero.py" --list
适用场景
- 需要将 CNKI 论文保存到 Zotero 进行文献管理。
- 需要导出 CNKI 论文的引用数据为 RIS 文件或 GB/T 7714 文本。
- 在搜索结果页批量保存多篇论文。
限制与注意事项
- Windows 编码问题:必须使用 Python 脚本,不能直接通过 bash/curl 传递中文 JSON。
- Zotero 必须正在运行:localhost:23119 需要 Zotero 桌面版在后台运行。
- 中文作者:使用 name 字段(单字段,不拆分),creatorType 为 "author"。
- CNKI 导出 API 的 filename 必须是加密 ID(#export-id 或 input.cbItem 的值),而非 #paramfilename。
- 批量导出可节省约 90% 的工具调用。