$npx -y skills add Yuan1z0825/nature-skills --skill nature-downloaderUse when a user needs lawful academic full text, CNKI institutional access, English OA retrieval, publisher API access, institutional browser fallback, or supporting information downloads.
| 1 | # Nature Literature Downloader |
| 2 | |
| 3 | This skill routes literature through lawful open-access, publisher-API, CNKI institutional, and browser-based institutional providers. `scripts/batch_download.mjs` is the orchestration entry point; school configuration, publisher credentials, metadata/OA resolution, provider downloads, content validation, and manifests are separate modules. |
| 4 | |
| 5 | Verified routes are examples, not defaults. Every institution should start from the user's actual library resource URL, because resource portals, CAS callbacks, EZproxy, WebVPN, IP-authenticated database pages, and database detail pages reveal the live authorization path more reliably than a school name. |
| 6 | |
| 7 | > **SI confirmation gate — do this first.** Before downloading any PDF, CAJ, HTML, XML, archive, or attachment, ask whether the user wants Supporting Information. An explicit request for SI counts as yes; an explicit request for正文 only counts as no. Otherwise ask once for the whole batch. Run the downloader with exactly one of `--si` or `--no-si`. Without either flag the script returns `si_confirmation_required` and does not create the output directory. |
| 8 | |
| 9 | > **Main workflow.** Normalize the DOI/title and identify language and publisher before routing. Chinese literature always uses CNKI. For English Elsevier, Springer Nature, and IEEE articles with usable provider credentials, try the publisher API first and do not require an OA determination after a successful API download. If that API attempt fails, automatically check legitimate OA sources. Other English publishers check OA first, then use the institutional Web Access route when OA is unavailable. |
| 10 | |
| 11 | ```text |
| 12 | 规范化 DOI/题名并识别语言、出版商 |
| 13 | ├─ 中文文献:直接走 CNKI |
| 14 | └─ 英文文献 |
| 15 | ├─ Elsevier / Springer Nature / IEEE,且已配置有效 Key |
| 16 | │ ├─ 优先通过出版商 API 下载 |
| 17 | │ ├─ API 下载成功:结束,不强制判断 OA |
| 18 | │ └─ API 下载失败:检查文章级 OA,再走 PMC / Unpaywall / 合法仓储 |
| 19 | └─ 其他出版商 |
| 20 | ├─ 检查文章级 OA |
| 21 | └─ OA 不可用:走 Web Access 机构授权 |
| 22 | ``` |
| 23 | |
| 24 | > **Chinese literature is CNKI-only.** A Chinese title, `zh` metadata language, explicit CNKI source URL, or `--route cnki` must use CNKI even if another OA copy appears to exist. Reuse the user's current Chrome library/CNKI login state and prefer configured `discovery.cnki_url`. Never export cookies or collect the institutional password. |
| 25 | |
| 26 | > **Publisher API fallback.** A valid API key does not guarantee full-text entitlement. When an Elsevier, Springer Nature, or IEEE API attempt returns no entitlement or no usable full text, automatically try legitimate OA sources first. Return `api_fallback_confirmation_required` and ask once whether to use Web Access only after both the publisher API and OA routes fail. Do not switch to institutional Web Access automatically. |
| 27 | |
| 28 | > **Browser-state principle.** Authorized downloads depend on the exact browser profile where the user is logged in. If a proxy, CDP session, or browser automation tool opens a fresh profile or a different browser with no login state, do not treat the failure as missing library permission. Switch to a control path that reuses the user's active browser session, or ask the user to authenticate in the controlled browser instance. |
| 29 | |
| 30 | > **Format principle.** PDF, HTML full text, and database-native formats such as CAJ are different deliverables. If the user asks for PDF only, require a real PDF link or `%PDF` response and report `no_authorized_pdf_found` / `pdf_fetch_failed` when none exists. Do not save CAJ, HTML, or a login page as if it were a PDF. |
| 31 | |
| 32 | ## Download Intake and First-Run Configuration |
| 33 | |
| 34 | For every download request, first establish the paper list and ask: |
| 35 | |
| 36 | ```text |
| 37 | 是否同时下载这些文献的 Supporting Information(SI,补充材料)? |
| 38 | ``` |
| 39 | |
| 40 | Do metadata lookup before this question only when needed to identify the requested papers. Do not download files until the answer is known. Configure a library only when the selected route is CNKI or Web Access. Configure a publisher API only when the selected English article belongs to Elsevier, Springer Nature, or IEEE; an OA determination is not required before trying a configured provider API. |
| 41 | |
| 42 | ### Paid Library Resource Configuration |
| 43 | |
| 44 | Ask for the library resource URL the user actually uses: |
| 45 | |
| 46 | ```text |
| 47 | 请发你平时进入图书馆电子资源/数据库的平台链接。 |
| 48 | 可以是资源门户、数据库列表、Web of Science 入口、某个数据库详情页, |
| 49 | 或跳转到统一身份认证的登录链接。 |
| 50 | ``` |
| 51 | |
| 52 | Then infer the authorization route from the URL before saving config: |
| 53 | |
| 54 | ```bash |
| 55 | python3 scripts/configure_school.py infer "https://example.edu/library/resources" |
| 56 | python3 scripts/configure_school.py url "https://example.edu/library/resources" |
| 57 | python3 scripts/configure_school.py sho |