如何从IP地址找出用户的国家和城市?

use*_*086 3 geocoding ruby-on-rails ip-address ruby-on-rails-4

我知道我可以得到这样的用户IP地址:

remote_ip = request.remote_ip
Run Code Online (Sandbox Code Playgroud)

现在我想知道如何从他的IP地址找出用户的国家和城市?我发现这只买国家:

http://api.hostip.info/country.php
Run Code Online (Sandbox Code Playgroud)

城市可以这样找到:

http://api.hostip.info
Run Code Online (Sandbox Code Playgroud)

问题是它没有正确显示城市.我目前在世界上最大的城市之一,它说这是一个未知的城市.

从他的IP地址中找出用户所在国家和城市的最佳方法是什么?我正在寻找一个免费的解决方案或至少非常便宜的东西.

谢谢 :)

two*_*ves 10

你可以尝试geocoder gem来获取ip地址的位置:

Geocoder.search('5.18.186.107').first.city # => "Saint Petersburg"
Geocoder.search('213.180.204.26').first.country # => "Turkey"
Run Code Online (Sandbox Code Playgroud)

甚至使用没有过渡动作的内置功能:

# somewhere in your action
result = request.location # returns Geocoder::Result object
Run Code Online (Sandbox Code Playgroud)

默认情况下,它使用http://freegeoip.net/服务进行IP解析,因此如果您不想使用任何其他宝石,可以使用REST API与它进行通信.