当用户需要合法获取学术文献全文、通过机构权限访问知网(CNKI)、检索英文开源免费文献(OA)、使用出版商 API 接口获取资源、借助浏览器机构鉴权回退获取,或下载补充材料(SI / Supporting Information)时使用。
Nature 学术文献下载器
本 Skill 通过合法开源(Open Access/OA)、出版商 API、知网(CNKI)机构权限及基于浏览器的机构授权通道进行文献路由与下载。scripts/batch_download.mjs 为主控编排入口,学校配置、出版商凭证、元数据与 OA 解析、数据源下载、内容校验及 Manifest 记录均为独立模块。
所有已验证的路由路线均为参考示例而非默认固定配置。每家机构都应从用户实际使用的图书馆资源 URL 切入,因为相比单纯的学校名称,资源门户、CAS 回调地址、EZproxy、WebVPN、基于 IP 鉴权的数据库页面及详情页能更准确地反映真实的授权路径。
SI 确认拦截门(优先执行):在下载任何 PDF、CAJ、HTML、XML、压缩包或附件前,必须先询问用户是否需要补充材料(Supporting Information / SI)。用户显式提出需要 SI 记为“是”,显式要求“仅正文”记为“否”;若未提及则对整批文献统一询问一次。运行下载器时必须且仅能传入
--si或--no-si参数之一。若未带这两个参数,脚本将返回si_confirmation_required且不会创建输出目录。
主工作流:在路由前,先规范化 DOI/题名并识别语言和出版商。中文文献一律走 CNKI;对于 Elsevier、Springer Nature 和 IEEE 的英文文献,若已配置可用凭证,优先尝试出版商 API,API 下载成功后无需再强制判断 OA 状态;若 API 失败则自动检查合法 OA 来源。其他英文出版商则优先检索 OA,若 OA 不可用再走 Web Access 机构授权路线。
规范化 DOI/题名并识别语言、出版商
├─ 中文文献:直接走 CNKI
└─ 英文文献
├─ Elsevier / Springer Nature / IEEE,且已配置有效 Key
│ ├─ 优先通过出版商 API 下载
│ ├─ API 下载成功:结束,不强制判断 OA
│ └─ API 下载失败:检查文章级 OA,再走 PMC / Unpaywall / 合法仓储
└─ 其他出版商
├─ 检查文章级 OA
└─ OA 不可用:走 Web Access 机构授权
中文文献仅走 CNKI:凡符合中文题名、
zh语言标识、显式 CNKI 来源 URL 或指定了--route cnki的文献,即使表面存在其他 OA 副本,也必须走 CNKI。复用用户当前 Chrome 浏览器中的图书馆/知网登录状态,并优先使用配置的discovery.cnki_url。严禁导出 Cookie 或收集用户的机构账号密码。
出版商 API 失败回退:有效 API Key 并不保证拥有全文下载权限。当 Elsevier、Springer Nature 或 IEEE 的 API 请求返回无权限或无法获取可用全文时,应首先自动尝试合法 OA 来源。仅当出版商 API 和 OA 路线均失败后,才返回
api_fallback_confirmation_required并询问一次是否改走 Web Access 路线。切勿自动切换至机构 Web Access。
浏览器状态原则:授权下载完全依赖于用户已登录的具体 Chrome 配置文件(Browser Profile)。若代理、CDP 会话或自动化工具打开了一个全新的 Profile 或没有任何登录状态的浏览器,切勿直接将其归咎于“缺乏图书馆权限”。请切换到能复用用户当前活跃浏览器会话的控制路径,或提示用户在该自动化浏览器实例中完成登录认证。
文件格式原则:PDF、HTML 全文以及 CAJ 等数据库原生格式属于不同的交付物。若用户明确只要 PDF,必须校验是否为真实的 PDF 链接或返回内容包含
no_authorized_pdf_found或pdf_fetch_failed。严禁将 CAJ、HTML 或登录页误存为 PDF。
下载接入与首次运行配置
每次接收下载请求时,首先明确文献列表并询问:
是否同时下载这些文献的 Supporting Information(SI,补充材料)?
仅在定位所需文献确实有必要时,才在提问前进行元数据查询。在得到明确答复前不得下载文件。仅当选择的路线为 CNKI 或 Web Access 时才配置图书馆资源;仅当选定的英文文章属于 Elsevier、Springer Nature 或 IEEE 时才配置出版商 API;在尝试已配置的出版商 API 之前,无需事先校验 OA 状态。
付费图书馆资源配置
向用户索取其平时访问图书馆电子资源所用的实际 URL:
请发你平时进入图书馆电子资源/数据库的平台链接。
可以是资源门户、数据库列表、Web of Science 入口、某个数据库详情页,
或跳转到统一身份认证的登录链接。
保存配置前,先从 URL 中推断授权路由:
python3 scripts/configure_school.py infer "https://example.edu/library/resources"
python3 scripts/configure_school.py url "https://example.edu/library/resources"
python3 scripts/configure_school.py show
python3 scripts/configure_school.py health --force
本 Skill 并不包含任何预设的学校配置。若用户无法提供资源 URL,请提示其查找本校图书馆/数据库的官方入口,切勿随意猜测学校域名。
默认配置文件路径为:
~/.config/lit-dl/school.json
对于测试环境或隔离配置,请设置:
LIT_DL_CONFIG_DIR=/path/to/configdir
下载器会自动读取此配置。若存在 discovery.web_of_science_url,scripts/batch_download.mjs 将其用作 Web of Science 入口;否则将回退使用 https://www.webofscience.com/wos/woscc/basic-search。
对于中文文献,下载器会在配置存在时读取 discovery.cnki_url;若不存在,scripts/batch_download.mjs --title "<中文题名>" 将回退使用 https://kns.cnki.net/kns8s/defaultresult/index。
API 优先与 Open-Access 回退机制
对于英文文献,在决定何时判断文章级 OA 前,先识别其出版商:
-
收集 DOI、PMID、精确题名、文章 URL 或明确的文献列表,规范化其元数据与出版商信息。
-
若文献属于 Elsevier、Springer Nature 或 IEEE,且已配置可用凭证,优先尝试出版商 API。成功后记录
accessMode: publisher_api与oa_status: not_checked_api_first;切勿仅为了打标签而多此一举去校验 OA 状态。 -
若出版商 API 失败,自动检索 PMC、Unpaywall、出版商官方 OA 页面、arXiv 及其他合法机构仓储或明确公开的 PDF URL。在 Manifest 记录中保留失败的 API 尝试日志。
-
对于其他英文出版商,在尝试 Web Access 前先检索这些合法 OA 来源。
-
对于精确题名或明确仅限 OA 的请求,优先使用:
node scripts/batch_download.mjs --title "<exact title>" --open-access --no-si --out "<project>"当用户提供了已知的合法 OA PDF URL 时,使用
--pdf-url。 -
校验下载的文件并记录来源。将成功下载的 PDF 标记为
open_access_downloaded。 -
若未找到合法 OA 全文,标记为
oa_not_found。若为 API 已失败的受支持出版商,在转入 Web Access 前需请求用户确认;对于其他出版商则直接转入 Web Access。若用户显式指定了--route open_access,则在获取 OA 结果后终止后续路由。
出版商 API 凭证配置
采用按需(Lazy)配置原则,仅在路由首次需要凭证时才进行配置:
python3 scripts/configure_credentials.py set elsevier
python3 scripts/configure_credentials.py set springer_nature
python3 scripts/configure_credentials.py set ieee --fulltext-endpoint 'https://issued-endpoint.example/articles/{doi}'
python3 scripts/configure_credentials.py set elsevier --stdin
python3 scripts/configure_credentials.py show
python3 scripts/configure_credentials.py validate <provider>
python3 scripts/configure_credentials.py delete <provider>
python3 scripts/configure_credentials.py contact-email researcher@example.org
向用户提供官方注册链接:Elsevier https://dev.elsevier.com/、Springer Nature https://dev.springernature.com/docs/quick-start/api-access/、IEEE https://developer.ieee.org/member/register。
切勿主动要求用户在对话框中粘贴 API Key。若用户主动发送了出版商 API Key,应将其视为保存该 Key 的明确授权:不要拒绝、不要要求重置、也不要在回复中原文复述。请将其通过 configure_credentials.py set <provider> --stdin 传入,确保其不出现在命令行参数、日志、回复以及 Manifest 中,仅汇报脱敏后的确认信息与校验状态。若未提供 Key,本地隐式提示仍是首选路径。IEEE Metadata API 权限不等于付费全文下载权限;必须配置有授权的 Full-Text Access 端点/模板后,才能将 IEEE 判定为可通过 API 下载。凭证加密存储于 ~/.config/lit-dl/credentials.json,权限为 0600。
资源 URL 分流判别
在选择访问路径前,先对用户提供的 URL 进行分类:
cas.* / /authserver/login CAS / SSO 登录页;检查 service= 回调参数,登录后返回业务门户
idp/shibboleth / carsi CARSI / Shibboleth 机构联合认证路线
ezproxy / libproxy EZproxy 远程访问代理
webvpn / vpn WebVPN 路线
metaersp / metaauth / uas 图书馆资源聚合/统一身份认证门户
webofscience / sciencedirect 数据库或出版商入口;检查是否通过门户跳转访问
若 URL 是带有 service= 参数的登录页,应将回调 Host 视为目标资源服务,而不要将登录页本身当成整个工作流。例如 https://login.university.example/authserver/login?service=https://resources.university.example/callback 意味着身份认证服务在完成登录后会重定向回用户的资源门户。
机构特定域名判别
请根据用户浏览器地址栏中实际显示的域名进行核对并矫正,切勿假设预设配置涵盖所有学校。
图书馆主页 / 资源门户: library.example.edu, resources.example.edu
检索/数据库入口: webofscience.com, clarivate.com, cnki.net, sciencedirect.com, provider.example.com
统一身份认证 / SSO: sso.example.edu, cas.example.edu, idp.example.edu
高校联合认证 / WAYF: ds.carsi.edu.cn, wayf.example.org, shibboleth/openathens hosts
代理 / WebVPN: ezproxy.example.edu, webvpn.example.edu
将已配置的机构登录、联合认证、代理及数据库登录 Host 视为登录阶段的正常跳转节点,切勿将跳转至这些页面误判为最终失败。
行为边界与合规要求
仅使用用户合法的机构访问权限。严禁绕过付费墙(Paywall)、DRM 版权保护或双因素身份验证(2FA)。
人机验证自动优先原则:当用户已登录的 Chrome 会话中弹出可见的滑动验证、复选框、人机验证(Robot Check)或简单确认控件时,应优先在浏览器中自动尝试通过,再考虑请求用户人工干预。自动尝试需严格受控(在同一标签页上最多尝试两次),校验验证框消失后,从当前标签页继续后续流程。
- 滑块/拖拽验证(含知网拼图滑块):估算可见滑动距离并模拟平滑拖拽。
- ScienceDirect 机器人检查、托管式 Turnstile 及 reCAPTCHA 单选框阶段:尝试点击可见复选框一次。
- 简单的“继续”(Continue)、“验证”(Verify)等可见控制按钮:点击一次,随后重新检查页面状态。
用户接管交接(Handoff):仅在受控尝试失败,或页面需要密码/身份敏感输入(如点选图片验证码、扫码确认、短信/动态验证码 OTP、Passkey、硬件密钥或双因素认证)时,才立即请求用户接管。保持出现验证的标签页处于打开状态,严禁要求用户在聊天框中粘贴账号凭证或验证码。
避免无节制或无差别的批量下载。仅处理用户确认的明确文献列表,采用对数据源友好的速率限制与并发策略。




