【问题标题】:How to find out user's country and city from IP address?如何从IP地址中找出用户所在的国家和城市?
【发布时间】:2014-06-22 15:54:15
【问题描述】:

我知道我可以像这样获取用户的 IP 地址:

remote_ip = request.remote_ip

现在我想知道如何从他的 IP 地址中找出用户的国家和城市?我发现此购买仅适用于国家/地区:

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

可以这样找到城市:

http://api.hostip.info

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

从用户的 IP 地址找出用户所在国家和城市的最佳方法是什么?我正在寻找免费的解决方案,或者至少是非常便宜的解决方案。

谢谢你:)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 ip-address geocoding


    【解决方案1】:

    你可以尝试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 解析,因此如果您不想使用任何其他 gem,您可以使用 REST API 与其通信。

    【讨论】:

      【解决方案2】:

      你可以试试我的 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

      【讨论】:

        【解决方案3】:

        您可以使用 IP 地址运行 WHOIS。我不确定这是否可以通过代码完成,但如果您只想为几个 IP 执行此操作,那么像 http://www.tools.whois.net/whoisbyip/ 这样的网站可以提供包括城市位置在内的信息。我相信不同的网站提供不同深度的信息。

        【讨论】:

          【解决方案4】:

          另一种解决方案是将 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"}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-20
            • 1970-01-01
            • 2018-02-14
            • 1970-01-01
            • 2011-01-22
            • 1970-01-01
            • 2011-04-14
            • 1970-01-01
            相关资源
            最近更新 更多