當使用者需要合法取得學術全文、CNKI 機構權限存取、英文 OA 檢索、出版商 API 存取、機構瀏覽器備用檢索方案或下載補充材料(SI)時使用。
Nature 文獻下載器
本 Skill 透過合法的開放獲取(Open Access)、出版商 API、CNKI 機構存取以及基於瀏覽器的機構提供者進行文獻路由下載。scripts/batch_download.mjs 是編排入口點;學校設定、出版商憑證、元資料/OA 解析、提供者下載、內容驗證與 Manifest 清單皆為獨立模組。
已驗證的路由僅供參考範例,非預設設定。每個機構都應從使用者實際使用的圖書館資源 URL 開始,因為資源入口網站、CAS 回呼(callback)、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 的圖書館/CNKI 登入狀態,並優先採用已設定的discovery.cnki_url。切勿匯出 Cookie 或收集機構密碼。
出版商 API 後備方案。 有效的 API Key 並不保證擁有全文存取權限。當 Elsevier、Springer Nature 或 IEEE 的 API 嘗試傳回無權限或無可用全文時,先自動嘗試合法的 OA 來源。只有在出版商 API 和 OA 路由皆失敗後,才傳回
api_fallback_confirmation_required並詢問一次是否使用 Web Access。請勿自動切換至機構 Web Access。
瀏覽器狀態原則。 授權下載取決於使用者登入的確切瀏覽器設定檔(profile)。若代理(proxy)、CDP 會話或瀏覽器自動化工具開啟了全新設定檔或未登入的相異瀏覽器,請勿將失敗歸因於缺少圖書館權限。應切換至能重複使用使用者目前瀏覽器工作階段的控制路徑,或要求使用者在受控的瀏覽器執行個體中完成驗證。
格式原則。 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 優先與開放獲取後備方案
對於英文文章,在決定何時解析文章級別 OA 前,請先識別其出版商:
-
收集 DOI、PMID、精確題名、文章 URL 或明確的論文清單,接著規範化其元資料與出版商資訊。
-
若文章屬於 Elsevier、Springer Nature 或 IEEE 且已設定可用的提供者憑證,優先嘗試該出版商 API。成功時,記錄
accessMode: publisher_api與oa_status: not_checked_api_first;切勿僅為了給文章打上標籤而額外執行 OA 解析。 -
若出版商 API 失敗,自動搜尋合法的 OA 來源,例如 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 憑證
採延遲設定,僅在路由首次需要憑證時才進行設定:
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 存取權限不等於付費全文存取權限;將 IEEE 視為可透過 API 下載前,必須先取得簽發的全文存取(Full-Text Access)端點/範本。密鑰儲存於 ~/.config/lit-dl/credentials.json,檔案權限為 0600。
資源 URL 分流研判
在選擇存取路徑前,先對使用者提供的 URL 進行分類:
cas.* / /authserver/login CAS / SSO 登入頁面;檢查 service= 回呼(callback),然後返回服務入口網站
idp/shibboleth / carsi CARSI / Shibboleth 機構存取路由
ezproxy / libproxy EZproxy 遠端存取代理
webvpn / vpn WebVPN 路由
metaersp / metaauth / uas 圖書館資源整合入口網站
webofscience / sciencedirect 資料庫或出版商入口;檢查是否是透過入口網站到達
若 URL 是帶有 service= 參數的登入頁面,請將回呼主機視為資源服務,不要將登入頁面當成整個工作流程。例如 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
將已設定的機構登入、聯盟驗證、代理及資料庫登入主機視為簽到/驗證階段。抵達這些頁面時切勿視為最終失敗。
邊界與規範
僅使用使用者合法的機構存取權限。切勿繞過付費牆、DRM 或雙重驗證(2FA)。
驗證優先原則: 當使用者的已驗證 Chrome 工作階段中出現可見的滑桿、核取方塊、機器人驗證或簡單驗證控制項時,先在瀏覽器中嘗試處理,再請求使用者介入。嘗試次數需受限(單一分頁最多嘗試兩次),確認驗證挑戰已消失,並在成功後於同一分頁繼續執行。
- 滑桿/拖曳驗證(包含 CNKI 拼圖滑桿):估算可見的滑動距離並模擬平滑拖曳。
- ScienceDirect 機器人檢查、受控 Turnstile 及 reCAPTCHA 核取方塊階段:嘗試點擊可見的核取方塊一次。
- 簡單的
Continue、Verify或等效的可見控制項:點擊一次,然後重新檢查頁面狀態。
使用者交接(Handoff): 僅在有限嘗試失敗後,或頁面需要密碼、身分相關輸入(如圖片選擇答案、QR Code 掃碼授權、簡訊/OTP 動態碼、Passkey、硬體金鑰或雙重驗證)時,立即請求使用者接手。保持出現驗證挑戰的分頁開啟,切勿要求使用者在對話中貼上憑證或驗證碼。
避免無限制或盲目地大量下載。僅處理使用者確認的明確論文清單,遵循對提供者友善的下載頻率控制。




