Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Визначення міста по GeoIP і геозалежні на сайтах

  1. Навіщо потрібен GeoIP Перед Вами стоїть завдання показувати різні телефони / ціни / наявність товарів...
  2. Незалежність від кодувань
  3. Висока швидкість роботи
  4. Автоматичне оновлення гео-баз
  5. Зв'язок з місцями розташування Бітрікс
  6. Інтеграція з новим API Бітрікс для геолокації
  7. Віджети та компоненти
  8. Додаткові відомості про браузер
  9. інтерфейс перевірки
  10. обмеження
  11. Установка і настройка модуля
  12. Використання на рівні API
  13. Вибір міста в шапці сайту
  14. Автоопределение міста в оформленні замовлення
  15. висновки

Навіщо потрібен GeoIP

Перед Вами стоїть завдання показувати різні телефони / ціни / наявність товарів в залежності від міста користувача? Або може бути ви хочете спростити користувачеві оформлення замовлення? - Ці завдання впираються в автоматичне визначення країни / міста по IP-адресою.

Чи складно визначити місце розташування користувача за IP-адресою? Мабуть не складно. А ось зробити це якісно - завдання не для людей зі слабкими нервами. Цьому є кілька причин:

  1. Точність вкрай низька і варіюється в залежності від бази IP-адрес
  2. IP-адреси постійно змінюють місце розташування, а оновлювати бази власники сайтів забувають
  3. У розробників є спокуса піти по кривій доріжці і почати звертатися до онлайн-сервісів
  4. Розробникам лінь робити кешування
  5. Назва міста, яке повертають гео-бази, складно пов'язати з місцями розташування сайту і бізнес-логікою.
  6. У Бітрікс немає готового компонента для відображення / зміни міста

Різниця в трудомісткості між "і так зійде" і "надійним рішенням" становить 20-40 людино-годин. Ми довго набивали гулі, а коли набридло - зібрали всі наші напрацювання в один крутий модуль для 1С-Бітрікс .

Під капотом гео-модуля

Кілька GEO IP баз на вибір

Всього існує 4,22 мільярда IPv4 адрес. Вони діляться між країнами. Усередині країн між інтернет-операторами. Останні в свою чергу розподіляють їх між містами присутності. А потім перерозподіляють по необхідності.

Існують спеціальні реєстри де зафіксовано це саме розподіл. В рамках статті ми будемо називати їх GeoIP-базами. Відрізняються вони частотою оновлення, точністю і обсягом додаткових даних (назви міст на декількох мовах, поштові індекси, назви інтернет-операторів).

У модулі ми підтримуємо 3 звичайні гео-бази:

і одну "мета-базу": MaxMind + IpGeoBase.

MaxMind визначається місце розташування аж до міст по всьому світу. Але оновлюється рідко (безкоштовна версія раз на місяць). З іншого боку IpGeoBase добре працює тільки по РФ і Україні, зате оновлюється щодня.

"Мета-база" визначає місце розташування спочатку по IpGeoBase. Якщо країна визначена як Росія або Україна, дані вважаються найточнішими. Якщо країна інша - звертаємося до MaxMind.

Незалежність від кодувань

Різні бази зберігаються в різних кодуваннях (CP1251, UTF-8). І сайти можуть бути в різних кодуваннях. Це було непросто, але ми реалізували коректну роботу всіх гео-баз для сайтів в обох кодуваннях.

Висока швидкість роботи

Майже з усіма гео-баз можна звертатися і через веб-сервіси, і локально (після скачування).

Початківці розробники часто вибирають перший варіант. Воно і зрозуміло, це простіше і не потрібно піклуватися про оновлення баз. Але є 2 ложки дьогтю:

  • Зависне веб-сервіс - зависне і сайт. Веб-сервіс "помер" - сайт не відкривається зовсім.
  • Звернення до веб-сервісів це мережевий запит. А це в свою чергу "найдовша" операція в програмуванні (10-100% від часу формування всієї сторінки).

Ми (ИнтерВолга) бачили багато прикладів, коли розробники йшли цим шляхом і отримували купу проблем зі швидкістю роботи сайту.

Наш модуль працює виключно з локальними гео-базами. Крім того, ми реалізували кешування запитів до цих баз. Як результат позиціонування на основі IP практично не впливає на швидкість роботи сайту.

Автоматичне оновлення гео-баз

Локальні гео-бази це надійно. Але їх потрібно оновлювати. А ніхто про це не пам'ятає.

Спеціально на цей випадок ми реалізували автоматичне оновлення цих самих баз: тільки потрібних, тільки якщо вони змінилися, з частотою необхідної для конкретної бази, з подальшим скидом кеша гео-запитів.

На вибір є кілька способів: на агентах (за замовчуванням), на хітах і на CRON.

Зв'язок з місцями розташування Бітрікс

Геобази повертають текстове назва країни і міста. Але без прив'язки до логіки роботи сайту толку від цього - нуль.

Давайте докладніше розглянемо, навіщо взагалі потрібно визначення положення користувача:

  1. Показати наявність і / або вартість доставки в конкретному місті в картці товару.
  2. Населений пункт за замовчуванням в формі замовлення.
  3. Показати різні номери телефонів в шапці для Москви, Санкт-Петербурга, Міста 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-адресою?
Місцезнаходження визначено вірно?
Не вірно?
Хочете отримати повний опис налаштувань компонента і дізнатися як в своєму коді дізнатися поточний обраний / змінений місто?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.