Today I've encountered a small problem with Geokit:
Geokit::Geocoders::IpGeocoder.do_geocode('31.174.47.24')
Psych::SyntaxError: (<unknown>): invalid trailing UTF-8 octet at line 1 column 1
I don't have time (because it happened on production) to investigate this issue, so I've developed a quick temporary fix, which just removes invalid characters:
# Temporary workaround for crazy not UTF-8 characters in response
module Geokit
module Geocoders
class IpGeocoder
require 'iconv'
def self.parse_body(body)
yaml = YAML.load(Iconv.conv('ASCII//IGNORE', 'UTF8', body))
res = GeoLoc.new
res.provider = 'hostip'
res.city, res.state = yaml['City'].split(', ')
country, res.country_code = yaml['Country'].split(' (')
res.lat = yaml['Latitude']
res.lng = yaml['Longitude']
res.country_code.chop!
res.success = !(res.city =~ /\(.+\)/)
res
end
end
end
end