出于研究目的,我想列出npm上 所有 可用的软件包。我怎样才能做到这一点?
https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md#get- all上的一些旧文档都提到了一个/-/all曾经工作过的端点,但是http://registry.npmjs.org/ -/现在全部返回{"message":"deprecated"}。
/-/all
{"message":"deprecated"}
http://blog.npmjs.org/post/157615772423/deprecating-the-all-registry- endpoint描述了http://registry.npmjs.org/-/all端点的弃用,并链接到位于https的教程另一种方法是://github.com/npm/registry/blob/master/docs/follower.md。该教程描述了如何设置一个“跟随者”来接收对NPM注册表所做的所有更改。老实说,这有点奇怪。显然,如果您想在整个NPM生态系统中进行数据分析,那么这样的关注者并不能替代获取所有软件包的列表。
但是,在该代码库中,我们了解到NPM注册表的核心是位于https://replicate.npmjs.com的CouchDB数据库。_all_docs端点未禁用,因此我们可以在https://replicate.npmjs.com/_all_docs上单击该端点,以获取一个JSON对象,该对象的rows属性包含NPM上所有公共软件包的列表。每个软件包如下所示:
_all_docs
rows
{"id":"lodash","key":"lodash","value":{"rev":"634-9273a19c245f088da22a9e4acbabc213"}},
在撰写本文时,该响应中有618660行,大约为64MB。
如果您想要有关某个特定程序包的更多数据,则可以使用其查找特定程序包key-例如,访问https://replicate.npmjs.com/lodash以获取包含Lodash的描述和发行历史之类的巨大文档。
key
如果要获取有关所有软件包的所有当前数据,则可以使用include_docs参数_all_docs在响应中包括实际的文档主体-即,单击https://replicate.npmjs.com/_all_docs?include_docs=true。准备好处理大量数据。
include_docs
如果您还需要这些CouchDB文档中未包含的更多数据(例如下载次数),那么值得细阅https://github.com/npm/registry/tree/master/docs中的文档,其中详细介绍了其他一些可用信息API- 需要注意的是,问题中指出,并不是那里记录的所有内容实际上都有效。