2014-06-22 177 views
2

我知道我能得到用戶的IP地址是這樣的:如何從IP地址找出用戶的國家和城市?

remote_ip = request.remote_ip 

現在我想知道我怎樣才能從他的IP地址找出用戶的國家和城市?我發現這買它只是爲了國家:

http://api.hostip.info/country.php 

城市都可以找到這樣的:

http://api.hostip.info 

問題是,它顯示不正確的城市。我目前在世界上最大的城市之一,它說這是一個未知的城市。

從他的IP地址找出用戶的國家和城市的最佳方式是什麼?我正在尋找一個免費的解決方案,或者至少有一些非常便宜

謝謝:)

回答

0

您可以使用IP地址運行WHOIS。我不確定這是否可以通過代碼完成,但如果您只想爲少數IP執行此操作,那麼網站http://www.tools.whois.net/whoisbyip/可以提供包括城市位置在內的信息。我相信不同的網站提供不同深度的信息。

7

你可以嘗試geocoder gem通過IP地址來獲取位置:

Geocoder.search('5.18.186.107').first.city # => "Saint Petersburg" 
Geocoder.search('213.180.204.26').first.country # => "Turkey" 

,甚至使用內置功能W/O過渡性措施:

# somewhere in your action 
result = request.location # returns Geocoder::Result object 

默認情況下它使用IP http://freegeoip.net/服務解決,所以如果你不想使用任何額外的寶石,你可以使用REST API與它溝通。

0

另一個解決方案是在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"} 
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

相關問題