2016-02-14

Полезные инструменты: GeoIP - определяем город пользователя по IP

Уже давно фраза "я тебя вычислю по IP" реальна.
Хочется представить очень простой инструмент для определения местоположения по IP - GeoIP. Рассматривать GeoIP стоит как базу данных соответствия интернет и физических адресов. Базы могут отличатся точностью - одна точно определяет страну, а друга может дать точность до улицы.

Одним из лидеров в этой области - MaxMind. Компания выпускает несколько баз, в том числе и бесплатную.

Базы можно скачать по ссылке https://dev.maxmind.com/geoip/legacy/geolite/
Популярные языки (такие как С, Java, Python, PHP) поддерживают работу с продуктом (есть набор привязок и к другим языкам). Но не только языки - nginx отлично работает с GeoIP (и apache2 тоже).

Пример на Python (модуль geoip):

>>> import geoip2.database
>>> reader = geoip2.database.Reader('/path/to/GeoLite2-City.mmdb')
>>> # Replace "city" with the method corresponding to the database
>>> # that you are using, e.g., "country".
>>> response = reader.city('128.101.101.101')
>>> response.country.iso_code
'US'
>>> response.country.name
'United States'
>>> response.country.names['zh-CN']
u'美国'
>>> response.subdivisions.most_specific.name
'Minnesota'
>>> response.subdivisions.most_specific.iso_code
'MN'
>>> response.city.name
'Minneapolis'
>>> response.postal.code
'55455'
>>> response.location.latitude
44.9733
>>> response.location.longitude
-93.2323
>>> reader.close()
Как видно из примера, в базе хранится много полезного.

Приведу примеры использования базы GeoIP:

  • С помощью nginx определять страну пользователя и делать редирект на необходимую языковую версию сайта
  • Для решения задачи http://pynsk.ru/tasks/9/ (Cистема "умная страница")
  • Реализация таргетирования контента/рекламы

Ссылки:

  • Документация модуля geoip для Python - https://geoip2.readthedocs.org/en/latest/
  • Базы https://dev.maxmind.com/geoip/legacy/geolite/

http://pynsk.ru/blog/2016/02/13/geoip/

Комментариев нет:

Отправить комментарий