2014-10-11 4 views
0

Недавно я погружаюсь в инструмент о драгоценных камнях.Как я могу перечислить все драгоценные камни в rubygems.org?

Функция должна получить адрес репозиции с данным списком драгоценных камней. Я хочу получить всю информацию о драгоценных камнях в rubygems.org и хранить их локально, а не искать их каждый раз. Поиск со списком gem name будет стоить слишком много времени.

Однако, я не смог найти ответ api на странице api rubygems.org. Есть apis для поиска с конкретным драгоценным камнем или список всех драгоценных камней, принадлежащих некоторым парням. Но не все перечисляют всю информацию о драгоценных камнях в rubygems.org.

Итак, как я могу перечислить все драгоценные камни в rubygems.org? Есть ли 3-сторонний api для этого?

+1

Попробуйте искать без значения в параметре запроса: 'https://rubygems.org/api /v1/search.json? запрос = '. Обратите внимание, что результат будет разбит на страницы. – mccannf

+0

@mccannf Учитывая, что пустой запрос получает все драгоценные камни! Интересно! Единственная проблема: ** В rubygems.org ** содержится более 80000 драгоценных камней, и каждый запрос получает только 30 драгоценных камней ... T_T В любом случае, это возможно. –

+1

Да, какой вопрос задает вопрос ** почему ** вы хотели бы получить все 80 000, а не просто полагаться на API поиска, чтобы найти нужные вам драгоценности. Даже если вам удалось получить все из них,% обновляется или изменяется все время! – mccannf

ответ

1

gem search без аргумента верните полный список всех драгоценных камней на RubyGems.org. Поскольку URLs на 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' не возвращает URL-адрес репо самоцветов. И 'gem search -d' занимает слишком много времени ... В любом случае, спасибо за вашу помощь. –

+0

@ 罗泽轩 Я обновил свой ответ на примере того, как создать URL-адрес главной страницы gem. Вы можете захотеть следовать одному шаблону для создания URL-адреса для загрузки. Получить адрес репозитория не так просто. Тем более, что есть много драгоценных камней без ссылки на репозиторий. – spickermann

Смежные вопросы