class GoogleSuggest

Constants

VERSION

Attributes

home_language[RW]
proxy[RW]
region[RW]

Public Class Methods

configuration() click to toggle source
# File lib/google_suggest.rb, line 18
def self.configuration
  @configuration ||= Configuration.new
end
configure() { |configuration| ... } click to toggle source
# File lib/google_suggest.rb, line 12
def self.configure
  yield configuration if block_given?

  configuration
end
new(options = {}) click to toggle source
# File lib/google_suggest.rb, line 26
def initialize(options = {})
  @home_language = self.class.configuration.home_language
  @proxy = self.class.configuration.proxy
  @region = options[:region] || self.class.configure.region
end
suggest_for(keyword, options = {}) click to toggle source
# File lib/google_suggest.rb, line 22
def self.suggest_for(keyword, options = {})
  new(options).suggest_for(keyword)
end

Public Instance Methods

suggest_for(keyword) click to toggle source
# File lib/google_suggest.rb, line 32
def suggest_for(keyword)
  query = {
    output: 'toolbar',
    hl: home_language,
    q: keyword
  }

  res = http_get('/complete/search', query)

  parse(res.body.to_s)
end

Private Instance Methods

google_host() click to toggle source
# File lib/google_suggest.rb, line 62
def google_host
  Region.host_for(region)
end
http() click to toggle source
# File lib/google_suggest.rb, line 46
def http
  if @proxy
    proxy_url = URI.parse(@proxy)
    http_class = Net::HTTP.Proxy(proxy_url.host, proxy_url.port)
  else
    http_class = Net::HTTP
  end
  http_class.new(google_host)
end
http_get(path, query) click to toggle source
# File lib/google_suggest.rb, line 56
def http_get(path, query)
  path = path + '?' + URI.encode_www_form(query)
  req = Net::HTTP::Get.new(path)
  http.request(req)
end
parse(doc) click to toggle source
# File lib/google_suggest.rb, line 66
def parse(doc)
  doc = doc.encode('UTF-8', 'Shift_JIS') unless doc.valid_encoding?
  xml = REXML::Document.new(doc)
  suggestions = REXML::XPath.match(xml, '/toplevel/CompleteSuggestion/suggestion').map do |suggest|
    suggest.attribute('data').value
  end

  suggestions
end