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)
410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 |
# File 'lib/ruby-web-search.rb', line 410 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.
386 387 388 |
# File 'lib/ruby-web-search.rb', line 386 def api_key @api_key end |
#country_code ⇒ Object
Returns the value of attribute country_code.
384 385 386 |
# File 'lib/ruby-web-search.rb', line 384 def country_code @country_code end |
#cursor ⇒ Object
Returns the value of attribute cursor.
386 387 388 |
# File 'lib/ruby-web-search.rb', line 386 def cursor @cursor end |
#custom_request_url ⇒ Object
Returns the value of attribute custom_request_url.
386 387 388 |
# File 'lib/ruby-web-search.rb', line 386 def custom_request_url @custom_request_url end |
#custom_search_engine_id ⇒ Object
Returns the value of attribute custom_search_engine_id.
385 386 387 |
# File 'lib/ruby-web-search.rb', line 385 def custom_search_engine_id @custom_search_engine_id end |
#filter ⇒ Object
Returns the value of attribute filter.
384 385 386 |
# File 'lib/ruby-web-search.rb', line 384 def filter @filter end |
#language_code ⇒ Object
Returns the value of attribute language_code.
384 385 386 |
# File 'lib/ruby-web-search.rb', line 384 def language_code @language_code end |
#query ⇒ Object
Returns the value of attribute query.
384 385 386 |
# File 'lib/ruby-web-search.rb', line 384 def query @query end |
#referer ⇒ Object
Returns the value of attribute referer.
385 386 387 |
# File 'lib/ruby-web-search.rb', line 385 def referer @referer end |
#request_url ⇒ Object
Returns the value of attribute request_url.
385 386 387 |
# File 'lib/ruby-web-search.rb', line 385 def request_url @request_url end |
#response ⇒ Object
Returns the value of attribute response.
386 387 388 |
# File 'lib/ruby-web-search.rb', line 386 def response @response end |
#safe_search ⇒ Object
Returns the value of attribute safe_search.
385 386 387 |
# File 'lib/ruby-web-search.rb', line 385 def safe_search @safe_search end |
#size ⇒ Object
Returns the value of attribute size.
386 387 388 |
# File 'lib/ruby-web-search.rb', line 386 def size @size end |
#start_index ⇒ Object
Returns the value of attribute start_index.
384 385 386 |
# File 'lib/ruby-web-search.rb', line 384 def start_index @start_index end |
#type ⇒ Object
Returns the value of attribute type.
385 386 387 |
# File 'lib/ruby-web-search.rb', line 385 def type @type end |
#version ⇒ Object
Returns the value of attribute version.
385 386 387 |
# File 'lib/ruby-web-search.rb', line 385 def version @version end |
Instance Method Details
#build_request ⇒ Object
432 433 434 435 436 437 438 439 440 441 442 443 444 445 |
# File 'lib/ruby-web-search.rb', line 432 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
447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 |
# File 'lib/ruby-web-search.rb', line 447 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
490 491 492 493 494 495 496 497 498 499 500 501 502 |
# File 'lib/ruby-web-search.rb', line 490 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
471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 |
# File 'lib/ruby-web-search.rb', line 471 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 |