Я хочу извлечь пользовательское название страны из IP-адресов посетителей.
Я мог получить IP-адрес с remote_ip
. Но каков мог быть самый легкий способ получить название страны?
Это не должно быть супер точно. Какая-либо рубиновая библиотека (драгоценный камень или плагин), чтобы сделать это?
Я хочу простое и легкое решение для этого.
Вы можете использовать Geoip
GEM.
Exection.RB
config.gem 'geoip'
Скачать GEOIIP.DAT.GZ
из http://www.maxmind.com/app/geoliteCountry
. Расстегните файл. Ниже приходит в # {Rails_root} / дБ
dir.
@geoip ||= GeoIP.new("#{RAILS_ROOT}/db/GeoIP.dat")
remote_ip = request.remote_ip
if remote_ip != "127.0.0.1" #todo: check for other local addresses or set default value
location_location = @geoip.country(remote_ip)
if location_location != nil
@model.country = location_location[2]
end
end
Самое простое - это использовать для этого существующий веб-сервис.
Есть плагины, которые позволяют делать гораздо больше, в том числе автоматически делать ваши модели геолокационными (geokit-rails), но если все, что вам нужно, это, например, код страны, просто отправьте HTTP Get на http://api.hostip. info/country.php
(есть и другие сервисы, но для этого не нужен API ключ) вернет его, например :
Net::HTTP.get_response(URI.parse('http://api.hostip.info/country.php'))
=> US
Или опрос http://api.hostip.info/ вернет полный XML-ответ с указанием города, широты, долготы и т.д.
Помните, что полученные результаты не на 100% точны. Например, сейчас я нахожусь во Франции, но сообщаю, как в Германии. Это относится практически к любому IP-сервису
.