Class: RubyWebSearch::Bing::Query
- Inherits:
-
Object
- Object
- RubyWebSearch::Bing::Query
- Defined in:
- lib/ruby-web-search.rb
Defined Under Namespace
Classes: Error
Constant Summary collapse
- SEARCH_BASE_URLS =
{ :web => "http://api.search.live.net/json.aspx?sources=web", }
Instance Attribute Summary collapse
-
#api_key ⇒ Object
Returns the value of attribute api_key.
-
#country_code ⇒ Object
Returns the value of attribute country_code.
-
#cursor ⇒ Object
Returns the value of attribute cursor.
-
#custom_request_url ⇒ Object
Returns the value of attribute custom_request_url.
-
#custom_search_engine_id ⇒ Object
Returns the value of attribute custom_search_engine_id.
-
#filter ⇒ Object
Returns the value of attribute filter.
-
#language_code ⇒ Object
Returns the value of attribute language_code.
-
#query ⇒ Object
Returns the value of attribute query.
-
#referer ⇒ Object
Returns the value of attribute referer.
-
#request_url ⇒ Object
Returns the value of attribute request_url.
-
#response ⇒ Object
Returns the value of attribute response.
-
#safe_search ⇒ Object
Returns the value of attribute safe_search.
-
#size ⇒ Object
Returns the value of attribute size.
-
#start_index ⇒ Object
Returns the value of attribute start_index.
-
#type ⇒ Object
Returns the value of attribute type.
-
#version ⇒ Object
Returns the value of attribute version.
Instance Method Summary collapse
- #build_request ⇒ Object
- #build_requests ⇒ Object
-
#execute ⇒ Object
Makes the request to Google if a larger set was requested than what is returned, more requests are made until the correct amount is available.
-
#execute_unthreaded ⇒ Object
Makes the request to Google if a larger set was requested than what is returned, more requests are made until the correct amount is available.
-
#initialize(options = {}) ⇒ Query
constructor
You can overwrite the query building process by passing the request url to use.
Constructor Details
#initialize(options = {}) ⇒ Query
You can overwrite the query building process by passing the request url to use.
Params
query<String>
api_key<String>
start_index<Integer>
size<Integer> number of results default: 10
filter
country_code<String> 2 letters language code for the country you want
to limit to
language_code<String> (Web only)
safe_search<String> active, moderate or off. Default: active (web only)
custom_search_engine_id<String> optional argument supplying the unique id for
the Custom Search Engine that should be used for the request (e.g., 000455696194071821846:reviews).
(web only)
407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 |
# File 'lib/ruby-web-search.rb', line 407 def initialize(={}) if [:custom_request_url] @custom_request_url = [:request_url] else @query = [:query] raise Bing::Query::Error, "You need to pass a query" unless @query @cursor = [:start_index] || 0 @filter = [:filter] @type = [:type] || :web @country_code = [:country_code] @language_code = [:language_code] @safe_search = [:safe_search] @custom_search_engine_id = [:custom_search_engine_id] @version = [:version] || "1" @referer = [:referer] || "http://github.com/mattetti/" @api_key = [:api_key] raise Bing::Query::Error, "You need to pass an api key" unless @api_key @size = [:size] || 10 end @response ||= Response.new(:query => (query || custom_request_url), :size => size) end |
Instance Attribute Details
#api_key ⇒ Object
Returns the value of attribute api_key.
383 384 385 |
# File 'lib/ruby-web-search.rb', line 383 def api_key @api_key end |
#country_code ⇒ Object
Returns the value of attribute country_code.
381 382 383 |
# File 'lib/ruby-web-search.rb', line 381 def country_code @country_code end |
#cursor ⇒ Object
Returns the value of attribute cursor.
383 384 385 |
# File 'lib/ruby-web-search.rb', line 383 def cursor @cursor end |
#custom_request_url ⇒ Object
Returns the value of attribute custom_request_url.
383 384 385 |
# File 'lib/ruby-web-search.rb', line 383 def custom_request_url @custom_request_url end |
#custom_search_engine_id ⇒ Object
Returns the value of attribute custom_search_engine_id.
382 383 384 |
# File 'lib/ruby-web-search.rb', line 382 def custom_search_engine_id @custom_search_engine_id end |
#filter ⇒ Object
Returns the value of attribute filter.
381 382 383 |
# File 'lib/ruby-web-search.rb', line 381 def filter @filter end |
#language_code ⇒ Object
Returns the value of attribute language_code.
381 382 383 |
# File 'lib/ruby-web-search.rb', line 381 def language_code @language_code end |
#query ⇒ Object
Returns the value of attribute query.
381 382 383 |
# File 'lib/ruby-web-search.rb', line 381 def query @query end |
#referer ⇒ Object
Returns the value of attribute referer.
382 383 384 |
# File 'lib/ruby-web-search.rb', line 382 def referer @referer end |
#request_url ⇒ Object
Returns the value of attribute request_url.
382 383 384 |
# File 'lib/ruby-web-search.rb', line 382 def request_url @request_url end |
#response ⇒ Object
Returns the value of attribute response.
383 384 385 |
# File 'lib/ruby-web-search.rb', line 383 def response @response end |
#safe_search ⇒ Object
Returns the value of attribute safe_search.
382 383 384 |
# File 'lib/ruby-web-search.rb', line 382 def safe_search @safe_search end |
#size ⇒ Object
Returns the value of attribute size.
383 384 385 |
# File 'lib/ruby-web-search.rb', line 383 def size @size end |
#start_index ⇒ Object
Returns the value of attribute start_index.
381 382 383 |
# File 'lib/ruby-web-search.rb', line 381 def start_index @start_index end |
#type ⇒ Object
Returns the value of attribute type.
382 383 384 |
# File 'lib/ruby-web-search.rb', line 382 def type @type end |
#version ⇒ Object
Returns the value of attribute version.
382 383 384 |
# File 'lib/ruby-web-search.rb', line 382 def version @version end |
Instance Method Details
#build_request ⇒ Object
429 430 431 432 433 434 435 436 437 438 439 440 441 442 |
# File 'lib/ruby-web-search.rb', line 429 def build_request if custom_request_url custom_request_url else @request_url = "#{SEARCH_BASE_URLS[type]}&query=#{CGI.escape(query)}" @request_url << "&appid=#{api_key}" @request_url << "&web.count=#{size}" if size @request_url << "&web.offset=#{cursor}" if cursor > 0 @request_url << "&market=#{language_code}-#{country_code}" if language_code && country_code puts request_url if $RUBY_WEB_SEARCH_DEBUG request_url end end |
#build_requests ⇒ Object
444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 |
# File 'lib/ruby-web-search.rb', line 444 def build_requests if custom_request_url requests = [custom_request_url] else requests = [] # limiting to 10 responses per request (size / 10.to_f).ceil.times do |n| url = "#{SEARCH_BASE_URLS[type]}&query=#{CGI.escape(query)}" url << "&appid=#{api_key}" url << "&web.count=#{size}" if size url << "&market=#{language_code}-#{country_code}" if language_code && country_code url << "&web.offset=#{cursor}" if cursor > 0 @cursor += 10 requests << url end puts requests.inspect if $RUBY_WEB_SEARCH_DEBUG requests end end |
#execute ⇒ Object
Makes the request to Google if a larger set was requested than what is returned, more requests are made until the correct amount is available
487 488 489 490 491 492 493 494 495 496 497 498 499 |
# File 'lib/ruby-web-search.rb', line 487 def execute threads = build_requests.map do |req| Thread.new do curl_request = ::Curl::Easy.new(req){ |curl| curl.headers["Referer"] = referer } curl_request.perform JSON.load(curl_request.body_str) end end threads.each do |t| response.process(t.value) end response.limit(size) end |
#execute_unthreaded ⇒ Object
Makes the request to Google if a larger set was requested than what is returned, more requests are made until the correct amount is available
468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 |
# File 'lib/ruby-web-search.rb', line 468 def execute_unthreaded @curl_request ||= ::Curl::Easy.new(){ |curl| curl.headers["Referer"] = referer } @curl_request.url = build_request @curl_request.perform results = JSON.load(@curl_request.body_str) response.process(results) @cursor = response.results.size - 1 if ((cursor + 1) < size && custom_request_url.nil?) puts "cursor: #{cursor} requested results size: #{size}" if $RUBY_WEB_SEARCH_DEBUG execute_unthreaded else response.limit(size) end end |