Class: Yahoo::LocalSearch

Inherits:
Search
  • Object
show all
Defined in:
lib/yahoo/local_search.rb

Overview

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ LocalSearch

:nodoc:



26
27
28
29
30
31
# File 'lib/yahoo/local_search.rb', line 26

def initialize(*args) # :nodoc:
  @host = 'api.local.yahoo.com'
  @service_name = 'LocalSearchService'
  @version = 'V3'
  super
end

Instance Method Details

#locate(query, location, results = nil) ⇒ Object

Search for query at location and return up to results items.

If results is omitted then ten results are returned.

query is the location you are searching for.

location can be any of

  • city, state

  • city, state, zip

  • zip

  • street, city, state

  • street, city, state, zip

  • street, zip

locate returns five items, an Array of search results, a URI for a webpage with a map of the search results, the total number of results available, the number of results returned and the position of the first result in the overall search (one based).



53
54
55
56
57
# File 'lib/yahoo/local_search.rb', line 53

def locate(query, location, results = nil)
  params = { :query => query, :location => location }
  params[:results] = results unless results.nil?
  get :localSearch, params
end

#parse_response(xml) ⇒ Object

:nodoc:



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/yahoo/local_search.rb', line 59

def parse_response(xml) # :nodoc:
  search_results = []

  result_set_map_url = URI.parse(xml.at_xpath('//xmlns:ResultSetMapUrl').content)
  total_results_available, total_results_returned, first_result_position =
    parse_result_info(xml)

  xml.xpath('//xmlns:Result').each do |r|
    sr = Result.new

    sr.id        = r['id'].to_i
    sr.title     = r.at_xpath('xmlns:Title').content
    sr.address   = r.at_xpath('xmlns:Address').content
    sr.city      = r.at_xpath('xmlns:City').content
    sr.state     = r.at_xpath('xmlns:State').content
    sr.phone     = r.at_xpath('xmlns:Phone').content
    sr.latitude  = r.at_xpath('xmlns:Latitude').content.to_f
    sr.longitude = r.at_xpath('xmlns:Longitude').content.to_f

    rating = r.at_xpath('xmlns:Rating')
    sr.average_rating    = rating.at_xpath('xmlns:AverageRating').content.to_f
    sr.total_ratings     = rating.at_xpath('xmlns:TotalRatings').content.to_i
    sr.total_reviews     = rating.at_xpath('xmlns:TotalReviews').content.to_i
    sr.last_review_date  = Time.at rating.at_xpath('xmlns:LastReviewDate').content.to_i
    sr.last_review_intro = rating.at_xpath('xmlns:LastReviewIntro').content

    sr.distance           = r.at_xpath('xmlns:Distance').content.to_f
    sr.url                = URI.parse r.at_xpath('xmlns:Url').content
    sr.click_url          = URI.parse r.at_xpath('xmlns:ClickUrl').content
    sr.map_url            = URI.parse r.at_xpath('xmlns:MapUrl').content
    sr.business_url       = URI.parse r.at_xpath('xmlns:BusinessUrl').content
    sr.business_click_url = URI.parse r.at_xpath('xmlns:BusinessClickUrl').content

    sr.categories = {}
    r.xpath('.//xmlns:Category').each do |c|
      sr.categories[c.content] = c['id'].to_i
    end

    search_results << sr
  end

  return search_results, result_set_map_url, total_results_available,
         total_results_returned, first_result_position
end