- Навіщо потрібен GeoIP Перед Вами стоїть завдання показувати різні телефони / ціни / наявність товарів...
- Незалежність від кодувань
- Висока швидкість роботи
- Автоматичне оновлення гео-баз
- Зв'язок з місцями розташування Бітрікс
- Інтеграція з новим API Бітрікс для геолокації
- Віджети та компоненти
- Додаткові відомості про браузер
- інтерфейс перевірки
- обмеження
- Установка і настройка модуля
- Використання на рівні API
- Вибір міста в шапці сайту
- Автоопределение міста в оформленні замовлення
- висновки
Навіщо потрібен 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 Bitrix \ Main \ Loader;
if (Loader :: includeModule ( 'intervolga.enrich')) {
$ result = \ Intervolga \ Enrich \ ProviderProxy :: getIpInfo ('88 .87.88.238 ');
var_dump ($ result);
}
Результат повинен бути приблизно такий
Вибір міста в шапці сайту
Компонент називається intervolga: enrich.user.location. Ось так виглядає результат його роботи.
Хочете отримати повний опис налаштувань компонента і дізнатися як в своєму коді дізнатися поточний обраний / змінений місто? - Поділіться статтею в соц. мережах, вкажіть посилання в формі нижче і ми надішлемо Вам інструкцію.
Автоопределение міста в оформленні замовлення
Компонент enrich.autolocation - кнопочка, яка вбудовується в старий шаблон компонента оформлення замовлення (версія Бітрікс 16.0.11). При натисканні на цю кнопку відбувається автопідстановка місця розташування користувача в поле введення розташування без перезавантаження сторінки.
Якщо ж у вас використовується більш нова версія Бітрікс (17.0. +), Компонент не потрібен і місце розташування буде визначено автоматично за рахунок служби геолокації для автовизначення розташування.
висновки
модуль intervolga.enrich був зібраний на базі наших кращих практик. Це універсальне надійне рішення без будь-яких залежностей.
Він закриває більшість гео-задач зустрічаються при розробці складних інтернет-магазинів:
- вибір міста в шапці сайт,
- вибір міста в профілі користувача,
- вибір міста в оформленні замовлення,
- висновок певного контенту в залежності від міста.
У модулі є публічні методи для отримання інформації про користувача, які можна використовувати для розширення функціоналу своїх рішень.
Оцініть статтю:
Або може бути ви хочете спростити користувачеві оформлення замовлення?Чи складно визначити місце розташування користувача за IP-адресою?
Місцезнаходження визначено вірно?
Не вірно?
Хочете отримати повний опис налаштувань компонента і дізнатися як в своєму коді дізнатися поточний обраний / змінений місто?