coding

Определение ip адреса посетителя сайта и его геолокации в Python/Django.

10 января 2017 г.

Умение определить ip адрес пользователя, заходящего на сайт, может пригодиться например для формирования статистики. Зная ip можно с большой долей вероятности определить физическое местоположение пользователя, а эту информацию уже можно использовать для вывода определенного контента: родного языка интерфейса сайта, актуальной рекламы\цен в данном регионе и много чего еще.

Для решения этой задачи в django будем использовать пакеты django-ipware (определяем ip) и geoip2 (определяем геолокацию).

Как обычно, сначала нужно установить эти пакеты (geoip2 скорее всего уже включен в стандартную сборку django):

$ pip install django-ipware
$ pip install  geoip2

Для geoip2 придется скачать бесплатную базу (при чем обязательно в бинарном формате) соответствий городов ip адресам, положить ее например в папку geo/ своего проекта и в settings.py прописать путь к ней - GEOIP_PATH = 'geo/' 

Далее в view.py подключаем пакеты:

from ipware.ip import get_ip
from django.contrib.gis.geoip2 import GeoIP2

 и в нужной вьюхе пишем:

ip = get_ip(request)
if ip is not None:
    g = GeoIP2()
    try:
        location = g.city(ip)
    except:
        location = {'Локация': 'нет данных'}
    else:
        # какая-то логика

Итак, сначала из запроса с помощью get_ip мы получаем адрес клиента и кладем его в переменную ip. Если мы получаем адрес, то создаем объект GeoIP2 и пытаемся получить соответствие ip адреса определенному городу на карте из ранее подключенной базы. При успешном выполнении данной операции мы получим словарь location с ключами: region, country_name (страна), country_code (код страны в формате iso_3166-2), city (город), longitude (долгота), latitude (широта), postal_code (почтовый индекс) и dma_code.
Как использовать полученные данные придумаете сами, я например для конкретного посетителя сайта по его городу получаю текущую погоду и вывожу на главной странице справа под поиском.


К сожалению, точно в какой квартире сидит наш клиент узнать не получится, скорее всего удастся получить данные его провайдера, например если вы живете в Гридино, а ваш интернет провайдер находится во Владимире, то и город скорее всего определиться как Владимир, но и этого вполне достаточно для многих целей. 

Просмотров - 985

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

Комментарий будет размещен на сайте после прохождения модерации.

Комментарии

Еще не оставлено ни одного комментария.