如何通过网络获取所有宝石名称?

时间:2014-01-13 14:47:31

标签: ruby rubygems

https://rubygems.org/api/v1/search.json只提供30个宝石,但在我的本地机器上,我可以使用gem list --remote获取所有宝石。

我阅读http://guides.rubygems.org/rubygems-org-api/,并且不存在可以获取列表中所有宝石的API。如何通过网络获取列表?或者,有人提供此吗?

我想要宝石的名字至少,但如果可能的话,我想得到名称和版本。

我认为gem list --remote是通过网络进行的,因此我可以获取所有宝石列表。

2 个答案:

答案 0 :(得分:12)

您可以使用https://rubygems.org/latest_specs.4.8.gz返回gzipped marshal dumped数组,如下所示:

[["abscss", Gem::Version.new("0.0.1"), "ruby"],
["absee", Gem::Version.new("1.0"), "ruby"],
["absentee_camper", Gem::Version.new("0.0.7"), "ruby"],
["absgit", Gem::Version.new("0.3.0"), "ruby"],
["absinthe", Gem::Version.new("0.0.3"), "ruby"],
["absolute", Gem::Version.new("0.0.5"), "ruby"],
["AbsoluteRenamer", Gem::Version.new("1.1.2"), "ruby"],
["AbsoluteRenamer-date", Gem::Version.new("0.1.0"), "ruby"]]

但如果您使用的是Ruby,我强烈建议您使用gem fetcher:

require 'rubygems/spec_fetcher'
fetcher = Gem::SpecFetcher.fetcher
tuples = fetcher.detect(:released) { true }

tuples现在是[Gem::NameTuple, Gem::Remote]的元组数组。你可以用这个做些什么的例子:

tuples[1337][0].name # => GraphvizR
tuples[1337][0].version.to_s # => "0.1.0"

答案 1 :(得分:1)

您可以通过列表提供page查询参数以进行分页,例如:

https://rubygems.org/api/v1/search.json?query=main&page=2