Каталог решений

Покупка продления купона

Продолжительность:
Общая сумма:
0 руб.
Ваш запрос успешно отправлен!

Я согласен с условиями активации продлений
Продлить
Продолжить покупки

GeoIp Api

Модуль предоставляет api для определения местоположения по ip-адресу. Если ip-адрес не указан явно, то местоположение определяется по текущему ip пользователя. Для уменьшения количества запросов, информация о последнем ip-адресе сохраняется в cookies.В местоположение входят:название города;название страны на языке сайта;iso-код страныid страны в CMS 1С Битрикс (соответствуют id стран, возвращаемых функцией GetCountryArray)название региона;iso-код региона (опционально);название района (опционально);ширина и долгота;диапазон ip-адресов (опционально).В зависимости от выбранной службы, значения некоторых полей могут отсутствовать либо отображаться на английском языке. Для службы Sypex есть возможность указать необходимый язык 4-м параметром.В обычном режиме решение предоставляет данные из первой службы, корректно вернувшей данные. Службы вызываются в следующем порядке:sypexgeo.net (Sypex);ipgeobase.ru (IpGeoBase); (отключена, т.к. перестала отвечать)freegeoip.net (FreeGeoIp). (отключена, т.к. свободный api был закрыт)В случае необходимости, можно явно указать необходимую службу. Сейчас, если указать службу, отличную от Sypex, работать не будет.Пример использования:use Bitrix\Main\Loader,     Rover\GeoIp\Location;     if (Loader::includeModule('rover.geoip')){         try{             echo 'ваш ip: ' . Location::getCurIp() . '<br><br>'; // текущий ip                        $location = Location::getInstance('5.255.255.88'); // yandex.ru             if ($location->isSuccess()){                 echo 'ip: '                 . $location->getIp() . '<br>';          // 5.255.255.88                 echo 'город: '              . $location->getCityName() . '<br>';        // Москва                 echo 'iso-код страны: '     . $location->getCountryCode() . '<br>';     // RU                 echo 'название страны: '    . $location->getCountryName() . '<br>'; // Россия                 echo 'id страны в Битриксе: '    . $location->getCountryId() . '<br>'; // 1                 echo 'регион: '             . $location->getRegionName() . '<br>';      // Москва                 echo 'iso-код региона: '    . $location->getRegionCode() . '<br>';      //                 echo 'округ: '              . $location->getDistrict() . '<br>';    // Центральный федеральный округ                 echo 'широта: '             . $location->getLat() . '<br>';         // 55.755787                 echo 'долгота: '            . $location->getLng() . '<br>';         // 37.617634                 echo 'диапазон адресов: '   . $location->getInetnum() . '<br>';     // 5.255.252.0 - 5.255.255.255                 echo 'сервис: '             . $location->getService() . '<br><br>';     // IpGeoBase            } else {                 echo 'ошибка: '             . $location->getError() . '<br><br>';            }            $location->setLanguage('en');            $location->reload('173.194.222.94'); // google.ru               if ($location->isSuccess()){                echo 'ip: '                 . $location->getIp() . '<br>';          // 173.194.222.94                echo 'город: '              . $location->getCityName() . '<br>';        // Mountain View                echo 'iso-код страны: '     . $location->getCountryCode() . '<br>';     // US                echo 'название страны: '    . $location->getCountryName() . '<br>'; // USA                echo 'id страны в Битриксе: '    . $location->getCountryId() . '<br>'; // 122                echo 'регион: '             . $location->getRegionName() . '<br>';      // California                echo 'iso-код региона: '    . $location->getRegionCode() . '<br>';      // US-CA                echo 'округ: '              . $location->getDistrict() . '<br>';    //                echo 'широта: '             . $location->getLat() . '<br>';         // 37.38605                echo 'долгота: '            . $location->getLng() . '<br>';         // -122.08385                echo 'диапазон адресов: '   . $location->getInetnum() . '<br>';     //                echo 'сервис: '             . $location->getService() . '<br>';     // Sypex            } else {                                echo 'ошибка: '             . $location->getError() . '<br><br>';            }        } catch (\Exception $e) {            echo $e->getMessage();        } } else        echo 'Модуль GeoIp Api не установлен';Указание сервера для Sypex\Bitrix\Main\Config\Option::set('rover.geoip', 'sypex-server', 'ru3.sxgeo.city');Список всех серверов https://sypexgeo.net/ru/api/Указание ключа доступа для Sypex\Bitrix\Main\Config\Option::set('rover.geoip', 'sypex-key', 'abcd1');КомпонентыУказатель местоположения пользователей (rover:geoip.user.location)Позволяет установить местоположение для пользователей на основе данных из модуля. Местоположение определяется по ip-адресу, с которого они впервые зашли на сайт. Полное описание api на гитхабе проекта: https://github.com/pavelshulaev/geoipЕсли вам нужен более расширенный функционал и более «пользовательский» интерфейс с похожим функционалом, рекомендую решение «Улучшенный выбор местоположения с определением по IP, замена контента в зависимости от города».

Скриншоты
Описание

Технические данные

Опубликовано:
10.12.2016
Обновлено:
06.02.2022
Версия:
1.5.1
Установлено:
Более 1000 раз
Подходящие редакции:
«Первый сайт», «Старт», «Стандарт», «Малый бизнес», «Бизнес», «Корпоративный портал», «Энтерпрайз»
Адаптивность:
Да
Поддержка Композита:
Да
Совместимо с Сайты24
Нет
Совместимо с PHP 8.1
Да

Пользовательское соглашение

Описание

Модуль предоставляет api для определения местоположения по ip-адресу. Если ip-адрес не указан явно, то местоположение определяется по текущему ip пользователя. Для уменьшения количества запросов, информация о последнем ip-адресе сохраняется в cookies.

В местоположение входят:
  • название города;
  • название страны на языке сайта;
  • iso-код страны
  • id страны в CMS 1С Битрикс (соответствуют id стран, возвращаемых функцией GetCountryArray)
  • название региона;
  • iso-код региона (опционально);
  • название района (опционально);
  • ширина и долгота;
  • диапазон ip-адресов (опционально).
В зависимости от выбранной службы, значения некоторых полей могут отсутствовать либо отображаться на английском языке. Для службы Sypex есть возможность указать необходимый язык 4-м параметром.

В обычном режиме решение предоставляет данные из первой службы, корректно вернувшей данные. Службы вызываются в следующем порядке:
  • sypexgeo.net (Sypex);
  • ipgeobase.ru (IpGeoBase); (отключена, т.к. перестала отвечать)
  • freegeoip.net (FreeGeoIp). (отключена, т.к. свободный api был закрыт)
В случае необходимости, можно явно указать необходимую службу. Сейчас, если указать службу, отличную от Sypex, работать не будет.


Пример использования:
use Bitrix\Main\Loader,
    Rover\GeoIp\Location;

    if (Loader::includeModule('rover.geoip')){
        try{
            echo 'ваш ip: ' . Location::getCurIp() . '<br><br>'; // текущий ip
           
            $location = Location::getInstance('5.255.255.88'); // yandex.ru
            if ($location->isSuccess()){
                echo 'ip: '                 . $location->getIp() . '<br>';          // 5.255.255.88
                echo 'город: '              . $location->getCityName() . '<br>';        // Москва
                echo 'iso-код страны: '     . $location->getCountryCode() . '<br>';     // RU
                echo 'название страны: '    . $location->getCountryName() . '<br>'; // Россия
                echo 'id страны в Битриксе: '    . $location->getCountryId() . '<br>'; // 1
                echo 'регион: '             . $location->getRegionName() . '<br>';      // Москва
                echo 'iso-код региона: '    . $location->getRegionCode() . '<br>';      //
                echo 'округ: '              . $location->getDistrict() . '<br>';    // Центральный федеральный округ
                echo 'широта: '             . $location->getLat() . '<br>';         // 55.755787
                echo 'долгота: '            . $location->getLng() . '<br>';         // 37.617634
                echo 'диапазон адресов: '   . $location->getInetnum() . '<br>';     // 5.255.252.0 - 5.255.255.255
                echo 'сервис: '             . $location->getService() . '<br><br>';     // IpGeoBase
           } else {
                echo 'ошибка: '             . $location->getError() . '<br><br>';
           }

           $location->setLanguage('en');
           $location->reload('173.194.222.94'); // google.ru
   
           if ($location->isSuccess()){
               echo 'ip: '                 . $location->getIp() . '<br>';          // 173.194.222.94
               echo 'город: '              . $location->getCityName() . '<br>';        // Mountain View
               echo 'iso-код страны: '     . $location->getCountryCode() . '<br>';     // US
               echo 'название страны: '    . $location->getCountryName() . '<br>'; // USA
               echo 'id страны в Битриксе: '    . $location->getCountryId() . '<br>'; // 122
               echo 'регион: '             . $location->getRegionName() . '<br>';      // California
               echo 'iso-код региона: '    . $location->getRegionCode() . '<br>';      // US-CA
               echo 'округ: '              . $location->getDistrict() . '<br>';    // 
               echo 'широта: '             . $location->getLat() . '<br>';         // 37.38605
               echo 'долгота: '            . $location->getLng() . '<br>';         // -122.08385
               echo 'диапазон адресов: '   . $location->getInetnum() . '<br>';     //
               echo 'сервис: '             . $location->getService() . '<br>';     // Sypex
           } else {                
               echo 'ошибка: '             . $location->getError() . '<br><br>';
           }
       } catch (\Exception $e) {
           echo $e->getMessage();
       }
} else 
       echo 'Модуль GeoIp Api не установлен';


Указание сервера для Sypex
\Bitrix\Main\Config\Option::set('rover.geoip', 'sypex-server', 'ru3.sxgeo.city');
Список всех серверов https://sypexgeo.net/ru/api/


Указание ключа доступа для Sypex

\Bitrix\Main\Config\Option::set('rover.geoip', 'sypex-key', 'abcd1');


Компоненты

Указатель местоположения пользователей (rover:geoip.user.location)

Позволяет установить местоположение для пользователей на основе данных из модуля. Местоположение определяется по ip-адресу, с которого они впервые зашли на сайт.


Полное описание api на гитхабе проекта: https://github.com/pavelshulaev/geoip


Если вам нужен более расширенный функционал и более «пользовательский» интерфейс с похожим функционалом, рекомендую решение «Улучшенный выбор местоположения с определением по IP, замена контента в зависимости от города».

Отзывы (5)
Обсуждения (34)
1 - 5 из 34
Что нового
1.5.1 (06.02.2022) — добавлена возможность задавать максимальное время ожидания от geoip-сервиса. По умолчанию 200 мс.
1.5.0 (13.10.2021) — единственным сервисом для определения местоположения установлен Sypex (остальные на данный момент не работают)
— добавлена возможность подключаться к Sypex по ключу (при регистрации/подписке)
— время ожидания ответа сервиса сокращено с 2 до 0,2 секунд.
1.4.11 (03.06.2021) — исправлены ошибки в преобразовании кодировки ответов для сайтов в windows-1251
— минимальная версия php повышена до 7.2
— рефакторинг
1.4.9 (13.04.2020) — добавлена возможность задать региональный сервер для Sypex
— минимальна яверсия php повышена до 5.4
— прочие незначительные улучшения и доработки
1.4.8 (07.01.2019) уменьшено время ожидания ответа от сервисов определения местоположения
1.4.7 (16.07.2018) Гео-запрос не производится, если страницу открывает бот
1.4.5 (05.07.2018) Добавлена возможность указать желаемый язык ответа, пока работает только для службы Sypex
Служба FreeGeoIp отключена, т.к. они закрыли свободный api
1.4.4 (24.05.2018) В компонент определения местоположения пользователей добавлена проверка наличия модуля "Веб-аналитика"
1.4.3 (12.12.2017) Исправлен вывод ошибок при установке/удалении
1.4.2 (15.11.2017) Убран Exception, возникавший при попытке определить местоположения для ip v6. Теперь ошибки пишутся в ключ ERROR массива, получаемого из метода Location::getData(). Так же их можно получить, вызвав Location::getError().
1.4.1 (01.11.2017) Параметр ip в методе reload вновь сделан необязательным. По умолчанию перезагружается для текущего ip
Исправлены ошибки при установке
1.4.0 (24.10.2017) - добавлена новая служба для определения местоположения - Sypex
- возможность явно указывать службу для определения местоположения
- необходимая версия php понижена до 5.3
- добавлены некоторые методы для получения значений
- часть старых методов помечены устаревшими, они будут удалены в следующих версиях (см. документацию (https://github.com/pavelshulaev/geoip))
1.3.2 (03.10.2017) В класс \Rover\GeoIp\Location добавлен публичный метод getService, возвращающий сервис geoip, с помощью которого были получены данные
1.3.1 (08.07.2017) Добавлено авто-определение кодировки и сделано по-умолчанию
Добавлена корректная обработка адресов в формате IPv6. Модуль больше не выдаёт ошибку, но определение местоположения пока недоступно.
1.3.0 (30.06.2017) Добавлен метод reload для многократного использования объекта определения местоположения
Улучшен алгоритм определения страны
Добавлен компонент для определения и обновления местоположения пользователей
1.2.3 (15.06.2017) Добавлен метод public Location::getCountryId() , возвращающий код страны в Битриксе (если удалось определить)
1.2.2 (24.05.2017) Исправлено отображение названия страны в кодировке windows-1251
В описании добавлен пример использования в кодировке windows-1251
1.2.1 (23.05.2017) Восстановлена совместимость с php 5.4
1.2.0 (27.02.2017) Добавлен поиск через службу freegeoip.net
1.1.0 (21.12.2016) Добавлен метод public getIp(), возвращающий ip, для которого создан объект \Rover\GeoIp\Location

Обновлена документация
1.0.1 (20.12.2016) метод получения текущего ip сделан публичным
Установка
После стандартной установки модуля, его api будет доступно для ваших проектов.

С api можно ознакомится здесь: https://github.com/pavelshulaev/geoip

Задать максимальное время ожидания ответа от geoip-сервиса можно через РНР-командную строку. Значение указывается в миллисекундах:
\Bitrix\Main\Config\Option::set('rover.geoip', 'curl-timeout', 200);


Требования
  • php версии 7.2 или выше
  • установленная на хостинге библиотека CURL
  • модуль «Веб-аналитика» (для работы компонента rover:geoip.user.location)
Поддержка
По всем вопросам, предложениям и ошибкам обращайтесь в техподдержку на https://rover-it.me.

Другие решения разработчика

Решение добавлено в корзину

Перейдите в корзину и оформите заказ или продолжите покупки
Перейти в корзину
Продолжить покупки