web-dev-qa-db-fra.com

Interroger le registre npmjs via l'API

Je trouve que je suis souvent insatisfait de l'ordre et de l'expressivité des recherches sur https://www.npmjs.com/ . Je suppose qu'il devrait y avoir un moyen d'interroger par programme le serveur en utilisant https://api.npmjs.org/ ou http://registry.npmjs.org/ . Mais comment? Où est la documentation?

(Ou existe-t-il des packages de nœuds pour faciliter cela? Je sais SO ne concerne pas les recommandations d'outils ou de packages, alors peut-être que je ne devrais pas poser de questions à ce sujet également, mais s'il y avait un outil , Je pourrais probablement lire l'API à partir de cela également.)

27
MvG

Bien sûr, il existe au moins un outil conçu pour communiquer avec ce registre, et c'est l'outil de ligne de commande npm lui-même. Son recherche par exemple commence par mettre à jour une copie locale en cache de l'index, en le filtrant. Dans pdate-index on peut lire que l'URL se terminant par /-/all est apparemment spécial. Et en effet, en ajoutant cela à registry.npmjs.org (délibérément non formaté en tant que lien) récupérera un fichier 125M qui pourrait être trop pour votre navigateur. Heureusement, la version en cache est stockée disponible dans ~/.npm/registry.npmjs.org/-/all/.cache.json. De là, on peut lire une liste de tous les packages connus. On pourrait alors continuer à interroger chacun de ces packages plus en détail.

Le fait que npm search n'utilise apparemment aucun schéma plus élaboré suggère qu'il n'y a pas beaucoup d'api côté serveur ici.

Recherche sur le Web de pages mentionnant api.npmjs.org J'ai trouvé que le nombre de téléchargements peut être récupéré à partir de là. Tous les autres documents que j'ai trouvés utilisent cette seule installation.

À la recherche d'alternatives, je suis également tombé sur npmsearch.com qui offre des fonctionnalités de recherche plus polyvalentes et possède ne API quelque peu documentée .

21
MvG

Récemment trouvé un très bon site de requête npm https://npms.io . Ils ont également des systèmes de points de qualité pour chaque package basés sur diverses données.

Ils auront également un système de notation pour chaque paquet en utilisant les informations collectées sur le projet. Le score final est calculé sur la base de quatre aspects différents de la qualité, la maintenance, la popularité et les personnalités.

Doc API: https://api-docs.npms.io

14
Dipu Raj

Vous pouvez toujours utiliser le client de registre NPM: https://github.com/npm/npm-registry-client .

Si vous regardez à travers cela, vous pouvez obtenir les points de terminaison de l'API. Par exemple, pour obtenir les balises dist d'un package, vous pouvez aller dans/-/package/packageName/dist-tags '

Donc, pour obtenir les balises dist babel-core, vous devriez aller à http://registry.npmjs.org/-/package/babel-core/dist-tags

13
Martin

https://skimdb.npmjs.com/registry/_all_docs

Il s'agit d'une méthode courante pour extraire tous les noms de packages.

La recherche d'URL est http://registry.npmjs.com/-/v1/search?text=<searchstring>&size=20

8
Drazisil

Si vous ne trouvez pas de package ou si vous piratez simplement un script Shell, les Registry API Docs dans le registre git repository incluent des informations détaillées sur l'API de recherche et les qualificatifs de recherche.

Si vous recherchez le package non sécurisé le plus populaire lors de l'exécution du registre public:

wget -qO - "http://registry.npmjs.com/-/v1/search?text=is:insecure&popularity=1.0&size=1"

Ce qui précède utilise le is:insecure qualificatif de recherche sans critère de texte supplémentaire et captures size=1 résultats où popularity=1.0 (le plus populaire).

Vérifiez dans le répertoire docs dans le référentiel pour un certain nombre d'autres choses utiles telles que:

4
Josh Habdas

Jetez un œil à l'interface du registre sinopia: https://github.com/rlidwka/sinopia/blob/master/lib/index-api.js . Le registre par défaut du client npm est https://registry.npmjs.org (essayez-le sur la console: npm config ls -l). Vous pouvez donc essayer ce qui suit (en faisant référence à l'API sinopia) pour récupérer des données sur React 15.0.2

https://registry.npmjs.org/react/15.0.2

4
Ashish Kaila

Je sais que cette réponse est ancienne mais certains peuvent toujours la trouver pertinente:

Après de nombreuses recherches, j'ai finalement trouvé quelque chose. La solution n'utilise pas l'API NPM en raison de sa mauvaise documentation et de bien d'autres inconvénients.

(Cela sera utile pour d'autres utilisations autres que la recherche comme l'obtention d'une liste de packages populaires (ce dont j'avais besoin))

La solution consiste à utiliser Libraries.io

Libraries.io indexe les données de 4 273 741 packages de 36 gestionnaires de packages. (y compris NPM) De page Libraries.io

Il a une excellente API et une bonne documentation, il a également un wrapper API dans plusieurs langues


Vous pouvez jeter un oeil à mon programme CLI qui utilise cette bibliothèque ici

2
Raz Luvaton

Vous pouvez utiliser le module de nœud api-npm, il interroge directement le registre NPM et vous pouvez obtenir tous les attributs d'un module et télécharger les statistiques de n'importe quel module de n'importe quelle plage de temps https://www.npmjs.com/package/api -npm

1

Les documents sont ici maintenant: https://github.com/npm/registry/blob/master/docs/download-counts.md

Téléchargements du point de terminaison

Obtient le nombre total de téléchargements pour une période donnée, pour tous les packages ou un package spécifique.

GET https://api.npmjs.org/downloads/point/{period}[/{package}]

Exemples

Tous les packages, dernier jour:
/ téléchargements/point/dernier jour
Tous les packages, date précise:
/ téléchargements/point/2014-02-01
Forfait "express", la semaine dernière:
/ téléchargements/point/semaine dernière/express
Forfait "express", sur une période de 7 jours:
/ téléchargements/point/2014-02-01: 2014-02-08/express
Package "@ slack/client", 30 derniers jours:
/ téléchargements/point/le mois dernier/@ slack/client
Package "jquery", mois spécifique:
/ téléchargements/point/2014-01-01: 2014-01-31/jquery
0
Oded Breiner