使用 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)[原始碼]

GeoIP 物件不需要任何參數即可使用預設設定。然而,至少應該使用 GeoIP 資料集所在位置的路徑來設定 GEOIP_PATH 設定。可以使用以下初始化關鍵字來自訂任何預設值。

關鍵字參數

說明

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)[原始碼]

這個類別方法會從給定的資料庫路徑和給定的快取設定實例化 GeoIP 物件。

自 5.1 版起已棄用:請改用 GeoIP2() 建構函式。

查詢

以下所有查詢程式都可能接受 IPv4AddressIPv6Address 的實例、字串 IP 位址或完整合格域名 (FQDN)。例如,IPv4Address("205.186.163.125")"205.186.163.125""djangoproject.com" 都將是有效的查詢參數。

GeoIP2.city(query)[原始碼]

針對給定的查詢,傳回包含城市資訊的字典。字典中的某些值可能未定義 (None)。

GeoIP2.country(query)[原始碼]

針對給定的查詢,傳回包含國家代碼和國家的字典。

GeoIP2.country_code(query)[原始碼]

傳回對應於查詢的國家代碼。

GeoIP2.country_name(query)[原始碼]

傳回對應於查詢的國家名稱。

座標擷取

GeoIP2.coords(query)[原始碼]

傳回 (經度, 緯度) 的座標元組。

自 5.1 版起已棄用:請改用 GeoIP2.lon_lat()

GeoIP2.lon_lat(query)[原始碼]

傳回 (經度, 緯度) 的座標元組。

GeoIP2.lat_lon(query)[原始碼]

返回一個 (緯度, 經度) 的座標元組。

GeoIP2.geos(query)[原始碼]

返回一個對應於查詢的 Point 物件。

設定

GEOIP_PATH

一個字串或 pathlib.Path,指定 GeoIP 資料檔所在的目錄。此設定是必要的,除非在初始化 GeoIP2 物件時,使用 path 關鍵字手動指定。

GEOIP_COUNTRY

用於 GeoIP 國家資料檔的基本名稱。預設為 'GeoLite2-Country.mmdb'

GEOIP_CITY

用於 GeoIP 城市資料檔的基本名稱。預設為 'GeoLite2-City.mmdb'

例外

exception GeoIP2Exception[原始碼]

GeoIP2 包裝器中發生錯誤時,會引發此例外。來自底層 geoip2 函式庫的例外會保持不變地傳遞。

註腳

返回頂部