Запрос реестра npmjs через api
Я нахожу, что часто не удовлетворен заказами и выразительностью запросов на https://www.npmjs.com/. Я предполагаю, что должен быть способ программно запросить сервер, используя https://api.npmjs.org/ или http://registry.npmjs.org/. Но как? Где находится документация?
(Или существуют пакеты node, чтобы облегчить это? Я знаю, что SO не касается рекомендаций по инструментам или пакетам, поэтому, возможно, я не должен спрашивать об этом, но если бы был какой-то инструмент, я мог бы читайте API также.)
Ответы
Ответ 1
Конечно, существует хотя бы один инструмент, предназначенный для общения с этим реестром, и это инструмент командной строки npm
. Его search, например, начинается с обновления локальной кешированной копии индекса, отфильтровывая это. В update-index можно прочитать, что URL-адрес, заканчивающийся на /-/all
, по-видимому, особенный. И действительно, добавление к registry.npmjs.org
(намеренно не отформатированное как ссылка) будет извлекать 125M файл, который может быть слишком большим для вашего браузера. К счастью, кэшированная версия сохраняется в ~/.npm/registry.npmjs.org/-/all/.cache.json
. Оттуда можно прочитать список всех доступных пакетов. Затем можно продолжить более подробно запрашивать каждый такой пакет.
Тот факт, что npm search
, по-видимому, использует более сложную схему, говорит о том, что здесь не так много api серверной стороны.
Поиск в Интернете для ссылок на страницы api.npmjs.org
Я нашел, что количество загрузок можно найти там. Все другие документы, которые я нашел, используют это единственное средство.
Ищем альтернативы, я также наткнулся на npmsearch.com, который предлагает несколько более универсальных поисковых средств и несколько задокументированный API.
Ответ 2
Существует действительно хороший сайт запросов npm https://npms.io, который я годами использую в своем веб-проекте. Это проект с открытым исходным кодом и поддерживает расширенный поиск с улучшенным качеством результатов по ключевым словам.
У них есть система оценки для каждого пакета, используя собранную информацию о проекте. Окончательная оценка рассчитывается на основе четырех различных аспектов качества, обслуживания, популярности и личности.
Он также имеет очень аккуратный REST API.
API Doc: https://api-docs.npms.io
Ответ 3
Вы всегда можете использовать клиент реестра NPM: https://github.com/npm/npm-registry-client.
Если вы просмотрите это, вы можете получить конечные точки для API.
например, чтобы получить метки dist для пакета, тогда вы можете перейти в /-/package/packageName/dist-tags '
Итак, чтобы получить теги distable babel-core, вы перейдете к http://registry.npmjs.org/-/package/babel-core/dist-tags
Ответ 4
https://skimdb.npmjs.com/registry/_all_docs
Это текущий метод для извлечения всех имен пакетов.
Поиск по URL http://registry.npmjs.com/-/v1/search?text=<searchstring>&size=20
Ответ 5
Если вы не можете найти пакет или просто взламываете сценарий оболочки, Документы реестра API в реестре git-репозиторий содержат подробную информацию об API поиска и квалификаторах поиска.
Если вы ищете самый популярный небезопасный пакет в открытом реестре, запустите:
wget -qO - "http://registry.npmjs.com/-/v1/search?text=is:insecure&popularity=1.0&size=1"
В приведенном выше примере используется квалификатор поиска is:insecure
без каких-либо дополнительных критериев текста, и он получает результаты size=1
, где popularity=1.0
(самый популярный).
Проверьте в каталоге docs
в репозитории ряд других полезных вещей, таких как:
Ответ 6
Взгляните на интерфейс реестра sinopia: https://github.com/rlidwka/sinopia/blob/master/lib/index-api.js. Реестр по умолчанию для клиента npm: https://registry.npmjs.org (попробуйте на консоли: npm config ls -l). Таким образом, вы можете попробовать следующее (ссылаясь на API sinopia), чтобы получить данные о реакции 15.0.2.
https://registry.npmjs.org/react/15.0.2
Ответ 7
Я знаю, что этот ответ старый, но некоторые все еще могут найти его актуальным, так:
После долгих поисков я наконец-то нашел что-то. Решение не использует API-интерфейс NPM из-за плохой документации и множества других недостатков, которые у него есть.
(Это будет полезно для других случаев, кроме поиска, например получения списка популярных пакетов (что мне было нужно))
Решение состоит в том, чтобы использовать Libraries.io
Libraries.io indexes data from 4,273,741 packages from 36 package managers. (Including NPM) From Libraries.io page
Он имеет отличный API и хорошую документацию, а также имеет оболочку API на нескольких языках
Вы можете посмотреть на мою программу CLI, которая использует эту библиотеку здесь
Ответ 8
Вы можете использовать модуль api-npm node, который напрямую запрашивает реестр NPM, и вы можете получить все атрибуты модуля и загрузить статистику любого модуля любого временного диапазона
https://www.npmjs.com/package/api-npm
Ответ 9
Документы уже здесь:
https://github.com/npm/registry/blob/master/docs/download-counts.md
Конечная точка загрузок
Получает общее количество загрузок за указанный период для всех пакетов или определенного пакета.
GET https://api.npmjs.org/downloads/point/{period}[/{package}]
Примеры
-
Все пакеты, последний день:
- /Загрузки/точка/последний день
- Все пакеты, конкретная дата:
- /Загрузки/точка /2014-02-01
- Пакет "Экспресс", на прошлой неделе:
- /Загрузки/точка/последняя неделя/экспресс
- Пакет "Экспресс", предоставляется 7-дневный срок:
- /Загрузки/точка /2014-02-01: 2014-02-08/выразить
- Пакет "@slack/client", последние 30 дней:
- /Загрузки/точка/последний месяц/@слабина/клиент
- Пакет "jquery", определенный месяц:
- /Загрузки/точка /2014-01-01: 2014-01-31/JQuery