Nature Literature Downloader
Cette compétence achemine la littérature via des fournisseurs légitimes d'accès libre, d'API d'éditeurs, d'accès institutionnel CNKI et de navigateur institutionnel. scripts/batch_download.mjs est le point d'entrée d'orchestration ; la configuration de l'établissement, les identifiants de l'éditeur, la résolution des métadonnées/de l'accès libre, les téléchargements des fournisseurs, la validation du contenu et les manifestes sont des modules séparés.
Les routes vérifiées sont des exemples, pas des valeurs par défaut. Chaque établissement doit partir de l'URL réelle de la ressource de bibliothèque de l'utilisateur, car les portails de ressources, les rappels CAS, EZproxy, WebVPN, les pages de bases de données authentifiées par IP et les pages de détails des bases de données révèlent le chemin d'autorisation en direct de manière plus fiable qu'un nom d'établissement.
Porte de confirmation SI – faites ceci en premier. Avant de télécharger un PDF, CAJ, HTML, XML, archive ou pièce jointe, demandez à l'utilisateur s'il souhaite les documents complémentaires (SI). Une demande explicite de SI compte comme oui ; une demande explicite de « 正文 » uniquement compte comme non. Sinon, demandez une fois pour l'ensemble du lot. Exécutez le téléchargeur avec exactement l'un des indicateurs
--siou--no-si. Sans aucun des deux indicateurs, le script renvoiesi_confirmation_requiredet ne crée pas le répertoire de sortie.
Flux de travail principal. Normalisez le DOI/le titre et identifiez la langue et l'éditeur avant le routage. La littérature chinoise utilise toujours CNKI. Pour les articles Elsevier, Springer Nature et IEEE en anglais avec des identifiants de fournisseur utilisables, essayez d'abord l'API de l'éditeur et n'exigez pas de détermination de l'accès libre après un téléchargement réussi via l'API. Si cette tentative d'API échoue, vérifiez automatiquement les sources légitimes d'accès libre. Pour les autres éditeurs anglais, vérifiez d'abord l'accès libre, puis utilisez la route d'accès Web institutionnel lorsque l'accès libre n'est pas disponible.
规范化 DOI/题名并识别语言、出版商
├─ 中文文献:直接走 CNKI
└─ 英文文献
├─ Elsevier / Springer Nature / IEEE,且已配置有效 Key
│ ├─ 优先通过出版商 API 下载
│ ├─ API 下载成功:结束,不强制判断 OA
│ └─ API 下载失败:检查文章级 OA,再走 PMC / Unpaywall / 合法仓储
└─ 其他出版商
├─ 检查文章级 OA
└─ OA 不可用:走 Web Access 机构授权
La littérature chinoise est uniquement CNKI. Un titre chinois, une langue de métadonnées
zh, une URL source CNKI explicite, ou--route cnkidoit utiliser CNKI même si une autre copie en accès libre semble exister. Réutilisez l'état de connexion actuel de la bibliothèque/CNKI de Chrome de l'utilisateur et préférez lediscovery.cnki_urlconfiguré. N'exportez jamais de cookies et ne collectez jamais le mot de passe institutionnel.
Repli de l'API de l'éditeur. Une clé API valide ne garantit pas l'accès au texte intégral. Lorsqu'une tentative d'API Elsevier, Springer Nature ou IEEE ne renvoie aucun droit d'accès ou aucun texte intégral utilisable, essayez automatiquement d'abord les sources légitimes d'accès libre. Renvoyez
api_fallback_confirmation_requiredet demandez une fois s'il faut utiliser l'accès Web uniquement après que les deux routes (API de l'éditeur et accès libre) ont échoué. Ne passez pas automatiquement à l'accès Web institutionnel.
Principe de l'état du navigateur. Les téléchargements autorisés dépendent du profil de navigateur exact dans lequel l'utilisateur est connecté. Si un proxy, une session CDP ou un outil d'automatisation de navigateur ouvre un nouveau profil ou un navigateur différent sans état de connexion, ne traitez pas l'échec comme un manque d'autorisation de la bibliothèque. Passez à un chemin de contrôle qui réutilise la session de navigateur active de l'utilisateur, ou demandez à l'utilisateur de s'authentifier dans l'instance de navigateur contrôlée.
Principe de format. Le PDF, le texte intégral HTML et les formats natifs de la base de données tels que CAJ sont des livrables différents. Si l'utilisateur demande uniquement un PDF, exigez un véritable lien PDF ou une réponse
no_authorized_pdf_found/pdf_fetch_failedlorsqu'aucun n'existe. N'enregistrez pas CAJ, HTML ou une page de connexion comme s'il s'agissait d'un PDF.
Réception du téléchargement et configuration de la première exécution
Pour chaque demande de téléchargement, établissez d'abord la liste des articles et demandez :
是否同时下载这些文献的 Supporting Information(SI,补充材料)?
Effectuez une recherche de métadonnées avant cette question uniquement lorsque cela est nécessaire pour identifier les articles demandés. Ne téléchargez pas de fichiers tant que la réponse n'est pas connue. Configurez une bibliothèque uniquement lorsque la route sélectionnée est CNKI ou Accès Web. Configurez une API d'éditeur uniquement lorsque l'article anglais sélectionné appartient à Elsevier, Springer Nature ou IEEE ; une détermination de l'accès libre n'est pas requise avant d'essayer une API de fournisseur configurée.
Configuration des ressources de la bibliothèque payante
Demandez l'URL de la ressource de bibliothèque que l'utilisateur utilise réellement :
请发你平时进入图书馆电子资源/数据库的平台链接。
可以是资源门户、数据库列表、Web of Science 入口、某个数据库详情页,
或跳转到统一身份认证的登录链接。
Déduisez ensuite la route d'autorisation de l'URL avant d'enregistrer la configuration :
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
La compétence distribuée ne contient aucun préréglage d'établissement. Si l'utilisateur ne peut pas fournir une URL de ressource, demandez-lui de localiser l'entrée de la bibliothèque/de la base de données de son établissement au lieu de deviner un domaine spécifique à l'établissement.
Le chemin de configuration par défaut est :
~/.config/lit-dl/school.json
Pour les tests ou les profils isolés, définissez :
LIT_DL_CONFIG_DIR=/path/to/configdir
Le téléchargeur lit cette configuration automatiquement. Si discovery.web_of_science_url est présent, scripts/batch_download.mjs l'utilise comme entrée Web of Science ; sinon, il revient à https://www.webofscience.com/wos/woscc/basic-search.
Pour la littérature chinoise, le téléchargeur lit également discovery.cnki_url lorsqu'il est présent. S'il est absent, scripts/batch_download.mjs --title "<中文题名>" revient à https://kns.cnki.net/kns8s/defaultresult/index.
Sortie fixe de l'intégration de l'API de l'éditeur
Immédiatement après que l'URL de la ressource de bibliothèque a été enregistrée, affichée et a passé le contrôle de santé, générez le bloc Markdown suivant exactement. Ne remplacez pas les URL par des résultats de recherche, ne raccourcissez pas l'avertissement IEEE et ne demandez pas à l'utilisateur de coller des clés API dans le chat.
请按需配置以下出版商,即可实现长期稳定下载
Elsevier API Key(必配置)
[https://dev.elsevier.com/apikey/manage](https://dev.elsevier.com/apikey/manage)
Website URL可以填写:[Yuan1z0825/nature-skills](https://github.com/Yuan1z0825/nature-skills)
Springer Nature Developer Portal(建议配置)
https://dev.springernature.com/#api
下滑依次点击**Subscribe now“-“free”**
IEEE Developer Registration(按需)
[https://developer.ieee.org/member/register](https://developer.ieee.org/member/register)
完成登录/注册及“学校邮箱”验证后,进入 API Management 页面复制 API Key。IEEE 普通 Key 仅用于 Metadata API,全文访问需要单独申请 Full-Text Access。
Arrêtez-vous après avoir affiché ce bloc et attendez que l'utilisateur termine l'enregistrement, la vérification de l'e-mail de l'établissement et la copie des clés API pertinentes. L'utilisateur effectue toutes les étapes de mot de passe, CAPTCHA, OTP, confirmation par e-mail, consentement et copie de clé API. Ne lisez jamais les clés API à partir de la page du navigateur et ne demandez pas à l'utilisateur de les envoyer via le chat.
API d'abord et repli sur l'accès libre
Pour un article en anglais, identifiez son éditeur avant de décider quand résoudre l'accès libre au niveau de l'article :
-
Collectez un DOI, PMID, titre exact, URL d'article ou une liste d'articles définie, puis normalisez ses métadonnées et son éditeur.
-
S'il appartient à Elsevier, Springer Nature ou IEEE et que des identifiants de fournisseur utilisables sont configurés, essayez d'abord cette API d'éditeur. En cas de succès, enregistrez
accessMode: publisher_apietoa_status: not_checked_api_first; n'exécutez pas la résolution de l'accès libre uniquement pour étiqueter l'article. -
Si l'API de l'éditeur échoue, recherchez automatiquement des sources légitimes d'accès libre telles que PMC, Unpaywall, les pages d'accès libre de l'éditeur, arXiv et d'autres référentiels légitimes ou URL PDF clairement ouvertes. Conservez la tentative d'API échouée dans le manifeste.
-
Pour tous les autres éditeurs anglais, recherchez ces sources légitimes d'accès libre avant l'accès Web.
-
Pour un titre exact ou une demande explicite d'accès libre uniquement, préférez :
node scripts/batch_download.mjs --title "<exact title>" --open-access --no-si --out "<project>"Utilisez
--pdf-urllorsque l'utilisateur fournit une URL PDF légitime connue en accès libre. -
Vérifiez le fichier téléchargé et enregistrez la source. Marquez un PDF réussi comme
open_access_downloaded. -
Si aucun texte intégral en accès libre légitime n'est trouvé, marquez
oa_not_found. Pour un éditeur pris en charge dont l'API a déjà échoué, demandez une confirmation avant l'accès Web. Pour un autre éditeur, continuez vers l'accès Web. Si--route open_accessa été explicitement demandé, arrêtez-vous après le résultat de l'accès libre.
Identifiants de l'API de l'éditeur
Après le bloc fixe d'intégration de l'éditeur, configurez uniquement les fournisseurs pour lesquels l'utilisateur a obtenu une clé API. Laissez l'utilisateur saisir chaque clé via l'invite locale masquée :
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 show
python3 scripts/configure_credentials.py validate <provider>
python3 scripts/configure_credentials.py delete <provider>
python3 scripts/configure_credentials.py contact-email [email protected]
Utilisez uniquement les URL d'enregistrement dans le bloc fixe d'intégration ci-dessus. Laissez l'utilisateur saisir chaque clé via l'invite locale masquée ; ne l'affichez jamais et ne la placez jamais dans un manifeste. L'accès à l'API Metadata IEEE n'est pas un accès payant au texte intégral ; exigez le point de terminaison/modèle d'accès au texte intégral émis avant de traiter IEEE comme téléchargeable via l'API. Les secrets sont stockés dans ~/.config/lit-dl/credentials.json avec le mode 0600.
Tri de l'URL de la ressource
Classez l'URL fournie par l'utilisateur avant de choisir un chemin d'accès :
cas.* / /authserver/login Page de connexion CAS / SSO ; inspectez le rappel service=, puis revenez au portail de service
idp/shibboleth / carsi Route institutionnelle CARSI / Shibboleth
ezproxy / libproxy Proxy d'accès à distance EZproxy
webvpn / vpn Route WebVPN
metaersp / metaauth / uas Portail d'agrégation des ressources de la bibliothèque
webofscience / sciencedirect Entrée de la base de données ou de l'éditeur ; vérifiez si elle a été atteinte via un portail
Si l'URL est une page de connexion avec un paramètre service=, traitez l'hôte de rappel comme le service de ressource et ne faites pas de la page de connexion l'ensemble du flux de travail. Par exemple, https://login.university.example/authserver/login?service=https://resources.university.example/callback signifie que le service d'identité revient au portail de ressources de l'utilisateur après l'authentification.
Domaines spécifiques à l'établissement
Confirmez par rapport à ce qui apparaît réellement dans la barre d'adresse de l'utilisateur ; corrigez-les pour chaque établissement au lieu de supposer qu'un préréglage est complet.
Accueil de la bibliothèque / agrégation : library.example.edu, resources.example.edu
Entrée de découverte / base de données : webofscience.com, clarivate.com, cnki.net, sciencedirect.com, provider.example.com
Identité unifiée / SSO : sso.example.edu, cas.example.edu, idp.example.edu
Fédération / WAYF : ds.carsi.edu.cn, wayf.example.org, shibboleth/openathens hosts
Proxy / WebVPN : ezproxy.example.edu, webvpn.example.edu
Traitez les hôtes de connexion institutionnelle configurés, de fédération, de proxy et de connexion à la base de données comme des étapes de connexion. Ne traitez pas le fait de les atteindre comme un échec final.
Limites
Utilisez uniquement l'accès institutionnel légitime de l'utilisateur. Ne contournez pas les paywalls, DRM ou l'authentification à deux facteurs.
Règle de vérification en premier : Lorsqu'un curseur visible, une case à cocher, un contrôle robot ou un contrôle de vérification simple apparaît dans la session Chrome authentifiée de l'utilisateur, essayez-le dans le navigateur avant de demander à l'utilisateur d'intervenir. Limitez la tentative (au maximum deux tentatives sur un onglet), vérifiez que le défi a disparu et continuez à partir du même onglet en cas de succès.
- Défis de curseur/glisser (y compris les curseurs de puzzle CNKI) : estimez la distance de déplacement visible et simulez un glissement progressif.
- Contrôles robot ScienceDirect, Turnstile géré et étapes de case à cocher reCAPTCHA : essayez la case à cocher visible une fois.
- Contrôles simples « Continuer », « Vérifier » ou équivalents visibles : cliquez une fois, puis revérifiez l'état de la page.
Transfert à l'utilisateur : Demandez à l'utilisateur uniquement après l'échec de la tentative limitée, ou immédiatement lorsque la page nécessite une entrée secrète ou portant une identité telle qu'une réponse de sélection d'image, une approbation QR, SMS/OTP, un mot de passe, une clé matérielle ou une authentification à deux facteurs. Gardez l'onglet défi ouvert et ne demandez jamais à l'utilisateur de coller des identifiants ou des codes dans le chat.
Évitez les téléchargements illimités ou indiscriminés. Traitez uniquement la liste d'articles définie confirmée par l'utilisateur, appliquez un rythme adapté au fournisseur et laissez une piste d'audit claire de ce qui a été téléchargé, d'où, et si des documents complémentaires ont été trouvés.
Ne demandez pas à l'utilisateur de coller des mots de passe institutionnels, des mots de passe de base de données, des codes OTP, des codes de récupération ou des jetons de session dans le chat ou le terminal. Si l'utilisateur propose un mot de passe, refusez et utilisez plutôt le flux de travail de connexion par transfert.
Exception pour les pages de connexion institutionnelle enregistrées : si l'utilisateur déclare explicitement que le navigateur a déjà rempli les identifiants et autorise le clic sur le bouton de connexion/confirmation visible, l'agent peut cliquer sur ce bouton une fois sur la page SSO / CAS / CARSI / Shibboleth institutionnelle attendue sans lire, copier ou taper aucun identifiant. Cette exception ne s'applique pas au CAPTCHA, à la connexion QR, SMS/OTP, aux contrôles anti-bot de l'éditeur, aux avertissements de consentement/sécurité ou à toute page en dehors du flux de connexion institutionnel attendu.
N'inspectez pas et n'exportez pas de cookies, mots de passe, stockage local, profils de navigateur ou fichiers de session. Utilisez uniquement le contexte de page déjà authentifié du navigateur.
Conditions préalables
Avant de tenter des téléchargements, confirmez les conditions qui s'appliquent à la branche d'accès sélectionnée.
Pour la branche d'accès libre uniquement, confirmez l'identifiant/la liste des articles cibles, le dossier de sortie, Node.js 22+ et Python 3 lorsque la vérification PDF en a besoin. N'exigez pas de configuration de bibliothèque ni de connexion de navigateur institutionnelle.
Pour la branche de bibliothèque payante, confirmez ces conditions :
- Le navigateur qui détient l'état de connexion à la bibliothèque/à la base de données de l'utilisateur est ouvert sur la machine de l'utilisateur.
- La configuration de l'établissement existe et est valide.
- Exécutez
python3 scripts/configure_school.py show. - Si elle est manquante, exécutez
python3 scripts/configure_school.py preset "<school name>"ou guidez l'utilisateur viasrc/wizard.py.
- Exécutez
- L'utilisateur s'est personnellement connecté à son établissement
…
[truncé pour la traduction]