TabGeo
Офф. сайт: http://tabgeo.com/ru/index/
Появился сравнительно не давно, первая версия composer пакета была опубликована 27 сентября 2015.
Позиционирует себя как самый быстрый, по сравнению с такими конкурентами как: GeoIP и Sypex Geo. Но скорость достигается за счет малого размера базы, в следствии чего эта библиотека определяет только код страны.
Распространяется в виде composer пакета + бинарная БД в своем собственном формате.
Для установки этой библиотеки нужно всего лиш подключить composer пакет:
При этом установится как PHP библиотека так и сама БД:
Пример использования в PHP скрипте:
Стоит заметить, что TabGeo позволяет получить только двузначный код страны в формате ISO 3166-1 alpha-2. Если вам нужно что то большее, например определить регион, город, временную зону, или пр., то нужно использовать например тот же GeoIP, т.к. он позволяет все это определить.
Установка:
1) Скопируйте в корень сайта содержимое папки upload.
2) Зайдите через браузер http://ВАШ_САЙТ/install-citymanager, выберите необходимые настройки и нажмите кнопку «Установить»,
установщик добавит в вашу базу необходимые таблицы. После установки папку install-citymanager можно удалить.
3) Зайдите в установщик модулей OpenCart (http://ВАШ_САЙТ/admin/index.php?route=extension/installer), загрузите файл citymanager.ocmod.xml.
4) Включите модуль в админке, введите лицензионный ключ. Проверьте на вкладке «Регионы», чтобы регионы соответствовали друг другу.
5) В любом шаблоне в том месте, где нужно вывести модуль вставьте: <div class=»prmn-cmngr» data-confirm=»true»></div>
Отредактируйте CSS-стили под тему своего шаблона в файле /catalog/view/javascript/jquery/progroman/progroman.city-manager.css
Если модуль не отображается, попробуйте обновить модификаторы в разделе Менеджер дополнений (Модификаторы/Modification) (http://ВАШ_САЙТ/admin/index.php?route=extension/modification),
Важно: если вы используете поддомены, установите для них одну сессию, для этого в .htaccess добавьте:
php_value session.cookie_domain .site.com
где site.com — ваш сайт
Продажник
Opencart 2.3
Geoip-v6 Opencart (11.4 MiB)
geoPlugin
Онлайн-сервис определения страны и города подключается к сайту следующим образом:
<script src="https://www.geoplugin.net/javascript.gp" type="text/javascript"></script> |
После подключения можно вызывать следующие методы:
geoplugin_request() — IP
geoplugin_status() — статус (200б 4040 и т. д.)
geoplugin_credit() — благодарности сервису MaxMind, упомянутому чуть выше.
geoplugin_city() — город
geoplugin_region() — область или регион
geoplugin_areaCode() — код зоны
geoplugin_dmaCode() — американский код из трех цифр, определяющий набор поддерживаемых телеканалов
geoplugin_regionCode() — код региона
geoplugin_regionName() — название региона
geoplugin_countryCode() — двухбуквенный код страны
geoplugin_countryName() — название страны на английском языке
geoplugin_continentCode() — код континента (например EU — Европа)
geoplugin_latitude() — широта
geoplugin_longitude() — долгота
geoplugin_currencyCode() — трехбуквенный код валюты страны
geoplugin_currencySymbol() — символ валюты страны
Также можно не подключать библиотеку, а использовать JSONP:
$.getJSON("http://www.geoplugin.net/json.gp?jsoncallback=?", function (response) { for (var i in response) { document.write('response = ' + responsei+ '<br/>'); } }); |
Достоинство — кроме страны можно получить информацию о валюте и ее код (₴, €, ₽).
Недостаток — запросы по HTTPS платные, подписка стоит €12 в год.
ip2nation.com
Это MySQL база данных с информацией о соответствии адреса стране. Скачать для размещения ее на собственном сервере можно здесь.
Пример на php, позволяющий вывести полное название страны:
<?php $server = ''; // MySQL hostname $username = ''; // MySQL username $password = ''; // MySQL password $dbname = ''; // MySQL db name $db = mysql_connect($server, $username, $password) or die(mysql_error()); mysql_select_db($dbname) or die(mysql_error()); $sql = 'SELECT c.country FROM ip2nationCountries c, ip2nation i WHERE i.ip < INET_ATON("'.$_SERVER'REMOTE_ADDR'.'") AND c.code = i.country ORDER BY i.ip DESC LIMIT 0,1'; list($countryName) = mysql_fetch_row(mysql_query($sql)); echo $countryName; // Вывести полное название страны ?> |
Отображение карт на сайте
- Javascript API (интерактивное)
- Static API (статичное)
Javascript API
2ГИС API
- Очень хорошие карты, но есть не везде
- Пока бесплатно
- Функциональность API послабее чем у Яндекса/Гугла, но может расширяться с помощью модулей Leaflet
- Зато есть карты этажей для торговых центров
Azure Maps
- Большое количество сервисов, в том числе построитель маршрутов, определение локации по IP
- Есть бесплатные лимиты и платное API
MapBox
- Симпатичные карты для веба и мобильных устройств
- Могу ошибаться, но кажется карты только на английском языке
- Для мобильных приложений бесплатно до 25000 пользователей в месяц, в вебе до 50000 загрузок в месяц
Static API
MapBox
- Могу ошибаться, но кажется карты только на английском языке
- Максимальный размер 1280х1280
- Бесплатно до 25 000 загрузок карт в месяц
Пример работы с библиотекой nikolaevevgeGeoIp
Скачиваете nikolaevevgeGeoIp.php с страницы сайта библиотеки и подключаете его к Вашему проекту
require_once("путь_к_ппке_с_библиотекой/nikolaevevgeGeoIp.php");
Далее для запроса информации о IP адресе, например для 88.85.172.134 выполняет var_dump(nikolaevevgeGeoIp::get(«88.85.172.134»)); в результате выполнения получаем примерно следующее:
array(5) { => string(11) "88.85.160.0" => string(13) "88.85.191.255" => string(2) "RU" => string(35) "Ивановская область" => string(14) "Иваново" }
Набор возвращаемых полей и их названия могут быть изменены по мере развития библиотеки, поэтому рекомендуется прочитать актуальную информацию со страницы сайта библиотеки.
Обратите внимание, библиотека сама умеет подключать фреймворки Bitrix, Joomla и WordPress при работе из стороннего файла (то есть при вызове вне фреймворка). При этом производится только подключение необходимых файлов фреймоворка, поэтому если Вы уже подключили фреймворк или вызываете библиотеку в составе компонентной структуры фреймворка — повторно библиотека файлы фреймворка подключать не будет
Функционал
Как я уже писал, начинал я делать не с плагина, а с функции в шаблоне. Сначала думал только об условно-платной версии базы, но количество бесплатных запросов закончилось за день-два. Поэтому перешёл на бесплатную, используя готовый класс для работы с файлом базы.
При разработке плагина я решил сделать выбор между локальной базой и REST API. В будущем планирую сделать кнопку автоматического обновления базы.
Также из базы можно вернуть русские и английские имена городов (стран, регионов). В связи с этим сделал выбор языка.
Ещё столкнулся с тем, что нужно включить список несколько городов или наоборот исключить какой-то.
Настройка плагина в админке
Как это можно и нужно использовать?
Давайте представим, что у Вас есть магазин и несколько офисов в других городах, и перед вами встает вопрос, что нужно делать три разных сайта под каждый город, а это я вам скажу и накладно чисто финансово и затратно с точки зрения продвижения (говорим про СЕО)
На помощь нам приходит техническое решение которое позволяет построить сайт на поддоменах, где каждый поддомен будет относится к определенному городу и при заходе на сайт, сервис будет определять местоположение клиента и перенаправлять его на нужный поддомен.
В данном способе больше плюсов чем минусов, давайте рассмотрим:
Плюсы:
- Один сайт на сколько угодно большое количество поддоменов
- Больше трафика
- Все поддомены в поиске, а это значит что есть больше вероятности, что перейдут именно к вам
- В региональной выдаче у Вас будут преференции от поисковых систем
- Большая лояльность от покупателей
- Правильная перелинковка между поддоменами даст положительный результат на позиции в целом по всем сайтам
Минусы:
- Настройка
Описание некоторых методов для работы с библиотекой nikolaevevgeGeoIp
Метод:
get("88.85.172.134");
— запрашивает гео-информацию об IP адресе. Метод самостоятельно выбирает, получать ли информацию из переменной, либо базы, либо удалённого сервиса по API. Метод так же сохраняет информацию в базу данных в случае, если информация была получена по API.
getInfoByIpIPGeobase("88.85.172.134");
— запрашивает гео-информацию о IP адресе у удалённого API сервиса ipGeoBase. Данный метод не рекомендуется использовать, кроме как для тестирования, поскольку в данном случае не используются преимущества работы с библиотекой.
getLastRequestTime();
— возвращает время выполнения последнего запроса в секундах.
checkIP("88.85.172.134");
— проверяет корректность IPv4 адреса в формате string. Если IP корректен, возвращает true, иначе false.
IPToInt("88.85.172.134");
— переводит IPv4 адрес в формате string в число. Такая необходимость связана с тем, что хранить информацию о стеках IP адресов в базе данных выгоднее с целью дальнейшего поиска именно как целое число.
intToIP(1482009734);
— переводит целое число в IPv4 адрес в формате string.
В библиотеке есть и другие методы, но нет смысла описывать их, поскольку они реализуют работу описанных выше методов.
ipinfo.io
Открытый сервис, позволяющий бесплатно делать до 1000 запросов в сутки.
Чтобы вызвать его в js используется код
$.getJSON('http://ipinfo.io', function(response){ console.log(response); }) |
В ответе вы получите:
«ip» — IP адрес пользователя
«hostname» — обратный IP
«city» — предположительный город, в котором находится пользователь
«region» — регион (область, район)
«country» — страна в виде двухбуквенного кода
«loc» — координаты широты и долготы
«org» — информация о провайдере
Сервис поддерживает HTTPS, можно использовать его на сайтах с поддеpжкой HTTPS. Чтобы избежать проблем с кросс-доменными запросами, которые Chrome ограничивает, можно воспользоваться поддержкой JSONP:
$.get("https://ipinfo.io?callback=?", function(response) { $('body').text(response.ip+ ' from ' +response.country); // вывести IP и страну посетителя. }, "jsonp") |
Пример, Страница сервиса
Практически полный клон ipinfo — сервис ipapi.co. Также ограничивает бесплатное использование 1000 запросов в сутки.
Возможности Supex Geo
На момент написания статьи не использовался в библиотеке nikolaevevgeGeoIp. Устанавливается размещением на хостинге одного php файла библиотеки (с последующим подключением к рабочему проекту через require) и базы данных для формата UTF-8 размером примерно 37 мегабайт. База данных обновляется путём закачивание новой версии с сайта (то есть вручную) или отдельным php файлом на который устанавливается cron. Сервис в момент написания статьи достаточно популярен, исходя из информации на сайте база данных в актуальном состоянии. Кроме информации о стране, городе и регионе, предоставляет данные о географических координатах. По отношению к ipGeoBase база более широкая — так как информация предоставляется о странах всего мира.
Supex Geo имеет вариант использования по API, предполагающий получение ключа. Есть платный и бесплатный вариант использования, существуют лимиты на запросы, подробнее о которых лучше узнать на сайте Supex Geo (это не относится к варианту с размещением базы на Вашем хостинге). На момент написания данной статьи API не тестировал, поскольку меня прежде всего вариант использования без лимитов.
На скриншоте выше страница сайта Supex Geo, на которой можно скачать php скрипт библиотеки и базу данных для него.
<?php require_once("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat');// здесь указываем путь до базы данных $ip = "88.85.172.134"; var_export($SxGeo->getCityFull($ip));// Вся информация о городе var_export($SxGeo->get($ip));// Краткая информация о городе или код страны
Реализация
Так как с WordPress я работаю редко (как и со всеми CMS) и написанием плагинов для него никогда не занимался, начал читать, как их писать и смотреть, как устроены существующие. Идею реализации взял с существующих гео-плагинов. Ещё долго думал писать функционально или объектно-ориентированно. Решил функционально, так как плагин не большой.
Вкратце опишу его работу.
При активации плагина инициируем две опции: тип бд и язык на котором будем вводить названия.
Далее
вызывают функцию
В которую приходит текущий контент. В зависимости от типа базы вызывается функция для получения данных. Затем идёт поиск специальных тегов в шаблоне и сверка их с данными о местоположении. Если данные совпадают то конструкция заменяется на содержимое из тегов, если нет — она удаляется.
Получение Geo-информации о IP-адресе пользователя с контроллера.
Теперь, когда у вас есть база данных и оболочка для чтения информации из нее, вы можете просто перейти к запросу информации из базы данных об указанном IP. Логика для достижения этой цели заключается в следующем: объявить переменную, которая содержит абсолютный (локальный) путь к базе данных GeoLite2-City. Это необходимо указать в качестве первого аргумента в новом экземпляре класса Reader GeoIp2, который вы будете использовать для запроса информации об IP. Наконец, выполните метод city из созданного экземпляра, предоставив IP-адрес, с которого вы хотите получить информацию в качестве первого аргумента. Очевидно, что вам нужно предоставить действительный IP-адрес, иначе читатель сгенерирует исключение, очевидно, вам также необходимо быть готовым к тому, что IP-адрес пользователя может не распознаваться базой данных, поэтому вам нужно поймать когда вы запрашиваете информацию о IP:
В нашем примере с указанным IP вы получите JSON-ответ следующего вывода в браузере:
Обратите внимание, что Переменная является объектом stdClass, поэтому здесь нет методов получения. Вы можете получить свойства объекта в PHP следующим образом:. MaxMind не предоставляет официальной поддержки для бесплатных баз данных GeoLite2
Если у вас есть вопросы о базах данных GeoLite2 или API GeoIP2, см. GeoIP вопросы и ответы от stackoverflow
MaxMind не предоставляет официальной поддержки для бесплатных баз данных GeoLite2. Если у вас есть вопросы о базах данных GeoLite2 или API GeoIP2, см. GeoIP вопросы и ответы от stackoverflow.
Описание методов библиотеки
nikolaevevgeGeoIp::get($ip) — принимает IP адрес в формате string. В случаи успеха возвращает стек адресов к которому принадлежит IP адрес(от и до в виде 2 строковых элементов массива), а так же город регион и страну к которым относится IP адрес. Если удалённый API сревис не может предоставить данные по IP адресу город, регион и страна возвращаются пустыми(такой запрос так же считается успешным). Если произошла ошибка возвращается false. Данные метод для получения результата обращается или к базе данных или к локальному кешу текущей PHP сессии, если не находит нужной информации выполняет запрос к удалённому серверу, затем сохраняя информацию в базу и локальный кеш.
nikolaevevgeGeoIp::getInfoByIpIPGeobase($ip) — метод аналогичен методу get с той лишь разницей, что запрос информации всегда осуществляется у удалённого API сервиса. Данный метод не рекомендуется использовать кроме как при тестировании, поскольку постоянные запросы к удалённому API сервису создают для него дополнительную нагрузку, а так же такие запросы более медленные чем запросы к базе данных или кешу текущей сессии. Использование данного метода напрямую в рабоичх проектах, примерно то же самое что стрелять из танка по тараканам — поскольку не используется 95% кода библиотеки и преимущества метода get.
nikolaevevgeGeoIp::getLastRequestTime — возвращает время на выполнение последнего запроса в секундах(не имеет значение каким именно образом библиотека получила данные) в виде числа с плавающей точкой, например 0.000427.
nikolaevevgeGeoIp::checkIP — служит для проверки корректности введённого IP-адреса. Принимает IPv4 адрес в формате string. Возвращает true если адрес корректен и false в обратном случаи.
nikolaevevgeGeoIp::IPToInt — преобразует строковой IP адрес в число(информация о стеках IP адресов хранится в базе данных в виде целых числел, поскольку такой подход оптимальнее для поиска, поэтому требуются функции преобразования IP адреса в число и обратно).
nikolaevevgeGeoIp::intToIP — преобразует число в строковой IP адрес.
Подключение к Kibana
Чтобы убедиться, что конфигурация Logstash выполнено и данные GeoIP добавлены, откройте Kibana в браузере.
Найдите сообщение о том, что приложение сгенерировано после включения модуля GeoIP для Logstash. В Nginx можно сузить поиск логов Kibana, набрав type: “nginx-access”.
Затем разверните одно из сообщений, чтобы просмотреть таблицу полей. Сообщение должно содержать несколько новых полей geoip, содержащих информацию о том, как IP-адрес был преобразован в реальное географическое положение.
Примечание: Если вы не видите никаких логов, сгенерируйте несколько логов, посетив приложение, и убедитесь, что временной фильтр установлен правильно. Если вы не видите никаких данных GeoIP (или же они неправильны), вероятно, следует проверить конфигурацию Logstash.
Если на экране появились правильные данные GeoIP, можно приступать к настройке визуализации карты.
Определение города по IP (Geo IP PRO) 6.0 nulled
22 мая, 2019 Opencart , Opencart Модули 2.х , Модули Opencart 2454 просмотров
Telegram
GeoIp Pro (группы покупателей, разные цены для городов) или ProgRoman — CityManager+GeoIP 6.0
Расширенная версия модуля GeoIP — включает в себя весь его функционал и обладает дополнительными возможностями.
Модуль определяет город по IP-адресу или домену либо пользователь выбирает его вручную. Автоматически заполняются поля Страна, Регион, Город, Индекс (не для всех) при регистрации и оформлении заказа, избавляя пользователя от ручного ввода.
Геосообщения — возможность выводить разный текст или html для городов и регионов (см. скриншоты и FAQ) .
Редиректы — в зависимости от города модуль может перебрасывать пользователя на нужный поддомен и URL.
Для всех стран можно задать свою валюту, она будет автоматически выставляться при определении по IP.
GeoIP Pro позволяет задавать разные цены на товары для городов через привязку групп покупателей к городам.
В Pro-версии можно привязать поддомен к городу и там всегда будет выставляться этот город, не зависимо от IP, это дает существенный выигрыш при региональном сео-продвижении сайта.
Модуль содержит базу населенных пунктов России (ФИАС), Украины, Белоруссии, Казахстана на русском языке.
Определение по IP работает для России, Украины, Белоруссии и Казахстана с точностью до города для других стран с точностью до страны.
Модуль русскоязычный, автор не гарантирует 100%-ю работу модуля для других языков. Настройка редиректов, геосообщений и групп покупателей возможна только для указанных выше стран.
Модуль работает на основе базы данных Sypex Geo и не делает запросы на сторонние сервисы, за счёт чего скорость определения города гораздо выше.
Установка:
1) Скопируйте в корень сайта содержимое папки upload.
2) Зайдите через браузер http://ВАШ_САЙТ/install-citymanager, выберите необходимые настройки и нажмите кнопку «Установить»,
установщик добавит в вашу базу необходимые таблицы. После установки папку install-citymanager можно удалить.
3) Зайдите в установщик модулей OpenCart (http://ВАШ_САЙТ/admin/index.php?route=extension/installer), загрузите файл citymanager.ocmod.xml.
4) Включите модуль в админке, введите лицензионный ключ. Проверьте на вкладке «Регионы», чтобы регионы соответствовали друг другу.
5) В любом шаблоне в том месте, где нужно вывести модуль вставьте: <div class=»prmn-cmngr» data-confirm=»true»></div>
Отредактируйте CSS-стили под тему своего шаблона в файле /catalog/view/javascript/jquery/progroman/progroman.city-manager.css
Если модуль не отображается, попробуйте обновить модификаторы в разделе Менеджер дополнений (Модификаторы/Modification) (http://ВАШ_САЙТ/admin/index.php?route=extension/modification),
Важно: если вы используете поддомены, установите для них одну сессию, для этого в .htaccess добавьте:
php_value session.cookie_domain .site.com
где site.com — ваш сайт
Продажник
Opencart 2.3
Geoip-v6 Opencart (11.4 MiB)
Геолокация на PHP
1. Качаем базу стран (в пакете geoip-database), городов, модуль для php и устанавливаем их в систему. Используется база MaxMind.
sudo apt-get install geoip-database libgeoip-dev php5-geoip wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoLiteCity.dat.gz sudo mkdir -v /usr/share/GeoIP sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
2. Проверяем, чтобы расширение php было подключено (/etc/php5/fpm/conf.d) и перезагружаем интерпретатор
sudo service php5-fpm restart
3. Проверяем установку, запустив в броузере скриптик.
array(11) { => string(2) "AS" => string(2) "RU" => string(3) "RUS" => string(18) "Russian Federation" => string(2) "48" => string(6) "Moscow" => string(0) "" => float(55.752201080322) => float(37.615600585938) => int(0) => int(0) }
Узнать код страны можно с помощью этой команды:
$country_code = geoip_record_by_name($_SERVER);
Также есть много других интересных функций этого расширения.
- geoip_continent_code_by_name — Получить двухбуквенный код континента
- geoip_country_code_by_name — Получить двухбуквенный код страны
- geoip_country_code3_by_name — Получить трехбуквенный код страны
- geoip_country_name_by_name — Возаращает полное название страны
- geoip_database_info — Получить версию БД GeoIP
- geoip_db_avail — Проверить доступность БД GeoIP
- geoip_db_filename — Возвращает имя файла БД GeoIP
- geoip_db_get_all_info — Возвращает всю информацию о файлах БД в виде многомерного массива
- geoip_id_by_name — Возвращает скоростную метрику интернет-канала пользователя (GEOIP_UNKNOWN_SPEED/GEOIP_DIALUP_SPEED/GEOIP_CABLEDSL_SPEED/GEOIP_CORPORATE_SPEED ).
- geoip_isp_by_name — Возвращает имя провайдера (ISP) пользователя
- geoip_org_by_name — Возвращает имя организации, за которой закреплен IP пользователя.
- geoip_record_by_name — Возвращает информацию о местоположении пользователя (континент, страна, город, широта и долгота).
- geoip_region_by_name — Возвращает код страны и региона
- geoip_region_name_by_code — Возвращает название региона страны и код региона
- geoip_time_zone_by_country_and_region — Возвращает часовой пояс клиента (по вычисленной стране и региону).
Причина появления этого сервиса?
С появлением интернета практически у каждого пользователя сейчас есть выход в глобальную сеть и хоть большинство трафика и приходится на социальные сети и развлекательный контент, все равно каждый пользователь хоть раз, но заказывал, что то себе из интернет магазина.
Но представьте себе, что вы живете в Комсомольск-на-Амуре и хотите заказать через интернет себе, допустим пару кроссовок или какую то одежду. Вы заходите в интернет и начинаете лихорадочно перебирать все сайты из поиска и большинство сайтов из того, что вы открыли были с представительством в Москве, а Вам нужно, что бы сайты открылись из вашего города, потому как доставку хотите уже на вечер. Более опытные люди сразу бы набрали в поиске купить кроссовки в Комсомольск-на-Амуре, но таких меньшинство. Вот поэтому «умные дяди» придумали для нас региональную выдачу, а другие придумали поддоменную иерархическую структуру своих интернет магазинов которая автоматически определяет по вашему IP из какого вы города и перенаправляет вас на нужный сайт (это прямо грубо на пальцах)
Настройка Logstash для поддержки GeoIP
Чтобы Logstash хранил координаты GeoIP, необходимо определить приложение, генерирующее логи, которые хранят внешние IP-адреса для фильтрации. Довольно часто в качестве такого приложения используется веб-сервер (например, Nginx или Apache); для примера в руководстве используются логи сервера Nginx.
Примечание: Если вы используете другие логи , просто внести необходимые коррективы в код.
В руководстве «Фильтры Logstash как способ улучшения сбора логов» фильтр Nginx хранится в 11-nginx.conf; при необходимости откорректируйте это значение.
Отредактируйте фильтр Nginx:
В раздел grok (блок if …) добавьте следующий код:
Этот код настраивает фильтр для преобразования IP-адресов, хранящихся в поле clientip (опция source), при помощи БД GeoLite City.
Примечание: В опции source нужно указать имя поля, в котором хранится IP-адрес пользователя Nginx (в данном случае это clientip); не забудьте изменить это значение, если IP-адреса хранятся в другом поле.
После редактирования фильтр Nginx (файл 11-nginx.conf) выглядит так:
Сохраните и закройте файл.
Чтобы обновить настройки, перезапустите Logstash:
Если всё настроено правильно, Logstashтбудет хранить координаты GeoIP и логи доступа Nginx (или другого приложения, в зависимости от конфигурации).
Обратите внимание, что эти изменения настроек не имеют обратной силы, так что ранее собранные логи не будут содержать данных для GeoIP
Функции плагина GeoTargeting Pro
Этот премиум плагин геолокации может определить местоположение посетителей сайта WordPress по их IP адресу. Более того, его возможности не ограничиваются только лишь определением страны. После входа в свой Maxmind GeoIP аккаунт плагин сможет установить даже город пользователя, а в некоторых случаях и почтовый индекс. Эта информация позволит вам определить, какой контент на вашем сайте должны видеть посетители с того или иного региона.
Кроме того, этот плагин поддерживает геологацию Cloudflare, что делает его даже более эффективным при выводе контента по локации пользователя.
После того, как вы определились, какой контент должен отображаться по конкретным регионам, плагин можно настроить с помощью шорткодов.
В сайдбаре также есть виджет, с помощью которого пользователь сможет самостоятельно выбрать свой регион вручную.
Определение города по ip с помощью Sypex Geo
Для определения города, потребуется загрузить архив с базой данных городов для Sypex Geo, распаковать его и загрузить на сервер.
Скрипт в этом случае будет следующий:
<?php // узнаем ip посетителя $ip = $_SERVER; require_once 'SxGeo.php'; // подключаем файл с базой данных городов $SxGeo = new SxGeo('SxGeoCity.dat', SXGEO_BATCH | SXGEO_MEMORY); $city = $SxGeo->get($ip); // также можно использовать следующий код // $SxGeo->getCity($ip); // широта $lat = $city; // долгота $lon = $city; // название города на русском языке $city_name_ru = $city; // название города на английском языке $city_name_en = $city; // ISO-код страны $country_code = $city; // для получения информации более полной информации (включая регион) можно осуществить через метод getCityFull $city = $SxGeo->getCityFull($ip); // название региона на русском языке $region_name_ru = $city; // название региона на английском языке $region_name_en = $city; // ISO-код региона $region_name_iso = $city;
Для автоматического обновления баз можно воспользоваться этим архивом. В этом архиве находится php скрипт. Этот скрипт необходимо настроить, т.е. указать в нём URL для скачивания базы и пути к файлам на сервере. После этого загрузить его на сервер и настроить его запуск по расписанию с помощью cron.
MaxMind
GeoIP2 сервис, практически монополист на рынке, предлагающий платные услуги по определению страны, города и других параметров.
Достоинство — самые актуальные базы и различные подходы к повышению точности определения.
Недостаток — услуга использования онлайн-сервиса платная, 0,0001 $ за запрос, причем платить нужно вперед. Однако, можно скачать бесплатную версию баз GeoLite2 Country или GeoLite2 City, разместить ее на сервере (для этого нужно иметь доступ к файловой системе), и использовать в C#, Java или php проекте ().
Рассматривать этот сервис подробно не будем, перейдем к более простым решениям.
Заключение
Почти все вышеперечисленные библиотеки предоставляют два вида баз данных IP адресов:
- облегченный, только со списком стран, как правило в названии содержит Country;
- более полный, в котором кроме стран также содержится инфо о крупных городах, как правило в названии содержит City и больше весит;
Более полная БД IP адресов с городами конечно будет работать немного медленнее в силу того что она больше по объему.
Наиболее правильно использовать GeoIP в виде PHP расширения. Т.к. работать он будет всегда и быстро. Также вы всегда можете обновить базы IP адресов.
Если нет возможности установить GeoIP в виде PHP расширения, то можно использовать один из composer пакетов: GeoIP, Sypex Geo, IP2LOCATION или TabGeo.
Если же использование composer пакета по какой-то причине не возможно, тогда остается использовать онлайн сервисы. Но обязательно нужно сделать кеширование запросов на эти сервисы в свою БД. Кеширование нужно для того что бы не отправлять один и тот же запрос по много раз. Достаточно один раз получить гео-инфу по интересующему ИП через онлайн сервис, после чего сохранить ее к себе в БД, и далее брать уже из БД. Таким образом вы уменьшите кол-во запросов на онлайн сервис и уменьшите вероятность того что онлайн сервис вас заблокирует за множественные запросы.