Skip to content

Commit

Permalink
REXml -> Nokogiri transition. Tests pass.
Browse files Browse the repository at this point in the history
  • Loading branch information
David N. Welton committed Jan 13, 2010
1 parent 5aa7243 commit a0f2fc1
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 43 deletions.
55 changes: 27 additions & 28 deletions lib/yahoo/local_search.rb
Expand Up @@ -59,40 +59,39 @@ def locate(query, location, results = nil)
def parse_response(xml) # :nodoc:
search_results = []

result_set_map_url = URI.parse xml.elements['ResultSet/ResultSetMapUrl'].text
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
parse_result_info(xml)

xml.elements['ResultSet'].each do |r|
next unless r.name == 'Result'
xml.xpath('//xmlns:Result').each do |r|
sr = Result.new

sr.id = r.attributes['id'].to_i
sr.title = r.elements['Title'].text
sr.address = r.elements['Address'].text
sr.city = r.elements['City'].text
sr.state = r.elements['State'].text
sr.phone = r.elements['Phone'].text
sr.latitude = r.elements['Latitude'].text.to_f
sr.longitude = r.elements['Longitude'].text.to_f

rating = r.elements['Rating']
sr.average_rating = rating.elements['AverageRating'].text.to_f
sr.total_ratings = rating.elements['TotalRatings'].text.to_i
sr.total_reviews = rating.elements['TotalReviews'].text.to_i
sr.last_review_date = Time.at rating.elements['LastReviewDate'].text.to_i
sr.last_review_intro = rating.elements['LastReviewIntro'].text

sr.distance = r.elements['Distance'].text.to_f
sr.url = URI.parse r.elements['Url'].text
sr.click_url = URI.parse r.elements['ClickUrl'].text
sr.map_url = URI.parse r.elements['MapUrl'].text
sr.business_url = URI.parse r.elements['BusinessUrl'].text
sr.business_click_url = URI.parse r.elements['BusinessClickUrl'].text
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.elements['Categories'].each do |c|
sr.categories[c.text] = c.attributes['id'].to_i
r.xpath('.//xmlns:Category').each do |c|
sr.categories[c.content] = c['id'].to_i
end

search_results << sr
Expand Down
10 changes: 5 additions & 5 deletions lib/yahoo/search.rb
Expand Up @@ -5,17 +5,17 @@

class Yahoo::Search < Yahoo

VERSION = '1.1.1'
VERSION = '2.0.0'

##
# Returns the total results available, returned, and first result position
# for the returned results.

def parse_result_info(xml) # :nodoc:
rs = xml.elements['ResultSet']
total_results_available = rs.attributes['totalResultsAvailable'].to_i
total_results_returned = rs.attributes['totalResultsReturned'].to_i
first_result_position = rs.attributes['firstResultPosition'].to_i
rs = xml.at_xpath('//xmlns:ResultSet')
total_results_available = rs['totalResultsAvailable'].to_i
total_results_returned = rs['totalResultsReturned'].to_i
first_result_position = rs['firstResultPosition'].to_i

return total_results_available, total_results_returned,
first_result_position
Expand Down
19 changes: 9 additions & 10 deletions lib/yahoo/web_search.rb
Expand Up @@ -37,18 +37,17 @@ def parse_response(xml) # :nodoc:
total_results_available, total_results_returned, first_result_position =
parse_result_info xml

xml.elements['ResultSet'].each do |r|
next if REXML::Text === r
xml.xpath('//xmlns:Result').each do |r|
result = Result.new

result.title = r.elements['Title'].text
result.summary = r.elements['Summary'].text
result.url = URI.parse r.elements['Url'].text
result.click_url = URI.parse r.elements['ClickUrl'].text
result.mime_type = r.elements['MimeType'].text
result.modification_date = Time.at r.elements['ModificationDate'].text.to_i
result.cache_url = URI.parse r.elements['Cache/Url'].text
result.cache_size = r.elements['Cache/Size'].text.to_i
result.title = r.at_xpath('xmlns:Title').content
result.summary = r.at_xpath('xmlns:Summary').content
result.url = URI.parse(r.at_xpath('xmlns:Url').content)
result.click_url = URI.parse(r.at_xpath('xmlns:ClickUrl').content)
result.mime_type = r.at_xpath('xmlns:MimeType').content
result.modification_date = Time.at(r.at_xpath('xmlns:ModificationDate').content.to_i)
result.cache_url = URI.parse(r.at_xpath('xmlns:Cache/xmlns:Url').content)
result.cache_size = r.at_xpath('xmlns:Cache/xmlns:Size').content.to_i

search_results << result
end
Expand Down
1 change: 1 addition & 0 deletions test/test_web_search.rb
@@ -1,4 +1,5 @@
require 'test/unit'
require 'rubygems'
require 'rc_rest/uri_stub'
require 'yahoo/web_search'

Expand Down

0 comments on commit a0f2fc1

Please sign in to comment.