GeoIp Api

5

Разработчик: Шулаев ПА

Установлено: Более 1000

Обновлено: 06.02.2022

Адаптирован под мобильные устройства

Совместим с редакциями Битрикс: «Первый сайт» / «Старт» / «Стандарт» / «Малый бизнес» / «Бизнес» / «Энтерпрайз» / «Корпоративный портал» /

Модуль предоставляет 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, замена контента в зависимости от города».

После стандартной установки модуля, его 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.