Rails gem GoogleAjax。如何进行更多搜索?

时间:2012-01-04 10:04:31

标签: ruby-on-rails google-ajax

使用:Rails 3.1.1

我正在使用googleajax gem在一个包含数千次搜索的脚本中执行Google搜索。

在大约20次搜索之后,我需要进行等待和重试的救援,因为看起来你连续执行的搜索量不会超过一定数量。大约一分钟后,重试使搜索继续进行10次搜索。结果是执行10次搜索大约需要一分钟,这使得脚本非常慢。

Google似乎可以阻止人们可以执行的搜索量(基于ip?基于googleajax推荐人?)但是有没有办法绕过它?

如果能够通过googleajax gem执行Google搜索而无需暂停等待,我该怎么办?我有哪些替代方案?

代码(切除了不重要的部分):

            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 个答案:

答案 0 :(得分:2)

抱歉,但我觉得你运气不好。 GoogleAjax使用现在的deprecated网络搜索API(它已被弃用了一年多),这可能在将来的任何时候消失,使得宝石无用。其次,网络搜索API和它的替换都限制在每天最大查询数量,超过该数量服务将停止响应 - 对于自定义搜索API,它是100 queries a day。要获得超过你必须支付的费用(费率是5美元/ 1000次搜索)。速率限制基于与单个API密钥关联的查询数。

我建议你:

  1. 使用google-api-client gem代替GoogleAjax(它使用自定义Web搜索API替换网络搜索API)
  2. 使用Google的API console
  3. 获取自定义搜索API的API密钥
  4. 考虑启用结算功能。每次搜索半分钱并不可怕,数千次搜索只需花费10美元

答案 1 :(得分:0)

我发现这个整洁的小宝石在我的最新项目中非常方便。 Ruby - Google Search API

以下是搜索图像的简单用例。 这基本上表明如果项目的名称不等于空字符串,则使用项目的名称返回前5个图像的搜索。如果项目的名称等于空字符串,因此为零,则不执行任何操作。

- if item.name != "" 
  - Google::Search::Image.new(:query => item.name).first(5).each do |image|
    = image_tag(image.uri)