【问题标题】:How to detect the country and city of a user accessing your site?如何检测访问您网站的用户所在的国家和城市?
【发布时间】:2009-07-22 05:01:11
【问题描述】:

您如何检测访问您网站的用户的原籍国?

我在我的网站上使用 Google Analytics,可以看到我有来自世界不同地区的用户。

但在我的应用程序中,我想根据国家和城市提供一些额外的自定义。

是否可以从浏览器中检测到此信息?这是一个 Python 网络应用程序。

【问题讨论】:

    标签: python web-applications


    【解决方案1】:

    获取并压缩 http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz,安装 GeoIP-Python 包(如果您在 Debian 或 Ubuntu 中,则安装 python-geoip 包,否则安装 http://geolite.maxmind.com/download/geoip/api/python/GeoIP-Python-1.2.4.tar.gz),然后执行以下操作:

    import GeoIP
    gi = GeoIP.open("GeoLiteCity.dat", GeoIP.GEOIP_INDEX_CACHE | GeoIP.GEOIP_CHECK_CACHE)
    print gi.record_by_name("74.125.67.100") # a www.google.com IP
    

    {'city': 'Mountain View', 'region_name': 'California', 'region': 'CA', 'area_code': 650, 'time_zone': 'America/Los_Angeles', 'longitude': -122.05740356445312, 'country_code3': 'USA', 'latitude': 37.419200897216797, 'postal_code': '94043', 'dma_code': 807, 'country_code': 'US', 'country_name': 'United States'}

    数据库是免费的 (http://geolite.maxmind.com/download/geoip/database/LICENSE.txt)。他们也卖。我认为这只会让您更频繁地更新。

    【讨论】:

    • 顺便说一下,如果您需要的话,还有一个仅限国家/地区的数据库要小得多 (geolite.maxmind.com/download/geoip/database/GeoLiteCountry/…)。只需更改文件,使用 GeoIP.GEOIP_STANDARD 代替上面的标志,然后调用 gi.country_code_by_name(ip)。
    • 感谢提醒,我使用过 maxmind 网络界面,但从未注意到他们之前提供免费数据库。
    • 仅供参考,如果您想获得比国家更高的准确性,MaxMind Precision 比 GeoLite 准确得多。对于国家/地区,几乎没有差异(在我的数据集中,来自 85 个国家/地区的 400 个地址-位置对)。我最近在我的硕士论文中研究了这个(还没有完成,所以现在不会链接到它)。
    • @GlennMaynard 是否可以转换成其他语言,比如中文?
    【解决方案2】:

    获取访问者的 IP 并使用 geolocation 网络服务进行检查(如果您希望在内部进行确定,则可以购买地理定位数据库)。

    【讨论】:

      【解决方案3】:

      Max mind 是要花钱的。 对于免费但仅限国家/地区代码的解决方案,您可以尝试: https://pypi.python.org/pypi/geoip2nation/

      pip 安装 geoip2nation

      from geoip import geoip
      r = geoip.GeoIp()
      r.load_memory()
      r.resolve("12.12.12.12").country_code
      #This prints : 'US'
      
      print r.resolve("123.44.57.4")
      #This prints : {'country': 'Korea (South)', 'host_name': '', 'country_code': 'KR'}
      
      r.resolve2("12.12.12.12")
      #This prints : 'US'
      

      【讨论】:

      • 这不是真的。 GeoLite 或 IP2Location LITE 可免费使用。
      • 页面底部有一个商业转折点:我们还提供商业再分发许可。
      猜你喜欢
      • 1970-01-01
      • 2022-06-15
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      相关资源
      最近更新 更多