Geolocation with GeoIP

GeoIP对象是MaxMind GeoIP C API的ctypes包装器。[1]

为了执行基于IP的地理位置,GeoIP对象需要使用二进制格式的GeoIP C库和GeoIP 国家/地区城市数据集CSV文件将不工作!)。这些数据集可以从MaxMind下载抓取GeoLiteCountry/GeoIP.dat.gzGeoLiteCity.dat.gz文件,并将其解压缩到与您设置的GEOIP_PATH对应的目录中在您的设置。有关更多详细信息,请参阅下面的示例和参考。

Example

假设您安装了GeoIP C库,以下是其使用示例:

>>> from django.contrib.gis.geoip import GeoIP
>>> g = GeoIP()
>>> g.country('google.com')
{'country_code': 'US', 'country_name': 'United States'}
>>> g.city('72.14.207.99')
{'area_code': 650,
'city': 'Mountain View',
'country_code': 'US',
'country_code3': 'USA',
'country_name': 'United States',
'dma_code': 807,
'latitude': 37.419200897216797,
'longitude': -122.05740356445312,
'postal_code': '94043',
'region': 'CA'}
>>> g.lat_lon('salon.com')
(37.789798736572266, -122.39420318603516)
>>> g.lon_lat('uh.edu')
(-95.415199279785156, 29.77549934387207)
>>> g.geos('24.124.1.80').wkt
'POINT (-95.2087020874023438 39.0392990112304688)'

GeoIP Settings

GEOIP_PATH

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

GEOIP_LIBRARY_PATH

指定GeoIP C库位置的字符串。通常,仅当GeoIP C库位于非标准位置(例如,/home/sue/lib/libGeoIP.so)时,才会使用此设置。

GEOIP_COUNTRY

用于GeoIP国家/地区数据文件的基本名称。默认为'GeoIP.dat'

GEOIP_CITY

用于GeoIP城市数据文件的基本名称。默认为'GeoLiteCity.dat'

GeoIP API

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

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

关键字参数描述
path基本目录到GeoIP数据所在的位置或城市或国家/地区数据文件(.dat)所在的完整路径。假设城市和国家数据集都位于此目录中;覆盖GEOIP_PATH设置属性。
cache打开GeoIP数据集时的缓存设置,并且可以是与GEOIP_STANDARDGEOIP_MEMORY_CACHEGEOIP_CHECK_CACHEGEOIP_INDEX_CACHE GeoIPOptions C API设置。默认为0(GEOIP_STANDARD)。
countryGeoIP国家/地区数据文件的名称。默认为GeoIP.dat设置此关键字将覆盖GEOIP_COUNTRY设置属性。
cityGeoIP城市数据文件的名称。默认为GeoLiteCity.dat设置此关键字将覆盖GEOIP_CITY设置属性。

GeoIP Methods

Querying

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

GeoIP.city(query)

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

GeoIP.country(query)

返回具有给定查询的国家/地区代码和国家/地区的字典。

GeoIP.country_code(query)

仅返回与查询对应的国家/地区代码。

GeoIP.country_name(query)

仅返回与查询对应的国家/地区名称。

Coordinate Retrieval

GeoIP.coords(query)

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

GeoIP.lon_lat(query)

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

GeoIP.lat_lon(query)

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

GeoIP.geos(query)

返回与查询对应的django.contrib.gis.geos.Point对象。

Database Information

GeoIP.country_info

此属性返回有关GeoIP国家/地区数据库的信息。

GeoIP.city_info

此属性返回有关GeoIP城市数据库的信息。

GeoIP.info

此属性返回有关所有GeoIP数据库(城市和国家/地区)以及GeoIP C库版本(如果支持)的信息。

GeoIP-Python API compatibility methods

这些方法的存在,以简化与使用MaxMind的现有Python API的任何代码的兼容性。

classmethod GeoIP.open(path, cache)

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

GeoIP.region_by_addr(query)
GeoIP.region_by_name(query)
GeoIP.record_by_addr(query)
GeoIP.record_by_name(query)
GeoIP.country_code_by_addr(query)
GeoIP.country_code_by_name(query)
GeoIP.country_name_by_addr(query)
GeoIP.country_name_by_name(query)

脚注

[1]GeoIP是马萨诸塞州波士顿的MaxMind有限责任公司的注册商标。