Geoip
GeoIp Api Bitrix Module
Install / Use
/learn @pavelshulaev/GeoipREADME
Модуль для Битрикс «GeoIp Api»
Описание
Модуль предоставляет api для определения местоположения по ip-адресу. По-умолчанию местоположение определяется по текущему ip.
В местоположение входят
- название города;
- iso-код страны
- id страны в CMS 1С Битрикс (соответствует id стран, возвращаемых функцией GetCountryArray)
- название страны на языке сайта;
- название региона;
- iso-код региона;
- название района;
- ширина и долгота;
- диапазон ip-адресов.
В зависимости от выбранной службы, значения некоторых полей могут <b>отсутствовать</b> либо <b>отображаться на английском языке</b>.
Службы определения местоположения
В обычном режиме решение предоставляет данные из первой службы, корректно вернувшей данные. Службы вызываются в порядке, указанном ниже:
- ipgeobase.ru (IpGeoBase);
- sypexgeo.net (Sypex);
- (деактивирован с версии 1.4.5, т.к. у сервиса было отключено свободное api, при вызове сервиса теперь возникает ошибка) freegeoip.net (FreeGeoIp).
В случае необходимости, можно явно указать необходимую службу в 3м параметре Location::getInstance().
Кеширование
Для уменьшения количества запросов, гео-инофрмация по последему ip сохраняется в куках.
Маркетплейс
Модуль доступен на Маркетплейсе Битрикса.
Api
\Rover\GeoIp\Location
Получение объекта \Rover\GeoIp\Location
$location = \Rover\GeoIp\Location::getInstance($ip = null, $charset = self::CHARSET__AUTO, $service = '', $language = LANGUAGE_ID);
$ip- ip-адрес, по умолчанию используется текущий;$charset- кодировка, по умолчания кодировка сайта;$service- предпочитаемый сервис. По умолчанию сервисы вызываются в порядке, описанном в разделе Службы определения местоположения и используется первый, вернувший результат.$language- предпочитаемый язык ответа, по умолчанию равеня текущему языку сайта. На данный момент работает только с сервисом Sypex.
Reload
$location->reload($ip = null);
Метод позволяет загрузить/перезагрузить данные напрямую из сервисов геопозиционирования, минуя кеш.
$ip- ip-адрес, для которого перезагружаем данные. По умолчанию используется текущий;
Благодаря этому методу, можно несколько раз использовать объект
\Rover\GeoIp\Locationдля определения местоположения по разным ip-адресам, не создавая каждый раз новый (см. пример использования).
Получение данных
use \Rover\GeoIp\Location;
$location = Location::getInstance();
$location->isSuccess(); // Флаг успешного получения данных
$location->getError(); // ошибки, возникшие при получении данных
$location->getCurIp(); // текущий ip-адрес.
$location->getData(); // Возвращает ассоциативный массив вида
[
'ip' => 'xxx.xxx.xxx.xxx',
'inetnum' => '...',
'country_code' => '...',
'country_name => '...',
'country_id => '...',
'city_name' => '...',
'region_name' => '...',
'district' => '...',
'lat' => '...',
'lng' => '...'
]
$location->getField('region_name'); // значение поля массива из метода getData
$location->getCityName(); // название города.
$location->getCountryCode(); // iso-код страны.
$location->getCountryId(); // id страны в Битриксе (соответствует id стран, возвращаемых функцией GetCountryArray (https://dev.1c-bitrix.ru/api_help/main/functions/other/getcountryarray.php)). Для корректной работы необходимо, чтобы результат getCountryCode() был не пустым.
$location->getCountryName(); // название страны на текущем языке сайта. Для корректной работы необходимо, чтобы результат getCountryId() был не пустым.
$location->getRegionName(); // название региона.
$location->getRegionCode(); // iso-код региона.
$location->getDistrict(); // название района.
$location->getLat(); // широта
$location->getLng(); // долгота
$location->getInetnum(); // диапазон адресов, в который входит переданный ip.
$location->getService(); // название geoip-сервиса, с помощью которого были получены данные
Пример использования
use Bitrix\Main\Loader,
Rover\GeoIp\Location;
if (Loader::includeModule('rover.geoip')){
try{
echo 'ваш ip: ' . Location::getCurIp() . '<br><br>'; // текущий ip
$location = Location::getInstance('195.19.132.64', \Rover\GeoIp\Helper\Charset::AUTO, 'Sypex'); // 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>'; //
echo 'округ: ' . $location->getDistrict() . '<br>'; // US-CA
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/
Компоненты
Указатель местоположения пользователей (rover:geoip.user.location)
Позволяет установить местоположение для пользователей на основе ip адреса, с которого они впервые зашли на сайт. Для работы необходим установленный модуль «Веб-аналитика».
Определившиеся значения подсвечиваются зеленым цветом. Чтобы обновить значение, необходимо выделить галочкой соответствующую строку и нажать «Обновить».
В визуальном редакторе компонент находится по адресу Компоненты Rover -> Служебные -> Указатель местоположения пользователей.
Параметры
PAGE_SIZE- Количество пользователей на одной страницеCITY_FIELDS- Поля пользователя, куда следует внести информацию о городеSTATE_FIELDS- Поля пользователя, куда следует внести информацию о регионеCOUNTRY_FIELDS- Поля пользователя, куда следует внести информацию о стране
Требования
- php версии 5.3 или выше;
- установленная на хостинге библиотека CURL;
- модуль «Веб-аналитика» (для работы компонента rover:geoip.user.location).
Контакты
По всем вопросам вы можете связаться со мной по email: rover.webdev@gmail.com, либо через форму на сайте https://rover-it.me.
Пожертвования
Если решение оказалось вам полезным, вы можете оставить пожертование
Related Skills
node-connect
343.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
92.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
343.3kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
