Module Ym4r::YahooMaps::BuildingBlock::Traffic
In: lib/ym4r/yahoo_maps/building_block/traffic.rb

Methods

get  

Classes and Modules

Class Ym4r::YahooMaps::BuildingBlock::Traffic::Result
Class Ym4r::YahooMaps::BuildingBlock::Traffic::ResultSet

Public Class methods

Send a request to the traffic REST API.

[Source]

    # File lib/ym4r/yahoo_maps/building_block/traffic.rb, line 11
11:         def self.get(param)
12:           unless param.has_key?(:street) or
13:               param.has_key?(:city) or
14:               param.has_key?(:state) or
15:               param.has_key?(:zip) or
16:               param.has_key?(:location) or
17:               (param.has_key?(:longitude) and param.has_key?(:latitude))
18:             raise MissingParameterException.new("Missing location data for the Yahoo! Maps Traffic service")
19:           end
20:           
21:           url = "http://api.local.yahoo.com/MapsService/V1/trafficData?appid=#{Ym4r::YahooMaps::APP_ID}&"
22:           url << "street=#{param[:street]}&" if param.has_key?(:street)
23:           url << "city=#{param[:city]}&" if param.has_key?(:city)
24:           url << "state=#{param[:state]}&" if param.has_key?(:state)
25:           url << "zip=#{param[:zip]}&" if param.has_key?(:zip)
26:           url << "location=#{param[:location]}&" if param.has_key?(:location)
27:           url << "latitude=#{param[:latitude]}&" if param.has_key?(:latitude)
28:           url << "longitude=#{param[:longitude]}&" if param.has_key?(:longitude)
29:           url << "image_type=#{param[:image_type]}&" if param.has_key?(:image_type) #defaults to PNG
30:           url << "image_height=#{param[:image_height]}&" if param.has_key?(:image_height) #defaults to 500
31:           url << "image_width=#{param[:image_width]}&" if param.has_key?(:image_width) #defaults to 620
32:           url << "zoom=#{param[:zoom]}&" if param.has_key?(:zoom) #defaults to 6
33:           url << "radius=#{param[:radius]}&" if param.has_key?(:radius)
34:           url << "include_map=#{param[:include_map]?1:0}&" if param.has_key?(:include_map)
35:           url << "severity=#{param[:severity]}&" if param.has_key?(:severity)
36:           url << "output=xml"
37:           
38:           begin
39:             xml = open(URI.encode(url)).read
40:           rescue OpenURI::HTTPError => error
41:             raise BadRequestException.new(error.to_s)
42:           rescue
43:             raise ConnectionException.new("Unable to connect to Yahoo! Maps Traffic REST service")
44:           end
45:           
46:           doc = REXML::Document.new(xml) 
47:           
48:           if doc.root.name == "Error"
49:             raise RateLimitExceededException.new("Rate limit exceeded for Yahoo! Maps Traffic REST service")
50:           else
51:             results = Traffic::ResultSet.new(Time.at(doc.root.elements['LastUpdateDate'].text.to_i),doc.root.elements['Warning'].nil? ? nil : doc.root.elements['Warning'].text)
52:             
53:             doc.root.elements.each('//Result') do |result|
54:               data = result.elements
55:               results << Traffic::Result.new(result.attributes['type'],
56:                                              data['Title'].text,
57:                                              data['Description'].text,
58:                                              data['Latitude'].text.to_f,
59:                                              data['Longitude'].text.to_f,
60:                                              data['Direction'].text,
61:                                              data['Severity'].text.to_i,
62:                                              Time.at(data['ReportDate'].text.to_i),
63:                                              Time.at(data['UpdateDate'].text.to_i),
64:                                              Time.at(data['EndDate'].text.to_i),
65:                                              data['ImageUrl'].nil? ? nil : data['ImageUrl'].text)
66:             end
67:             results
68:             
69:           end
70:         end

[Validate]