module Barometer # # Web Service: Geocode # # uses Google Maps Geocoding service # class WebService::Geocode < WebService def self.fetch(query) raise ArgumentError unless _is_a_query?(query) puts "geocoding: #{query.q}" if Barometer::debug? location = self.get( "http://maps.google.com/maps/geo", :query => { :gl => query.country_code, :output => "json", :q => query.q, :sensor => "false" }, :format => :json, :timeout => Barometer.timeout ) location = location['kml']['Response'] if (location && location['kml']) location ? (geo = Data::Geo.new(location)) : nil end end end