2012-01-04 3 views
1

사용 방법 : Rails 3.1.1레일즈 보석 GoogleAjax. 더 많은 검색을 수행하려면 어떻게해야합니까?

나는 googleajax gem을 사용하여 수천 개의 검색으로 구성된 스크립트에서 Google 검색을 수행하고 있습니다.

약 20 회 정도 검색 한 후에 일정한 양의 검색을 연속적으로 수행 할 수없는 것처럼 보일 때까지 기다렸다가 다시 시도하는 구조가 필요합니다. 약 1 분 후에 다시 시도하면 검색이 10 번 더 계속됩니다. 결과적으로 10 개의 검색을 수행하는 데 약 1 분이 걸리므로 스크립트가 매우 느려집니다.

Google은 googleajax 리퍼러를 기반으로 한 IP 기반 검색을 수행 할 수있는 검색 량이 차단 된 것으로 보이지만 그 방법이 있습니까?

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는 현재 deprecated 웹 검색 API (1 년 넘게 사용 중단 된 기능)를 사용합니다.이 API는 향후 언제든지 사라져 보석을 쓸모 없게 만들 수 있습니다. 둘째, 웹 검색 API와 그 대체 서비스는 하루 최대 쿼리 수로 제한됩니다. 서비스가 응답하지 않으면 사용자 정의 검색 API는 100 queries a day입니다. 그 이상을 얻으려면 지불해야합니다 (요금은 $ 5/1000 검색입니다). 속도 제한은 단일 API 키와 연관된 쿼리 수를 기반으로합니다.

난 당신이하는 것이 좋을 것 :

  1. 대신 GoogleAjax의 google-api-client 보석을 사용
  2. 사용자 정의 검색 API 키를 가져옵니다 (이것은 웹 검색 API를 대체하는 사용자 정의 웹 검색 API를 사용합니다) Google을 사용하는 API API console
  3. 결제 사용을 고려해보십시오. 수색 당 반 센트는 끔찍한 것이 아니며, 수천 개의 검색에 대해서만 $ 10의 비용이 부과 될 것입니다.
+0

감사합니다. Chris! 나는 이것이 대답이 될까 봐 걱정했다. 그러나 그 전에 GoogleAjax를 해킹하여 더 많은 검색을 수행 할 방법이없는 것입니까? 나는 IP 당 검색 수에 제한이 설정되어 있다고 생각한다. : nr 또는 무엇인가? 여러 대의 컴퓨터 (서버)에서 스크립트를 실행하거나 IP를 인위적으로 변경하면 더 효과적일까요? 아마도 추천 URL을 변경하십시오 (아직 스크립트가 실행되고 있기 때문에 아직 테스트하지 못했습니다)? 그것도 가능합니까, 아니면 Google이 내 손가락을 때 리겠습니까? 150,000 건의 검색 (질문하지 않음)이 있으며 지금 바로 그 금액을 지불하게되어 기쁩니다. – Christoffer

+0

필자의 이해는 제한이 API 키 기반을 기반으로한다는 것입니다 (이것은 새로운 API의 경우에만 해당 될 수 있음).API 키를 설정하지 않으면 고정 IP API와 같은 경우 IP 주소 당 제한이 있다고 가정합니다. –

0

Ive는 최신 프로젝트에서이 깔끔한 작은 보석을 발견했습니다. Ruby - Google Search API

다음은 이미지 검색을위한 간단한 사용 사례입니다. 기본적으로 항목의 이름이 빈 문자열과 같지 않으면 항목 이름을 사용하여 처음 5 개의 이미지 검색을 반환합니다. 항목의 이름이 빈 문자열과 같아서 nil이 아닌 경우 아무 것도하지 않습니다.

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