Рельсы драгоценный камень GoogleAjax. Как я могу выполнить больше поисков?

Использование: Rails 3.1.1

Я использую гем googleajax для выполнения поиска Google в скрипте с несколькими тысячами поисков.

Приблизительно после 20 поисков или около того, мне нужно иметь спасение, которое ждет и повторяет попытку, так как кажется, что вы не можете выполнить более определенного количества поисков подряд. Примерно через минуту повторная попытка заставит поиск продолжить еще 10 поисков. В результате 10 запросов выполняются за одну минуту, что делает скрипт невероятно медленным.

Кажется вероятным, что у Google есть блок в количестве запросов, которые можно выполнить (на основе ip?, основанного на реферере googleajax?), Но есть ли способ обойти это?

Что я могу сделать, чтобы иметь возможность выполнять поиск в Google через гем googleajax без необходимости все время останавливаться и ждать? Какие у меня есть альтернативы?

Код (с вырезанными неважными частями):

            begin
              puts "Searching with " + gsquery
                results = GoogleAjax::Search.web(gsquery)[:results]
                if results.count > 0
                  puts "#{results.count} results found for #{page.name}. Registering the connection!"
                end
            rescue
                puts "Try again in 3 sec"
                sleep 3
                retry
            rescue Timeout::Error 
              puts "Timeout Error, sleep 15 sec"
              sleep 15
              retry
            end

2 ответа

Решение

Извините, но я думаю, что вам не повезло. GoogleAjax использует устаревший API веб-поиска (он больше не поддерживается уже более года), который может исчезнуть в любой момент в будущем, что сделает этот камень бесполезным. Во-вторых, и API веб-поиска, и его замена ограничены максимальным количеством запросов в день, после которого служба просто перестает отвечать - это 100 запросов в день для пользовательского API поиска. Чтобы получить больше, вам придется заплатить (ставка составляет $5 / 1000 поисков). Ограничение скорости зависит от количества запросов, связанных с одним ключом API.

Я бы посоветовал вам:

  1. Используйте гем google-api-client вместо GoogleAjax (он использует API пользовательского веб-поиска, который заменяет API веб-поиска)
  2. Получить ключ API для пользовательского API поиска с помощью консоли API Google
  3. Рассмотрите возможность включения биллинга. Половина цента за поиск не страшна, а за несколько тысяч поисков обойдется вам всего в 10 долларов

Я нашел этот аккуратный маленький драгоценный камень очень удобным в моем последнем проекте. Ruby - Google Search API

Вот простой пример использования для поиска изображения. В основном это говорит о том, что если имя элемента не равно пустой строке, вернуть поиск первых 5 изображений, используя имя элемента. Если имя элемента равно пустой строке и, следовательно, равно нулю, ничего не делать.

- if item.name != "" 
  - Google::Search::Image.new(:query => item.name).first(5).each do |image|
    = image_tag(image.uri)
Другие вопросы по тегам