123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- .. _ref-geoip:
- ======================
- Geolocation with GeoIP
- ======================
- .. module:: django.contrib.gis.geoip
- :synopsis: High-level Python interface for MaxMind's GeoIP C library.
- .. versionchanged:: 1.4
- .. note::
- In Django 1.4, the :class:`GeoIP` object was moved out of
- :mod:`django.contrib.gis.utils` and into its own module,
- :mod:`django.contrib.gis.geoip`. A shortcut is still provided
- in ``utils``, but will be removed in Django 1.6.
- The :class:`GeoIP` object is a ctypes wrapper for the
- `MaxMind GeoIP C API`__. [#]_ This interface is a BSD-licensed alternative
- to the GPL-licensed `Python GeoIP`__ interface provided by MaxMind.
- In order to perform IP-based geolocation, the :class:`GeoIP` object requires
- the GeoIP C libary and either the GeoIP `Country`__ or `City`__
- datasets in binary format (the CSV files will not work!). These datasets may be
- `downloaded from MaxMind`__. Grab the ``GeoIP.dat.gz`` and ``GeoLiteCity.dat.gz``
- and unzip them in a directory corresponding to what you set
- :setting:`GEOIP_PATH` with in your settings. See the example and reference below
- for more details.
- __ http://www.maxmind.com/app/c
- __ http://www.maxmind.com/app/python
- __ http://www.maxmind.com/app/country
- __ http://www.maxmind.com/app/city
- __ http://www.maxmind.com/download/geoip/database/
- Example
- =======
- Assuming you have the GeoIP C library installed, here is an example of its
- usage::
- >>> from django.contrib.gis.utils 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
- ==================
- .. setting:: GEOIP_PATH
- GEOIP_PATH
- ----------
- A string specifying the directory where the GeoIP data files are
- located. This setting is *required* unless manually specified
- with ``path`` keyword when initializing the :class:`GeoIP` object.
- .. setting:: GEOIP_LIBRARY_PATH
- GEOIP_LIBRARY_PATH
- ------------------
- A string specifying the location of the GeoIP C library. Typically,
- this setting is only used if the GeoIP C library is in a non-standard
- location (e.g., ``/home/sue/lib/libGeoIP.so``).
- .. setting:: GEOIP_COUNTRY
- GEOIP_COUNTRY
- -------------
- The basename to use for the GeoIP country data file.
- Defaults to ``'GeoIP.dat'``.
- .. setting:: GEOIP_CITY
- GEOIP_CITY
- ----------
- The basename to use for the GeoIP city data file.
- Defaults to ``'GeoLiteCity.dat'``.
- ``GeoIP`` API
- =============
- .. class:: GeoIP([path=None, cache=0, country=None, city=None])
- The ``GeoIP`` object does not require any parameters to use the default
- settings. However, at the very least the :setting:`GEOIP_PATH` setting
- should be set with the path of the location of your GeoIP data sets. The
- following intialization keywords may be used to customize any of the
- defaults.
- =================== =======================================================
- Keyword Arguments Description
- =================== =======================================================
- ``path`` Base directory to where GeoIP data is located or the
- full path to where the city or country data files
- (.dat) are located. Assumes that both the city and
- country data sets are located in this directory;
- overrides the :setting:`GEOIP_PATH` settings attribute.
- ``cache`` The cache settings when opening up the GeoIP datasets,
- and may be an integer in (0, 1, 2, 4) corresponding to
- the ``GEOIP_STANDARD``, ``GEOIP_MEMORY_CACHE``,
- ``GEOIP_CHECK_CACHE``, and ``GEOIP_INDEX_CACHE``
- ``GeoIPOptions`` C API settings, respectively.
- Defaults to 0 (``GEOIP_STANDARD``).
-
- ``country`` The name of the GeoIP country data file. Defaults
- to ``GeoIP.dat``. Setting this keyword overrides the
- :setting:`GEOIP_COUNTRY` settings attribute.
- ``city`` The name of the GeoIP city data file. Defaults to
- ``GeoLiteCity.dat``. Setting this keyword overrides
- the :setting:`GEOIP_CITY` settings attribute.
- =================== =======================================================
- ``GeoIP`` Methods
- =================
- Querying
- --------
- All the following querying routines may take either a string IP address
- or a fully qualified domain name (FQDN). For example, both
- ``'205.186.163.125'`` and ``'djangoproject.com'`` would be valid query
- parameters.
- .. method:: GeoIP.city(query)
- Returns a dictionary of city information for the given query. Some
- of the values in the dictionary may be undefined (``None``).
- .. method:: GeoIP.country(query)
- Returns a dictionary with the country code and country for the given
- query.
- .. method:: GeoIP.country_code(query)
- Returns only the country code corresponding to the query.
- .. method:: GeoIP.country_name(query)
- Returns only the country name corresponding to the query.
- Coordinate Retrieval
- --------------------
- .. method:: GeoIP.coords(query)
- Returns a coordinate tuple of (longitude, latitude).
- .. method:: GeoIP.lon_lat(query)
- Returns a coordinate tuple of (longitude, latitude).
- .. method:: GeoIP.lat_lon(query)
- Returns a coordinate tuple of (latitude, longitude),
- .. method:: GeoIP.geos(query)
- Returns a :class:`django.contrib.gis.geos.Point` object corresponding to the query.
- Database Information
- --------------------
- .. attribute:: GeoIP.country_info
- This property returns information about the GeoIP country database.
- .. attribute:: GeoIP.city_info
- This property returns information about the GeoIP city database.
- .. attribute:: GeoIP.info
- This property returns information about all GeoIP databases (both city
- and country), and the version of the GeoIP C library (if supported).
- GeoIP-Python API compatibility methods
- ----------------------------------------
- These methods exist to ease compatibility with any code using MaxMind's
- existing Python API.
- .. classmethod:: GeoIP.open(path, cache)
- This classmethod instantiates the GeoIP object from the given database path
- and given cache setting.
- .. method:: GeoIP.region_by_addr(query)
- .. method:: GeoIP.region_by_name(query)
- .. method:: GeoIP.record_by_addr(query)
- .. method:: GeoIP.record_by_name(query)
- .. method:: GeoIP.country_code_by_addr(query)
- .. method:: GeoIP.country_code_by_name(query)
- .. method:: GeoIP.country_name_by_addr(query)
- .. method:: GeoIP.country_name_by_name(query)
- .. rubric:: Footnotes
- .. [#] GeoIP(R) is a registered trademark of MaxMind, LLC of Boston, Massachusetts.
|