web-dev-qa-db-ja.com

APIを介したnpmjsレジストリのクエリ

https://www.npmjs.com/ での検索の順序付けと表現力に満足していないことがよくあります。 https://api.npmjs.org/ または http://registry.npmjs.org/ を使用して、プログラムでサーバーをクエリする方法があるはずです。しかし、どのように?ドキュメントはどこにありますか?

(または、それを容易にするノードパッケージはありますか?SOはツールまたはパッケージの推奨事項ではないので、おそらくこれについて尋ねるべきではありませんが、何らかのツールがあれば、おそらくそこからAPIを読み取ることができます。)

27
MvG

もちろん、そのレジストリと通信するように設計されたツールが少なくとも1つあり、それはnpmコマンドラインツール自体です。その search は、たとえば、インデックスのローカルキャッシュコピーを更新し、それをフィルタリングすることから始まります。 pdate-index では、/-/allで終わるURLは明らかに特別であることがわかります。そして実際、それをregistry.npmjs.org(意図的にリンクとしてフォーマットされていない)に追加すると、125Mファイルをフェッチしますが、これはブラウザにとっては大きすぎるかもしれません。幸いなことに、キャッシュバージョンは~/.npm/registry.npmjs.org/-/all/.cache.jsonに保存されています。そこから、すべてのnownパッケージのリストを読むことができます。その後、このような各パッケージをさらに詳細に照会し続けることができます。

npm searchが明らかに精巧なスキームを使用していないという事実は、ここにはサーバーサイドAPIがあまりないことを示唆しています。

api.npmjs.orgに言及しているページをWebで検索すると、そこから ダウンロード数 を取得できることがわかりました。私が見つけた他のすべての文書は、その単一の機能を利用しています。

代替手段を探して、私はまた偶然見つけました npmsearch.com これはいくつかのより多目的な検索機能を提供し、 やや文書化されたAPI を持っています。

21
MvG

最近、本当に良いnpmクエリサイトが見つかりました https://npms.io 。また、さまざまなデータに基づいて各パッケージの品質ポイントシステムがあります。

また、プロジェクトについて収集された情報を使用して、各パッケージのスコアリングシステムも用意されます。最終スコアは、品質、メンテナンス、人気、性格の4つの異なる側面に基づいて計算されます。

APIドキュメント: https://api-docs.npms.io

14
Dipu Raj

常にNPMレジストリクライアントを使用できます: https://github.com/npm/npm-registry-client

これに目を通すと、APIのエンドポイントを取得できます。たとえば、パッケージのdist-tagsを取得するには、/-/ package/packageName/dist-tags 'に移動できます

Babel-core distタグを取得するには、 http://registry.npmjs.org/-/package/babel-core/dist-tags に移動します

13
Martin

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

これは、すべてのパッケージ名を取得する現在の方法です。

URL検索はhttp://registry.npmjs.com/-/v1/search?text=<searchstring>&size=20

8
Drazisil

パッケージが見つからない場合、または単にシェルスクリプトをハッキングしている場合は、レジストリの Registry API Docsgit repository Search 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ディレクトリ をチェックインして、次のようなその他の便利なものを探してください。

4
Josh Habdas

Sinopiaレジストリインターフェースをご覧ください: https://github.com/rlidwka/sinopia/blob/master/lib/index-api.js 。 npmクライアントのデフォルトのレジストリは https://registry.npmjs.org です(コンソールで試してください:npm config ls -l)。そのため、以下を試して(sinopia APIを参照)、react 15.0.2に関するデータを取得できます。

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

4
Ashish Kaila

私はこの答えが古いことを知っていますが、一部の人はまだそれが関連することを見つけることができます:

多くの検索の後、私は最終的に何かを見つけました。ソリューションは悪いドキュメントとそれが持っているより多くの欠点のためにNPM APIを使用しません

(これは、人気のあるパッケージ(必要なもの)のリストを取得するなど、検索以外の他の用途にも役立ちます)

解決策は Libraries.ioを使用することです

Libraries.ioは、36個のパッケージマネージャーの4,273,741個のパッケージのデータにインデックスを付けます。 (NPMを含む)From Libraries.ioページ

優れたAPIと優れたドキュメントがあり、いくつかの言語のAPIラッパーもあります


そのライブラリを使用するCLIプログラムをご覧ください here

2
Raz Luvaton

Api-npmノードモジュールを使用して、NPMレジストリを直接照会し、モジュールのすべての属性を取得し、任意の時間範囲の任意のモジュールの統計をダウンロードできます https://www.npmjs.com/package/api -npm

ドキュメントはここにあります: https://github.com/npm/registry/blob/master/docs/download-counts.md

エンドポイントをダウンロードする

すべてのパッケージまたは特定のパッケージについて、指定された期間の合計ダウンロードを取得します。

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

すべてのパッケージ、最終日:
/ downloads/point/last-day
すべてのパッケージ、特定の日付:
/ downloads/point/2014-02-01
パッケージ "express"、先週:
/ downloads/point/last-week/express
7日間のパッケージ「エクスプレス」:
/ downloads/point/2014-02-01:2014-02-08/express
パッケージ「@ slack/client」、過去30日間:
/ downloads/point/last-month/@ slack/client
パッケージ「jquery」、特定の月:
/ downloads/point/2014-01-01:2014-01-31/jquery
0
Oded Breiner