2014-10-11 17 views
0

最近我正在鑽研一個關於寶石的工具。如何列出rubygems.org中的所有寶石?

一項功能需要獲得給定寶石列表的回購地址。 我想要獲取rubygems.org中的所有寶石信息,並將它們存儲在本地,而不是每次都搜索它們。用寶石名稱列表搜索會花費太多時間。

但是,我在rubygems.org的api頁面找不到響應api。可以使用特定的寶石進行搜索,或者列出某些人擁有的所有寶石。但不是那個在rubygems.org上列出所有寶石信息。

那麼,如何列出rubygems.org中的所有寶石?有沒有任何3方api來做到這一點?

+1

嘗試沒有在查詢參數的值來搜索:'https://rubygems.org/api /v1/search.json?查詢='。請注意結果將分頁。 – mccannf 2014-10-11 10:26:49

+0

@mccannf給定一個空查詢獲取所有寶石!有趣!剩下的唯一問題是** ruby​​gems.org **中有超過80000個寶石,並且每個請求僅獲取30個寶石... T_T無論如何,這是一種可能的方式。 – 2014-10-11 14:01:05

+1

是的,哪種類型的問題**爲什麼**你會想要檢索所有80,000,而不只是依靠搜索API來找到你想要的寶石。即使您設法檢索所有人,也會一直在升級或更改%! – mccannf 2014-10-11 15:18:39

回答

1

gem search沒有參數返回RubyGems.org上所有gem的完整列表。由於對RubyGems的網址如下簡單的模式,你就可以開始玩弄寶石名稱以一個簡單的類是這樣的:

class GemRepo 
    attr_reader :names 

    def initialize 
    @names = [] 
    load_names 
    end 

    def size 
    @names.size 
    end 

    def urls 
    @names.map { |name| "https://rubygems.org/gems/#{name}" } 
    end 

private 
    def load_names 
    `gem search`.each_line do |line| 
     next if line.empty? || line.match(/\*/) 
     @names << line.split().first 
    end 
    end 
end 

gem_repo = GemRepo.new 

gem_repo.size 
# => 88679 
gem_repo.names 
# => ['-', '0mq', ..., 'Zzzzz', 'zzzzzz'] 
gem_repo.urls 
# => ['https://rubygems.org/gems/-', 'https://rubygems.org/gems/0mq', ..., 'https://rubygems.org/gems/Zzzzz', 'https://rubygems.org/gems/zzzzzz'] 
+0

Err ...「寶石搜索」的結果不會返回寶石的回購網址。 'gem search -d'需要太多時間...無論如何,感謝您的幫助。 – 2014-10-11 13:51:01

+0

@羅澤軒我用一個例子更新了我的答案,如何構建gem的主頁網址。您可能想要按照相同的模式創建下載網址。要接收存儲庫網址並不那麼簡單。特別是因爲有很多寶石沒有鏈接到存儲庫。 – spickermann 2014-10-11 22:59:02

相關問題