我知道我可以获得用户的IP地址:
remote_ip = request.remote_ip
现在我想知道如何从他的IP地址中找出用户的国家和城市?我发现这只买国家:
http://api.hostip.info/country.php
城市可以这样找到:
http://api.hostip.info
问题是它没有正确显示城市。我目前在世界上最大的城市之一,它说这是一个未知的城市。
从他的IP地址中找出用户所在国家/地区和城市的最佳方法是什么?我正在寻找一个免费的解决方案,或者至少是非常便宜的东西。
谢谢:)
答案 0 :(得分:10)
您可以尝试geocoder gem通过IP地址获取位置:
Geocoder.search('5.18.186.107').first.city # => "Saint Petersburg"
Geocoder.search('213.180.204.26').first.country # => "Turkey"
甚至使用没有过渡操作的内置功能:
# somewhere in your action
result = request.location # returns Geocoder::Result object
默认情况下,它使用http://freegeoip.net/服务进行IP解析,因此如果您不想使用任何其他宝石,可以使用REST API与其进行通信。
答案 1 :(得分:1)
您可以尝试我的API,https://ipinfo.io。它默认返回JSON,包含许多不同的字段:
$ curl ipinfo.io
{
"ip": "24.6.61.239",
"hostname": "c-24-6-61-239.hsd1.ca.comcast.net",
"city": "Mountain View",
"region": "California",
"country": "US",
"loc": "37.3845,-122.0881",
"org": "AS7922 Comcast Cable Communications, LLC",
"postal": "94040"
}
每天最多可提供1000个请求。有关详细信息,请参阅https://ipinfo.io/developers。
答案 2 :(得分:0)
您可以使用IP地址运行WHOIS。我不确定这是否可以通过代码完成,但如果您只想为几个IP执行此操作,那么http://www.tools.whois.net/whoisbyip/等网站可以提供包括城市位置在内的信息。我相信不同的网站提供不同深度的信息。
答案 3 :(得分:0)
另一个解决方案是将ruby gem用于Yandex定位器(https://tech.yandex.ru/locator/)。 Yandex定位器是一种在圆圈描绘的区域中查找移动设备的服务。该服务返回经度,纬度和精度。 https://github.com/sergey-chechaev/yandex_locator
client = YandexLocator::Client.new(api_key: 'api key', version: '1.0')
result = client.lookup(ip: { address_v4: '178.247.233.3' })
result.position
# => {"altitude"=>0.0, "altitude_precision"=>30.0, "latitude"=>41.00892639160156, "longitude"=>28.96711158752441, "precision"=>100000.0, "type"=>"ip"}