Содержание
- 1 Зачем нужен GeoIP
- 2 Под капотом гео-модуля
- 3 Ограничения
- 4 Установка, настройка, использование
- 5 Выводы
- 6 Оглавление
- 7 Отображение карт на сайте
- 8 Геокодирование
- 9 Разбор и автодополнение адресов
- 10 Поиск организаций
- 11 Определение местоположения пользователя по IP
- 12 Определение местоположения пользователя по координатам
- 13 Построение маршрута
- 14 Заключение
- 15 Зачем нужно определять местоположение посетителей?
- 16 Как определять местоположение посетителей?
- 17 API геолокации по IP адресу – обзор сервиса IPWHOIS.IO
Слушайте, я не узнаю́ вас в гриме! Кто Вы такой?
© Иван Васильевич меняет профессию
Зачем нужен GeoIP
Перед Вами стоит задача показывать разные телефоны/цены/наличие товаров в зависимости от города пользователя? Или может быть вы хотите упростить пользователю оформление заказа? — Эти задачи упираются в автоматическое определение страны/города по IP-адресу.
Сложно ли определить местоположение пользователя по IP-адресу? Пожалуй не сложно. А вот сделать это качественно — задачка не для слабонервных. Этому есть несколько причин:
- Точность определения крайне низкая и варьируется в зависимости от базы IP-адресов
- IP-адреса постоянно меняют местоположение, а обновлять базы владельцы сайтов забывают
- У разработчиков есть соблазн пойти по кривой дорожке и начать обращаться к онлайн-сервисам
- Разработчикам лень делать кэширование
- Название города, которое возвращают гео-базы, сложно связать с местоположениями сайта и бизнес-логикой.
- В Битриксе нет готового компонента для отображения/смены города
Разница в трудоемкости между “и так сойдет” и “надежным решением” составляет 20-40 человеко-часов. Мы долго набивали шишки, а когда надоело — собрали все наши наработки в один крутой модуль для 1С-Битрикс .
Под капотом гео-модуля
Несколько GEO IP баз на выбор
Всего существует 4,22 миллиарда IPv4 адресов. Они делятся между странами. Внутри стран между интернет-операторами. Последние в свою очередь распределяют их между городами присутствия. А потом перераспределяют по необходимости.
Существуют специальные реестры где зафиксировано это самое распределение. В рамках статьи мы будем называть их GeoIP-базами. Отличаются они частотой обновления, точностью и объемом дополнительных данных (названия городов на нескольких языках, почтовые индексы, названия интернет-операторов).
В модуле мы поддерживаем 3 обычные гео-базы:
и одну “мета-базу”: MaxMind + IpGeoBase.
MaxMind определяется местоположение вплоть до городов по всему миру. Но обновляется редко (бесплатная версия раз в месяц). С другой стороны IpGeoBase хорошо работает только по РФ и Украине, зато обновляется каждый день.
“Мета-база” определяет местоположение сначала по IpGeoBase. Если страна определена как Россия или Украина, данные считаются самыми точными. Если страна другая — обращаемся к MaxMind.
Независимость от кодировок
Разные базы хранятся в разных кодировках (CP1251, UTF-8). И сайты могут быть в разных кодировках. Это было непросто, но мы реализовали корректную работу всех гео-баз для сайтов в обеих кодировках.
Высокая скорость работы
Почти со всеми гео-базам можно обращаться и через веб-сервисы, и локально (после скачивания).
Начинающие разработчики часто выбирают первый вариант. Оно и понятно, это проще и не нужно заботиться об обновлении баз. Но есть 2 ложки дегтя:
- Зависнет веб-сервис — зависнет и сайт. Веб-сервис “умер” — сайт не открывается совсем.
- Обращение к веб-сервисам это сетевой запрос. А это в свою очередь “самая долгая” операция в программировании (10-100% от времени формирования всей страницы).
Мы (ИНТЕРВОЛГА) видели много примеров, когда разработчики шли этим путем и получали кучу проблем со скоростью работы сайта.
Наш модуль работает исключительно с локальными гео-базами. Кроме того, мы реализовали кеширование запросов к этим базам. Как результат определение местоположения по IP практически не влияет на скорость работы сайта.
Автоматическое обновление гео-баз
Локальные гео-базы это надежно. Но их нужно обновлять. А никто про это не помнит.
Специально на этот случай мы реализовали автоматическое обновление этих самых баз: только нужных, только если они изменились, с частотой необходимой для конкретной базы, с последующим сбросом кеша гео-запросов.
На выбор есть несколько способов: на агентах (по умолчанию), на хитах и на CRON.
Связь с местоположениями Битрикса
Геобазы возвращают текстовое название страны и города. Но без привязки к логике работы сайта толку от этого – ноль.
Давайте подробнее рассмотрим, зачем вообще нужно определение положения пользователя:
- Показать наличие и/или стоимость доставки в конкретном городе в карточке товара.
- Выбрать город по умолчанию в форме заказа.
- Показать разные номера телефонов в шапке для Москвы, Санкт-Петербурга, Города X и телефон по умолчанию для всех остальных.
К сожалению, в программном коде вы узнаете только название города вашего посетителя. Например, “Волгоград”. Для одной из трех задач этого хватит.
Для двух других задач потребуется сопоставить текстовое название города из гео-базы с местоположениями 1С-Битрикс . А они древовидные, а названия городов с гео-базами не совпадают (“Волгоград” vs “г. Волгоград”)…
Мы реализовали такое сопоставление хитрым алгоритмом и считаем получившийся результат достаточно качественным.
Интеграция с новым API Битрикса для геолокации
С версии 17.0.9 главного модуля в БУС добавлены службы геолокации и мы реализовали интеграцию нашего модуля с этим новым API.
Виджеты и компоненты
В модуле есть 2 компонента:
- Местоположение пользователя.
Виджет показывает текущий город посетителя с возможностью смены. - Автолокация.
Кнопка при нажатии на которую происходит определение местоположения и перезагрузка страницы. Дополнительно в этом компоненте реализовано определение города на основе Яндекс.Карт (точнее, но работает только в браузере — не на сервере).
Подробнее об их использовании — ниже.
Дополнительные сведения о браузере
Помимо определения GEO IP мы встроили в наш модуль определение информации о браузере посетителя (операционная система, мобильность, язык и т.д.) на основе параметра браузера “User Agent”.
Эта информация нужна редко, но в паре проектов нам пригодилась.
Интерфейс проверки
В разделе настройки модуля мы реализовали отдельную закладку для тестирования его возможностей.
Она позволяет быстро протестировать все доступные гео-базы на разных IP-адресах.
Ограничения
- Версия 1С-Битрикс >= 16.0
- Версия PHP >= 5.5.
Установка, настройка, использование
Рассмотрим как установить, настроить и начать использовать модуль на примере типового интернет-магазина 1С-Битрикс.
Установка и настройка модуля
После установки модуля необходимо в настройках (Настройки > Настройки продукта > Настройки модулей > ”GEOIP и расширенные данные о посетителе”) выбрать наиболее подходящую GeoIP-базу. Остальные настройки не трогаем без необходимости.
Сохраняем настройки и переходим на вкладку “Проверка”. Проверяем свой IP-адрес.
Местоположение определено верно? — Отлично.
Не верно? — Пробуйте другую гео-базу на вкладке “Основные”.
Для 1С-Битрикс 17+
Переходим в настройки геолокации 1С-Битрикс: Настройки > Настройки продукта > Геолокация. В списке доступных провайдеров открываем “INTERVOLGA: GeoIP и расширенные данные о посетителе”.
Активируем. Полем “Сортировка” устанавливаем самый высокий приоритет среди других провайдеров. Сохраняем.
Использование на уровне API
Давайте убедимся что модуль работает и разберемся как использовать его на уровне API.
В админ. панели на странице “Консоль PHP” выполните код
use BitrixMainLoader;
if (Loader::includeModule(‘intervolga.enrich’)) <
$result = IntervolgaEnrichProviderProxy::getIpInfo(‘88.87.88.238’);
var_dump($result);
>
Результат должен быть примерно такой
Выбор города в шапке сайта
Компонент называется intervolga:enrich.user.location. Вот так выглядит результат его работы.
Хотите получить полное описание настроек компонента и узнать как в своем коде узнать текущий выбранный/измененный город? — Поделитесь статьей в соц. сетях, укажите ссылку в форме ниже и мы пришлем Вам инструкцию.
Автоопределение города в оформлении заказа
Компонент enrich.autolocation – кнопочка, которая встраивается в старый шаблон компонента оформления заказа (версия Битрикса 16.0.11). По нажатию на эту кнопку происходит автоподстановка местоположения пользователя в поле ввода местоположения без перезагрузки страницы.
Если же у вас используется более новая версия Битрикса (17.0.+), компонент не нужен и местоположение будет определено автоматически за счет службы геолокации для автоопределения местоположения.
Выводы
Модуль intervolga.enrich был собран на базе наших лучших практик. Это универсальное надежное решение без каких-либо зависимостей.
Он закрывает большинство гео-задач встречаемых при разработке сложных интернет-магазинов:
- выбор города в шапке сайт,
- выбор города в профиле пользователя,
- выбор города в оформлении заказа,
- вывод определенного контента в зависимости от города.
В модуле есть публичные методы для получения информации о пользователе, которые можно использовать для расширения функционала своих решений.
В рамках практически любого онлайн-продукта можно встретиться с задачей, которая требует применения того или иного сервиса, связанного с картами, геокодированием, гео-позиционированием. Лично я уже почти 10 лет работаю над онлайн-каталогом недвижимости, а также в рамках ряда других проектов есть опыт использования специфичных функций различных онлайн гео-сервисов.
В этой статье я рассмотрю гео-задачи, которые наиболее часто встают перед программистами, сделаю небольшой обзор сервисов, предлагающих решения для этих задач, и поделюсь опытом использования этих сервисов.
Также рассчитываю на участие комментаторов — если заметите в обзоре неточность в описании, отсутствие вашего хорошего сервиса или вам просто есть что добавить к уже написанному — пишите в комментариях, я буду собирать всё в основной текст, чтобы на будущее всегда иметь под рукой хороший список инструментов на все случаи жизни.
Оглавление
Отображение карт на сайте
Очень популярная задача — это отображение на сайте онлайн-карт. Например, чтобы показать, в каком точно месте на карте находится ваш офис. Или где можно забрать вещь, которую продает автор объявления.
Для отображения карт используются два основных вида API:
- Javascript API (интерактивное)
- Static API (статичное)
Javascript API
Все сервисы, которые я разрабатывал, работают в основном с Россией, поэтому я расскажу о тех API, которыми пользовался сам и которые популярны у нас. Знаю, что есть API и у bing, и других провайдеров карт, но я ими не пользовался.
Javascript API позволяет показать на сайте интерактивную карту с возможностью изменения масштаба, отображения маркеров, взаимодействия с картой (перетаскивание маркеров, отображение всплывающих подсказок и прочее).
Javascript API Яндекс.Карт
Javascript API Google Maps
2ГИС API
Azure Maps
MapBox
- docs.mapbox.com/api/maps
- Симпатичные карты для веба и мобильных устройств
- Могу ошибаться, но кажется карты только на английском языке
- Для мобильных приложений бесплатно до 25000 пользователей в месяц, в вебе до 50000 загрузок в месяц
Static API
Статичное API может быть использовано там, где вам нужно показать просто картинку карты, без интерактива. Например, вы хотите приложить карту к электронному письму, или дать возможность пользователю распечатать схему проезда к вам. Ну или ваш дизайнер нарисовал макет, в котором вместо фона используется карта — грузить для такой задачи полноценные JS карты выглядит избыточным. Также статичную картинку можно использовать как превью для ускорения загрузки страницы у пользователя — а по клику делать её интерактивной.
Static API Яндекс.Карт
Static API Google maps
2ГИС Static API
MapBox
Геокодирование
Геокодирование — процесс, который позволяет узнать координаты объекта по его адресу. Ну или обратное геокодирование — по координатам узнать, что за гео-объект там находится. Фактически все сервисы геокодирования работают с адресами, введенными в произвольном формате, заодно приводя их к своему стандарту. Полностью бесплатных сервисов геокодирования на рынке в данный момент я не нашел.
Типичные применения геокодирования — отобразить на карте введенный пользователем адрес, или наоборот (обратное) — пользователь поставил на карте метку, нужно её превратить в адрес.
Геокодер Яндекс.Карт
«Подсказки» от DaData
Google Maps Geocoding API
- 5$ за 1000 запросов.
- Я не пользовался, потому что есть бесплатные аналоги от яндекса и дадаты
- developers.google.com/maps/documentation/geocoding/intro
GraphHopper
MapBox
OpenStreetMaps Nominatim
Разбор и автодополнение адресов
Иногда бывает нужно дать пользователю ввести адрес в произвольном формате, а потом превратить этот адрес в структурированные данные — отдельно название страны, региона, города, улицы и номер дома. Это нужно всем сервисам, которые работают с недвижимостью, это нужно для определения дублей адресов, для заполнения почтовых квитанций и т.д.
В принципе, с этой задачей без проблем справляются все сервисы геокодинга из списка выше. При прямом геокодинге кроме координат они также возвращают и структурированную информацию о найденном гео-объекте.
Отдельно стоит отметить сервис «стандартизация» от DaData — по адресам из России они возвращают еще массу разной полезной информации, по 10 копеек за каждый адрес:
dadata.ru/api/clean/address
Кроме того, к этом разделу я отношу также задачи поиска дополнительной информации об адресе. В частности это определение, к какому району города относится указанный адрес, и поиск ближайших станций метро — важные задачи, если мы делаем поиск объявлений по адресам.
Определение района в рамках города
Для определения района в рамках города я для себя нашел на данный момент два решения. Оба работают только для России.
Первое, и самое очевидное — DaData. Уже много было написано об этом сервисе, это действительно хороший сервис для работы с российскими адресами (и это не реклама). Попробуйте сами, убедитесь.
Если не хотите зависеть от стороннего сервиса — есть другое решение, которое я применял и продолжаю применять до сих пор. Это определение района по коду ОКАТО адреса. У каждого адреса в рамках России есть свой код ОКАТО — 11 цифр. Из них первые 5-8, в зависимости от города, однозначно указывают на район.
Я для тех городов, которые мне нужны, просто составил базу кодов ОКАТО для районов, получился примерно такой массив:
Следующий вопрос — как узнать код ОКАТО адреса? DaData возвращает его в рамках своих сервисов «Подсказки» и «Стандартизация». Есть сайт окато-октмо.рф который по адресу показывает код ОКАТО, используя ту же дадату. Наша задача — самостоятельно узнать код ОКАТО по адресу, не завися ни от какого сервиса.
Для этого нам нужно скачать свежую базу данных ФИАС и настроить поиск по ней. На хабре уже есть статья с примером как импортировать базу ФИАС в MSSQL. В общем, настраиваете поиск по ФИАСУ, находите там нужный вам адрес, узнаете его код ОКАТО, по коду ОКАТО из списков районов узнаете район — всё, задача решена.
Если не хотите париться с загрузкой 60 гигабайт XML файлов в свою базу, есть более дешевый, но и менее функциональный, чем dadata, сервис, который позволяет работать с базой ФИАС:
kladr-api.ru/docs
Поиск ближайших станций метро
Нужная функция, особенно для жителей Москвы, когда вам нужно по адресу найти ближайшие к нему станции метро. Для этой задачи в данный момент я знаю два решения:
Яндекс Геокодер
Сначала нужно узнать координаты адреса. Потом, как при обратном геокодировании, передаем в качестве параметров запроса эти координаты, и вид возвращаемого топонима kind=metro.
Отдельным параметром задаются размеры области, в пределах которой надо искать ближайшую станцию. Опытным путём я подобрал значения от 0,02 до 0,05 градусов в зависимости от города (в Москве радиус 2 километра от метро еще считается шаговой доступностью, а в Казани расстояние между станциями 1,5 километра).
Также есть проблема у такого метода, что иногда ближайшее по координатам метро не всегда ближайшее фактически (например находится на другом берегу реки, или вроде того). Определять ближайшее по доступности метро можно только с помощью сервисов построения маршрутов и матриц расстояний, о них будет в статье дальше. Для грубого определения ближайшей станции — геокодер яндекса вполне подходит, и дает выполнить до 25000 запросов в сутки бесплатно.
DaData
Поиск организаций
Распространенная задача, если вы хотите показать своим клиентам какие-то организации в его городе. Например, вы продаете товары с доставкой, и хотите показать человеку все пункты выдачи какой-то службы в его городе. Или вы изготавливаете макеты для печати, и показываете пользователю на карте все типографии, куда он может обратиться чтобы распечатать ваш макет.
Яндекс поиск по организациям
Google Places Api
Определение местоположения пользователя по IP
Частая задача в вебе — понять, из какого города на ваш сайт пришел посетитель. Для этой задачи есть решения в виде online-сервисов или самостоятельных решений для тех, кто не хочет зависеть от сторонних сервисов.
Онлайн сервис для определения города по IP — тут я могу посоветовать (для России) снова DaData: dadata.ru/api/detect_address_by_ip
Лимит — 10 000 запросов в сутки. Если ваша посещаемость превышает 10 000 уников в сутки, есть смысл рассмотреть решения, которые устанавливаются на ваш сервер. Подробно о них можно почитать в обзоре от DaData, как они выбирали, что использовать.
Вкратце продублирую информацию:
IpGeoBase — раньше был неплохой сайт, который ежедневно обновлялся и давал базу ip адресов и соответствующих им городов в понятном машинно-читаемом формате, легко импортируемом в любую базу данных. К сожалению, перестал обновляться в 2017 году.
ipgeobase.ru
SypexGeo — обновляется до сих пор, поставляется в виде скрипта php и базы данных к нему в собственном формате. Работает быстро, определяет хорошо
sypexgeo.net/ru/download
MaxMind предлагает скачать бесплатные базы со сниженной точностью и отдельно API к ним на различных языках программирования. Более точные базы доступны в рамках платных продуктов.
dev.maxmind.com/geoip/geoip2/geolite2
Определение местоположения пользователя по координатам
Задача схожа с задачей обратного геокодирования, с небольшими различиями.
Иногда нам нужно определить местоположение пользователя, когда мы точно знаем его координаты (например получили их используя датчики GPS устройства или Geolocation API в браузере). Тут есть два варианта — обратное геокодирование нам возвращает название того места, где находится пользователь. Но что произойдет, если пользователь находится где-то на трассе между городами, или в пригороде или просто в чистом поле и хочет посмотреть объявления о продаже участков на этом поле? Не всегда обратный геокодер с этим справится.
В этом случае лично я поступаю так — у меня в базе данных хранятся все координаты городов России, в которых у нас имеются объявления и с которыми мы вообще работаем. И по координатам пользователя я просто определяю ближайший к нему город из нашей базы, с помощью простого запроса:
Построение маршрута
Иногда бывает нужно построить маршрут от одной точки до другой. Например, составить схему проезда от местоположения пользователя до вашего офиса. Платные решения есть от Яндекса и от Гугла — основное их отличие в том, что Яндекс продает подписку с годовой оплатой, а гугл тарифицирует запросы поштучно и списывает деньги с карты раз в месяц по итогу месяца.
Также у гугла есть премиум-подписка, которая дает некоторые дополнительные функции (например увеличение максимального размера картинки Static API) и депозит на лимиты. Также есть решение от 2Гис — самое дорогое в пересчете на 1 построенный маршрут.
Задачи построения маршрутов делятся на несколько подзадач:
- Построение маршрута от точки до точки — это понятно
- Матрица расстояний — сервис, который позволяет построить матрицу расстояний и времени в пути между набором точек отправления и прибытия. Например, если вам нужно расчитать оптимальные маршруты для нескольких курьеров, которым нужно с разных складов доставить товар разным покупателям. Или вы предлагаете клининговые услуги и вам нужно выяснить, какому уборщику будет удобнее из дома добраться до каждого из сегодняшних заказов и составить оптимальную схему перемещения уборщиков.
- Isochrone API — построение вокруг точки области, до которой можно добраться за одинаковое время. Например, «найти все кафе в 15 минутах ходьбы от положения пользователя».
Разные провайдеры предлагают разные решения для всех этих задач.
Благодаря 3aiats было найдено бесплатное Open Source решение —
GraphHopper
- www.graphhopper.com/open-source
- Устанавливается на ваш сервер, использует OpenStreetMap для построения маршрутов, работает на Java
- Есть бесплатное и платное API для тех, кто не хочет ставить это ПО себе на сервер.
- Есть API для геокодирования, построения маршрутов, построения матриц расстояний и оптимизации маршрутов, а также isochrone
MapBox (спасибо ne_kotin)
- docs.mapbox.com/api/navigation
- Есть API для геокодирования, построения маршрутов, построения матриц расстояний и оптимизации маршрутов.
- Бесплатно до 100 000 запросов в месяц
Яндекс
Общая особенность всех сервисов Яндекса для маршрутов — они работают на территории России, Абхазии, Азербайджана, Армении, Беларуси, Грузии, Казахстана, Кыргызстана, Молдовы, Таджикистана, Турции, Узбекистана и Украины.
- tech.yandex.ru/routing/router
- tech.yandex.ru/routing/distance_matrix
- Тарифы от 120 000 рублей в год
- Есть API для построения маршрутов и матриц расстояниц
- Учитывает пробки, в том числе прогнозируемые на заданное время в будущем
- Умеет строить маршруты пешеходные, на транспорте личном и общественном
Есть сервис app.swizz.ru, который использует API яндекса для построения маршрутов. У сервиса нет своего API, и он испытывает проблемы с лимитами от Яндекса, но по сути там можно посмотреть, как работает яндексовский построитель маршрутов. За ссылку спасибо 3aiats
Главное отличие от яндекса — тарификация по принципу Pay-as-you-go, то есть за каждый запрос. Для небольших объемов тарифы будут выгоднее у Гугла, для больших — у Яндекса.
Также у гугла нет ограничения по странам, где они строят маршруты.
Google Directions Api
- developers.google.com/maps/documentation/directions/intro
- Тариф 5$ либо 10$ за 1000 запросов. 10 – если используется оптимизация с учетом пробок и промежуточных путевых точек. 5 – если просто маршрут между 2 точками.
- По функциям аналог сервиса Яндекса для построения маршрутов между 2 точками, но имеет больше настроек
- В частности, умеет предлагать несколько альтернативных маршрутов
Google Distance Matrix API
Google Roads API
Уникальный сервис гугла, позволяющий работать с дорогами, по которым едет ваш транспорт.
Автоматически привязывает точки вашего маршрута к дорогам, показывает лучшую схему движения и всю информацию об участках дорог, которые повстречаются вам на пути.
Умеет к точкам привязывать ближайшие к ним участки дорог (например по GPS треку который скачет туда-сюда — показать по каким дорогам по факту был пройден маршрут).
Умеет показывать ограничения скорости на дорогах на маршруту.
WikiRoutes
- wikiroutes.info/developers
- Строят маршруты с использованием общественного транспорта
- Есть платное API для интеграции с сайтом
Azure Maps
- azure.microsoft.com/ru-ru/services/azure-maps
- Большое количество сервисов, в том числе построитель маршрутов
- Есть бесплатные лимиты и платное API
2Гис Логистика
- logistics.2gis.ru
- Сервис для построения маршрутов
- 5 маршрутов в день за 3500 рублей в месяц, готовы обсуждать повышение лимита
- За отдельные деньги есть отслеживание перемещения курьера и другие доп функции
Сервисы для оптимизации логистики
Как отдельный класс сервисов для построения маршрутов стоит выделить готовые решения для оптимизации логистики, которые тарифицируются исходя из количества курьеров/машин на линии. По сути они комбинируют средства для построения маршрутов и другие сервисы чтобы максимально оптимизировать вашу логистику. Это достаточно сложные и нишевые решения, поэтому я их объединил в один список.
За пополнение списка спасибо 3aiats
- tech.yandex.ru/routing/vrp
- zig-zag.org
- quickrun.ru
- maxoptra.ru
- www.antor.ru
Заключение
В современном мире вы можете найти готовый сервис фактически для любой задачи, которую вам нужно решить, либо решить её с помощью комбинации сервисов из списка выше. Вопрос только в стоимости этого решения, насколько оно будет для вас выгодно.
Многие сервисы по мере роста популярности переходят на всё более жесткие системы монетизации — как бесплатные когда-то карты гугла стали полностью платными, так же и Яндекс постепенно к этому идет.
Есть открытые OpenStreetMaps, которые вроде как можно заставить решать все задачи из списка, но для этого вам нужно их разворачивать у себя, и помимо своего проекта отдельно поддерживать еще целую инфраструктуру для карт — насколько это нужно, каждый решает для себя сам.
Вероятно, в обзоре я не указал некоторые отличные сервисы, которыми вы пользуетесь, либо вы пользовались сервисами из обзора и вам есть что добавить к уже написанному — пишите в комментариях, буду добавлять в текст.
Сегодня мы поговорим о том, как сделать геолокацию по IP адресу на сайте, т.е. определение местоположения посетителей, при этом я расскажу, наверное, о самом простом способе реализации этой задачи, который подходит разработчикам.
Начну я с вопроса, а зачем вообще нужен такой функционал на сайте?
Зачем нужно определять местоположение посетителей?
Большинство современных сайтов, в частности интернет-магазины, сервисы и даже обычные корпоративные ресурсы ориентированы на достаточно большую аудиторию, которая нередко располагается по всему миру. При этом для каждой страны сайт должен отображать соответствующий контент, например, язык, цены, валюту и многое другое. Даже относительно одной страны, контент для каждого региона достаточно часто нужно отображать разный. Допустим, у того же самого интернет-магазина может быть несколько филиалов, которые расположены в разных регионах, и чтобы посетителю показывать наличие товаров в филиале, территориально относящемуся к конкретному посетителю, нужно знать местоположение этого посетителя.
Также определять местоположение посетителей требуется и для фильтрации трафика, например, чтобы отфильтровать ботов или нежелательный трафик.
Таким образом, геолокация на сайте нужна для того, чтобы настроить отображение контента в зависимости от местоположения посетителя или фильтрации трафика.
Как определять местоположение посетителей?
Существует несколько различных способов определения местоположения по IP адресу, сегодня я расскажу о способе, который подходит разработчикам, ведь он подразумевает использование API, т.е. программного интерфейса, в нашем случае интернет сервиса. К основным плюсам такого способа можно отнести:
- Простота интеграции функционала в свое приложение;
- Отсутствие необходимости настраивать локальные библиотеки GeoIP.
Во многих популярных CMS, включая и WordPress, и Joomla, есть различные плагины, модули и компоненты, которые, так или иначе, используют данные о местоположении посетителя. Функционал в подобных компонентах и плагинах в большинстве случаев как раз и использует API интерфейс для определения местоположения посетителя. Поэтому если Вы хотите реализовать свой виджет, плагин, модуль или компонент, который должен работать с данными геолокации, то использование API будет наиболее простым решением.
Принцип использования API для реализации геолокации следующий: Вы определяете IP адрес посетителя, затем делаете обычный GET запрос к интернет сервису, который позволяет определять местоположение по IP адресу, и у которого есть API интерфейс, а в качестве параметра Вы как раз и передаете IP адрес посетителя. В ответ он Вам возвращает данные о геолокации, обычно в формате XML или JSON, Вам, в свою очередь, остается обработать полученные данные.
API геолокации по IP адресу – обзор сервиса IPWHOIS.IO
Теперь давайте поговорим о сервисах, у которых есть интерфейс, позволяющий определять местоположение по IP адресу, точнее, сегодня я хочу рассказать Вам всего об одном таком сервисе – это IPWHOIS.IO, основная функция которого – это как раз API геолокации по IP адресу.
Основные особенности IPWHOIS.IO:
- Обновление данных в режиме реального времени – Вы всегда будете получать только актуальную информацию, при этом самостоятельно Вам ничего не нужно обновлять;
- Быстрая работа — серверы IPWHOIS.io расположены по всему миру, что позволяет обрабатывать запросы максимально быстро;
- Безопасная работа – взаимодействие с сервисом происходит по защищенному протоколу HTTPS;
- Поддержка IPv4 и IPv6 – в качестве параметра Вы можете предавать адреса и IPv4, и IPv6;
- Поддержка JSON, XML и Newline – сервис может возвращать данные в нескольких форматах на Ваш выбор, это может быть JSON, XML или Newline;
- Доступно бесплатное использование – сервис позволяет обрабатывать до 1000 запросов в день абсолютно бесплатно, если у Вас небольшой проект, то Вам за использование этого сервиса даже платить не нужно.
Как работать с IPWHOIS.IO?
Сейчас давайте я покажу, как происходит взаимодействие с этим сервисом. Кстати, этот сервис Вы можете использовать и для простого определения местоположения по IP адресу, иными словами, если Вам нужно получить информацию об IP адресе, т.е. геолокацию, Вы можете зайти на IPWHOIS.IO, ввести нужный IP адрес и в ответ получить всю необходимую информацию. Для начала давайте я покажу, как это делается, т.е. как узнать местоположение по IP адресу, разработчики таким способом могут просто проверить работу сервиса.
Переходим на сайт сервиса https://ipwhois.io/ и вводим в специальное поле нужный IP адрес. По умолчанию отображается информация о Вашем IP адресе, другими словами, чтобы получить информацию о Вашем собственном местоположении по IP адресу, достаточно просто перейти на сайт этого сервиса.
Для того чтобы узнать местоположение по какому-то чужому IP, как я уже сказал, вводим IP в поле и нажимаем кнопку поиска.
Чтобы получить точно такую же информацию, но уже, например, в формате JSON можно послать следующий GET запрос
- free.ipwhois.io — адрес интерфейса, для бесплатного использования он такой;
- json – формат возвращаемых данных, если указать XML, то, соответственно, данные вернутся в формате XML;
- 8.8.4.4 – IP адрес, местоположение которого нужно узнать.
В данном случае в ответ Вы получите следующие данные (формат JSON):
Что означает каждый из этих параметров, Вы можете найти в документации, если вкратце, то:
- ip — Запрашиваемый IP адрес;
- success — Статус операции;
- message — Сообщение в случае ошибки (success = false);
- type — Тип IP адреса (IPv4 или IPv6);
- continent — Название континента;
- country — Название страны;
- region — Регион;
- city – Город;
- isp — Имя провайдера;
- currency_code — Код валюты страны.
Как видите, сервис возвращает кроме данных о местоположении еще и дополнительную информацию об этом месте, например, используемая на этой территории валюта, что позволяет Вам автоматически определять валюту, которую необходимо использовать при взаимодействии с конкретным посетителем.
У меня все, надеюсь, этот сервис поможет Вам сделать геолокацию на сайте или в своем приложении, пока!