使用 GeoIP2 进行地理定位

GeoIP2 对象是 MaxMind geoip2 Python 库 的包装器。[1]

为了执行基于 IP 的地理定位,GeoIP2 对象需要 geoip2 Python 包以及 GeoIP Country 和/或 City 二进制格式的数据集(CSV 文件无效!),例如从 MaxMindDB-IP 网站下载。获取 GeoLite2-Country.mmdb.gzGeoLite2-City.mmdb.gz 文件,并将其解压缩到对应于 GEOIP_PATH 设置的目录中。

此外,建议安装 libmaxminddb C 库,以便 geoip2 可以利用 C 库更快的速度。

示例

以下是一个使用示例

>>> from django.contrib.gis.geoip2 import GeoIP2
>>> g = GeoIP2()
>>> g.country("google.com")
{'continent_code': 'NA',
 'continent_name': 'North America',
 'country_code': 'US',
 'country_name': 'United States',
 'is_in_european_union': False}
>>> g.city("72.14.207.99")
{'accuracy_radius': 1000,
 'city': 'Mountain View',
 'continent_code': 'NA',
 'continent_name': 'North America',
 'country_code': 'US',
 'country_name': 'United States',
 'is_in_european_union': False,
 'latitude': 37.419200897216797,
 'longitude': -122.05740356445312,
 'metro_code': 807,
 'postal_code': '94043',
 'region_code': 'CA',
 'region_name': 'California',
 'time_zone': 'America/Los_Angeles',
 'dma_code': 807,
 'region': 'CA'}
>>> g.lat_lon("salon.com")
(39.0437, -77.4875)
>>> g.lon_lat("uh.edu")
(-95.4342, 29.834)
>>> g.geos("24.124.1.80").wkt
'POINT (-97 38)'

API 参考

class GeoIP2(path=None, cache=0, country=None, city=None)[source]

GeoIP 对象不需要任何参数即可使用默认设置。但是,至少应使用 GEOIP_PATH 设置来设置 GeoIP 数据集所在位置的路径。可以使用以下初始化关键字来自定义任何默认值。

关键字参数

描述

path

GeoIP 数据所在的基本目录或城市或国家数据文件 (.mmdb) 所在的完整路径。假设城市和国家数据集都位于此目录中;覆盖 GEOIP_PATH 设置。

cache

打开 GeoIP 数据集时的缓存设置。可以是 (0, 1, 2, 4, 8) 中的整数,分别对应于 MODE_AUTOMODE_MMAP_EXTMODE_MMAPGEOIP_INDEX_CACHE MODE_MEMORY C API 设置。默认为 0 (MODE_AUTO)。

country

GeoIP 国家数据文件的名称。默认为 GeoLite2-Country.mmdb。设置此关键字将覆盖 GEOIP_COUNTRY 设置。

city

GeoIP 城市数据文件的名称。默认为 GeoLite2-City.mmdb。设置此关键字将覆盖 GEOIP_CITY 设置。

方法

实例化

classmethod GeoIP2.open(path, cache)[source]

此类方法根据给定的数据库路径和给定的缓存设置实例化 GeoIP 对象。

自版本 5.1 起已弃用: 改用 GeoIP2() 构造函数。

查询

以下所有查询例程都可以使用 IPv4AddressIPv6Address 实例、字符串 IP 地址或完全限定域名 (FQDN)。例如,IPv4Address("205.186.163.125")"205.186.163.125""djangoproject.com" 都是有效的查询参数。

GeoIP2.city(query)[source]

返回给定查询的城市信息的字典。字典中的一些值可能未定义 (None)。

GeoIP2.country(query)[source]

返回包含给定查询的国家代码和国家名称的字典。

GeoIP2.country_code(query)[source]

返回与查询对应的国家代码。

GeoIP2.country_name(query)[source]

返回与查询对应的国家名称。

坐标检索

GeoIP2.coords(query)[source]

返回坐标元组 (经度,纬度)。

自版本 5.1 起已弃用: 改用 GeoIP2.lon_lat()

GeoIP2.lon_lat(query)[source]

返回坐标元组 (经度,纬度)。

GeoIP2.lat_lon(query)[source]

返回坐标元组 (纬度,经度),

GeoIP2.geos(query)[source]

返回与查询对应的 Point 对象。

设置

GEOIP_PATH

指定 GeoIP 数据文件所在目录的字符串或 pathlib.Path 对象。此设置是必需的,除非在初始化 GeoIP2 对象时使用 path 关键字手动指定。

GEOIP_COUNTRY

GeoIP 国家数据文件的基文件名。默认为 'GeoLite2-Country.mmdb'

GEOIP_CITY

GeoIP 城市数据文件的基文件名。默认为 'GeoLite2-City.mmdb'

异常

exception GeoIP2Exception[source]

GeoIP2 包装器中发生错误时引发的异常。来自底层 geoip2 库的异常将原样传递。

脚注

返回顶部