nature-downloader

nature-downloader

热门

当用户需要合法获取学术文献全文、通过机构权限访问知网(CNKI)、检索英文开源免费文献(OA)、使用出版商 API 接口获取资源、借助浏览器机构鉴权回退获取,或下载补充材料(SI / Supporting Information)时使用。

3.2万Star
1867Fork
更新于 2026/7/30
SKILL.md
只读
名称
nature-downloader
描述

当用户需要合法获取学术文献全文、通过机构权限访问知网(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 链接或返回内容包含 %PDF 标头;若不存在可用 PDF,报告 no_authorized_pdf_foundpdf_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_urlscripts/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 前,先识别其出版商:

  1. 收集 DOI、PMID、精确题名、文章 URL 或明确的文献列表,规范化其元数据与出版商信息。

  2. 若文献属于 Elsevier、Springer Nature 或 IEEE,且已配置可用凭证,优先尝试出版商 API。成功后记录 accessMode: publisher_apioa_status: not_checked_api_first;切勿仅为了打标签而多此一举去校验 OA 状态。

  3. 若出版商 API 失败,自动检索 PMC、Unpaywall、出版商官方 OA 页面、arXiv 及其他合法机构仓储或明确公开的 PDF URL。在 Manifest 记录中保留失败的 API 尝试日志。

  4. 对于其他英文出版商,在尝试 Web Access 前先检索这些合法 OA 来源。

  5. 对于精确题名或明确仅限 OA 的请求,优先使用:

    node scripts/batch_download.mjs --title "<exact title>" --open-access --no-si --out "<project>"
    

    当用户提供了已知的合法 OA PDF URL 时,使用 --pdf-url

  6. 校验下载的文件并记录来源。将成功下载的 PDF 标记为 open_access_downloaded

  7. 若未找到合法 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、硬件密钥或双因素认证)时,才立即请求用户接管。保持出现验证的标签页处于打开状态,严禁要求用户在聊天框中粘贴账号凭证或验证码。

避免无节制或无差别的批量下载。仅处理用户确认的明确文献列表,采用对数据源友好的速率限制与并发策略。