Sha256: 86fef098d6452458bf2560e7eac394efef903dd1e733ac00bbb1925fd88f1655

Contents?: true

Size: 956 Bytes

Versions: 2

Compression:

Stored size: 956 Bytes

Contents

module Geokit
  module Geocoders
    # Provides geocoding based upon an IP address.  The underlying web service is freegeoip.net
    class FreeGeoIpGeocoder < BaseIpGeocoder
      private

      def self.do_geocode(ip)
        return GeoLoc.new unless valid_ip?(ip)
        url = "http://freegeoip.net/xml/#{ip}"
        res = call_geocoder_service(url)
        return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
        parse :xml, res.body
      end

      XML_MAPPINGS = {
        :city         => 'City',
        :state        => 'RegionCode',
        :zip          => 'ZipCode',
        :country_code => 'CountryCode',
        :lat          => 'Latitude',
        :lng          => 'Longitude'
      }

      def self.parse_xml(xml)
        loc = GeoLoc.new
        loc.provider = 'freegeoip'
        set_mappings(loc, xml.elements['Response'], XML_MAPPINGS)
        loc.success = !!loc.city && !loc.city.empty?
        loc
      end
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
geokit-1.8.1 lib/geokit/geocoders/free_geo_ip.rb
geokit-1.8.0 lib/geokit/geocoders/free_geo_ip.rb