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

  • (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-адресою?
Місцезнаходження визначено вірно?
Не вірно?
Хочете отримати повний опис налаштувань компонента і дізнатися як в своєму коді дізнатися поточний обраний / змінений місто?

Новости

Все товары для праздника оптом купить
Как сделать правильный выбор в работе, бизнесе и жизни, о котором никогда не придется жалеть. Мы хотим рассказать вам об удивительной и очень простой технике 7 вопросов, которые позволят оценить ситуацию

Пиротехника своими руками в домашних
Самые лучшие полезные самоделки рунета! Как сделать самому, мастер-классы, фото, чертежи, инструкции, книги, видео. Главная САМОДЕЛКИ Дизайнерские

Фольгированные шары с гелием
Для начала давайте разберемся и чего же выполнен фольгированный шар и почему он летает дольше?! Как вы помните, наши латексные шарики достаточно пористые, поэтому их приходится обрабатывать специальным

Как сделать красивую снежинку из бумаги
Красивые бумажные снежинки станут хорошим украшением дома на Новый год. Они создадут в квартире атмосферу белоснежной, зимней сказки. Да и просто занимаясь вырезанием из бумаги снежинок разнообразной

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

Как сделать из бумаги самолет
 1. Самолеты сделанный по первой и второй схеме являются самыми распространенными. Собирается такое оригами своими руками достаточно быстро, несмотря на это самолет летит достаточно далеко за счет свое

Аниматоры на детские праздники в Зеленограде
Уж сколько раз твердили миру…Что готовиться ко дню рождения нужно заранее, а не бегать в предпраздничный день угорелой кошкой. Нельзя впихнуть в 24 часа дела, рассчитанные на недели. К празднику нужно

2400 наименований пиротехники
В последние десятилетия наша страна может похвастаться появлением нескольких десятков отечественных производителей, специализирующихся на выпуске пиротехники. Если вы сомневаетесь, какой фейерверк заказать,