Communitygithub.com

Flyme886/nature-downloader

Utilisez cette compétence lorsque l'utilisateur a besoin de textes intégraux académiques légaux, d'accès institutionnel CNKI, de recherche en accès libre en anglais, d'accès via l'API de l'éditeur, de repli via navigateur institutionnel ou de téléchargements de documents complémentaires.

Qu'est-ce que nature-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. Elle est conçue pour les chercheurs et les étudiants qui doivent télécharger des articles académiques à partir de diverses sources, en respectant les conditions d'utilisation légales. Le point d'entrée principal est le script `scripts/batch_download.mjs`. La compétence prend en charge une large gamme de plates-formes, notamment Claude Code, Cursor et Codex, et peut être utilisée via une interface en ligne de commande. Elle fonctionne en demandant d'abord à l'utilisateur s'il souhaite télécharger des documents complémentaires, puis en normalisant l'identifiant de l'article (DOI ou titre) et en identifiant la langue et l'éditeur afin de déterminer la meilleure route de téléchargement. Pour la littérature chinoise, elle utilise CNKI. Pour la littérature anglaise d'Elsevier, Springer Nature et IEEE, elle tente d'abord l'API de l'éditeur, puis se rabat sur les sources en accès libre légitimes si l'API échoue, et enfin sur l'accès Web institutionnel si nécessaire. Pour les autres éditeurs anglais, elle vérifie d'abord les sources en accès libre, puis utilise l'accès Web institutionnel. La compétence insiste sur l'utilisation de l'état de connexion du navigateur de l'utilisateur pour garantir un accès autorisé, et elle ne demande jamais à l'utilisateur de fournir des mots de passe, des cookies ou des jetons de session. Elle comprend également une configuration de première exécution pour les identifiants de la bibliothèque et de l'API de l'éditeur.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add Flyme886/nature-downloader

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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 --si ou --no-si. Sans aucun des deux indicateurs, le script renvoie si_confirmation_required et 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 cnki doit 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 le discovery.cnki_url configuré. 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_required et 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 %PDF et signalez no_authorized_pdf_found / pdf_fetch_failed lorsqu'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 :

  1. 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.

  2. 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_api et oa_status: not_checked_api_first ; n'exécutez pas la résolution de l'accès libre uniquement pour étiqueter l'article.

  3. 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.

  4. Pour tous les autres éditeurs anglais, recherchez ces sources légitimes d'accès libre avant l'accès Web.

  5. 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-url lorsque l'utilisateur fournit une URL PDF légitime connue en accès libre.

  6. Vérifiez le fichier téléchargé et enregistrez la source. Marquez un PDF réussi comme open_access_downloaded.

  7. 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_access a é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 :

  1. 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.
  2. 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 via src/wizard.py.
  3. L'utilisateur s'est personnellement connecté à son établissement

…

[truncé pour la traduction]

Skills associés