IP Geo – геолокация по IP адресу

3 мая 2012 в 13:21
Аватар пользователя Ch Ch 0 40

Иногда нужно отобразить на сайте контекстную информацию в зависимости от региона пользователя. Данный модуль позволяет определять местонахождение пользователя по его IP адресу.
Модуль может работать в двух режимах:

  • Локальный (по умолчанию) — используется локальная база данных
  • Удалённый — данные загружаются с xml сервиса ipgeobase.ru

Пример использования:

if (($region = ipgeo_get_region()) && $region->city == 'Санкт-Петербург') {
  drupal_set_message('Зенит чемпион!');
}

Структура возвращаемого объекта:

stdClass Object
(
    [country] => RU
    [city] => Нижний Новгород
    [subject] => Нижегородская область
    [fo] => Приволжский федеральный округ
    [latitude] => 56.329918
    [longitude] => 44.009193
)

latitude и longitude это широта и долгота, которые можно использовать в своём модуле для отображения местоположенния пользователя на картах яндекса и гугла.

База IP блоков для России и Украины находится в архиве с модулем.

ВложениеРазмер
Иконка пакета ipgeo.zip292.2 КБ

Комментарии

Аватар пользователя Ch Ch 0

"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
База загружается через батч?

Пока нет.
"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
есть ещё хороший модуль smartip
Посмотрел. Модуль хороший, но те базы с которыми он работает для России и Украины мало пригодны.

4 мая 2012 в 7:40
Аватар пользователя Ch Ch 0

Возможно. Модуль сам ничего не делает, а только даёт возможность вам определить регион пользователя.

29 мая 2012 в 9:52

"alex_shut" wrote:
У нас провайдеры веселые. Ты в одном городе, а по тестам - совсем в другом)

"drupby" wrote:

а яндекс и гугл как определяет твой регион ?

"alex_shut" wrote:
Вроде как правильно.

видимо в окно следят , где ты находишься

1 июня 2012 в 1:44

ну я хз что и как. Знаю что ис-за смены подсети мне пришлось отключить безопасность на хосте.
Сперва меня не пускало, думал ис-за айпи плавающего. Но оказалось что и сеть меняетсо. Сперва один номер, потом другой... И так с каждым коннектом. Тобишь я не могу просто ввести подсеть и сказать что отсюда всем можно. Пришлось просто выключить.

1 июня 2012 в 1:53

Поставил спасибо работает - но все-таки выдает не мой город а город провайдера. Как с этим можно бороться? Яндекс как-то же определяет правильный город?

9 июля 2012 в 15:50
Аватар пользователя Ch Ch 0

Возможно ты когда то указывал свой город в яндексе? Если нет, то значит у яндекса другая база.

9 июля 2012 в 21:32

Да кстати это возможно вполне. Но например на sportbox.ru - там в шапке погода от sinoptik - тоже определяет мой город правильно.

9 июля 2012 в 21:36

Хороший модуль.
А вот как его результат, который "$region->city", привинтить в поле выбора города из таксономии в блоке?

30 ноября 2014 в 3:42

В последнее время сервис ipgeobase.ru стал глючить (в плане долгого подвисания при запросах к этому сервису, да так что поисковики стали думать что мой сайт не работает), пришлось искать новое решение. Единственное нормальное решение из бесплатных на данный момент это geoplugin.com
Для Drupal есть специальный модуль для него https://www.drupal.org/project/geoplugin, но пока что до выхода нового релиза приходится его патчить https://www.drupal.org/node/2452375

14 марта 2015 в 20:22

Worth wrote:
В последнее время сервис ipgeobase.ru стал глючить (в плане долгого подвисания при запросах к этому сервису, да так что поисковики стали думать что мой сайт не работает), пришлось искать новое решение. Единственное нормальное решение из бесплатных на данный момент это geoplugin.com
Для Drupal есть специальный модуль для него https://www.drupal.org/project/geoplugin, но пока что до выхода нового релиза приходится его патчить https://www.drupal.org/node/2452375[/quote]
Да, сервис работает, но определяет регионы России через раз. Мой IP, напрмер, определяется неверно. Я нахожусь в Краснодаре, а пишет какую-то кракозябру.

20 июля 2015 в 10:59

Поставил модуль, но мой ip не определяется. На http://ipgeobase.ru формат базы изменился, хотя я посмотрел оба формата, новую базу несложно сконвертировать в нужный формат.

19 июля 2016 в 15:16

у меня вроде работает. Определяется правильно не всегда, но это и не новость, кажется Smile Например, если с мобильного Билайн в Краснодаре, то частенько то Москва, то Ростов-на-Дону выскакивает, но так и в Яндексе случается. Видимо, ip оператор присваивает в зависимости от канала, а канал в зависимости от нагрузок сам перенаправляет.

27 июля 2016 в 17:10

Да я разобрался, почему не определялся IP. У меня NGINX + Apache, нужно было в settings.php добавить запись:

<?php// Требуется если сайт находится за nginx
  // Tell Drupal that we are behind a reverse proxy server
  $conf['reverse_proxy'] = TRUE;

  // List of trusted IPs (IP numbers of our reverse proxies)
  $conf['reverse_proxy_addresses'] = array(
    '127.0.0.1',
    'IP сервера',
  );
?>

Еще я пишу скриптик, преобразующий базу IP из нового формата в формат требуемый для этого модуля.
Будет готово, выложу сюда.

27 июля 2016 в 19:32

Переконвертировал базу из нового формата в требуемый для модуля. Может кому пригодится.
Обновленная база
Конвертер написал на Python, если нужно могу тоже выложить, но он сырой, т.к. делался под разовую задачу.

30 июля 2016 в 20:35