Sypex Geo - швидке визначення міста за IP. Визначення міста відвідувача Визначення міст ip js

Оновлено від 05.02.2016

В даний момент API Карт, що підключається до панелі керування uCoz повертає тільки країну та координати відвідувача.

Про замітку

Визначення розташування покупця - одне з найважливіших завдань в електронній комерції.

У замітці будемо розглядати спосіб визначення країни, регіону та міста відвідувача для сайту. Вся інформація отримана з пісочниці API Яндекс.Карт, ми просто підготуємо її для магазину uCoz.

Підключення сервісу Яндекс.Карти

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

У налаштуваннях гортаємо вниз сторінки та вибираємо у пункті "Використовувати сервіс карт:" - Yandex Maps.

Тепер необхідно отримати API ключ для інтернет магазину, нам запропоновано перейти за посиланням "Отримати ключ для вибраного API". Зробимо це.

На сторінці заповнюємо дані і натискаємо "Отримати API ключ".

Визначення розташування

Насамперед необхідно в head сторінки (наприклад, оформлення замовлення) помістити код:

Тепер розміщуємо сам скрипт позиціонування.

Очікуємо завантаження API та готовності DOM.

Ymaps.ready(init);

Записуємо місце:

Function init() (  // Дані про місцезнаходження, визначене за IP   var geolocation = ymaps.geolocation;  // Результат дивимося в консолі   console.log(geolocation.country, geolocation.city, geolocation.region); )

Після того, як ми отримали дані про місцезнаходження, ми можемо робити з ними все, що захочемо: заповнити користувача форму замовлення, відобразити особливі умови доставки, приховати непотрібні способи оплати, показати вартість доставки на сторінці товару.

Змінна Опис
geolocation.countryКраїна
geolocation.regionРегіон
geolocation.cityМісто
Автозаповнення адреси доставки

Розширимо наш скрипт, щоб полегшити користувачам оформлення замовлення, внесемо отримані дані про місцезнаходження у поле форми "Адреса доставки".

Для цього нам потрібно знати id поля з адресою доставки, для цього заходимо до Панелі керування сайтом - Інтернет магазин - Управління полями замовлення. Дивимося останню перед символом "$" цифру в "Код поля шаблону":

Разом

Об'єднаємо всі разом і отримаємо:

Ymaps.ready(init); function init() (  var geolocation = ymaps.geolocation;  if (geolocation) (  $("#order-fld-2").html(geolocation.country + ", " + geolocation.region + ", " + geolocation.city );   ) else (  console.log("Не вдалося встановити місце розташування");  ) )

І не забудьте замінити id поля на свій та підключити до head сторінок. Успіхів!

У якій згадувався мій «велосипед», що відрізняється високою швидкістю роботи. Одним із популярних питань стала можливість визначення міста за ІР.

І ось кілька місяців по тому, проект починався, як «for fun» переріс у самостійний проект.
Відкрито окремий сайт присвячений проекту Sypex Geo, на якому можна завантажити свіжі версії API та баз даних, а також ознайомитись із документацією.

Для бажаючих швидше протестувати правильність визначення міста по IP - ось посилання на демо-сторінку. А під хабракатом я опишу деякі технічні подробиці та наведу результати невеликого тестування.

Формат Sypex Geo 2.1 З моменту публікації останньої статті формат Sypex Geo (скорочено SxGeo) був оптимізований, а також додана можливість включення до БД двох довідників - міст і регіонів.

При створенні нового формату ставилися такі пріоритети:

  • висока швидкість
  • низьке споживання ресурсів
  • відкритість (специфікації формату бінарного файлу БД та API відкриті)
  • універсальність (можливість створення баз даних із будь-якими наборами даних)
Формат дозволяє зберігати дані у різному кодуванні. Після виходу з бети будуть опубліковані скрипти для конвертування бази даних з MySQL в бінарний файл БД.

У БД зберігається така інформація:

  • ID країни
  • Код країни ISO 3166-1 (двосимвольний)
  • Код регіону FIPS 10-4 (двосимвольний)
  • Назва регіону (опціонально)
  • Місто
  • Широта
  • Довгота
  • Timezone (опціонально)
Цей список може бути змінений та/або розширений за потреби. Детальнішу інформацію про формат SxGeo 2.1 можна знайти на сайті. Власна база даних Після дуже близького знайомства з популярною системою геолокації GeoLite City від MaxMind було прийнято рішення про створення власної бази даних. Проблема полягає в тому, що в GeoLite City дуже багато неточностей, сміття, міст дублікатів, зайвого дроблення діапазонів, а також проблем з містами колишнього СРСР (наприклад, замість міст взяті назви фірм або відповідальні імена з Whois).

На даний момент база заснована на GeoLite City, але вже містить повністю перероблене покриття Росії, України та Білорусі. Поступово уточнюватимуть інші країни, насамперед СНД та Європа. База даних Sypex Geo City містить назви міст і регіонів російською мовою в UTF-8 (зустрічаються ще не перекладені назви), а також timezone.

Крім того, на сайті доступні інші бази даних перетворені у формат SxGeo 2.1.

Використання Використання Sypex Geo API є максимально спрощеним.
1. Скопіювати SxGeo.php та SxGeoCity.dat (або інші бази) на сервер 2. Підключити файл SxGeo.php у свій скрипт, додавши рядок include("SxGeo.php"); 3. Створити об'єкт SxGeo // $ SxGeo = New SxGeo (); // Режим за промовчанням, файл бд SxGeo.dat $SxGeo = новий SxGeo("SxGeoCity.dat", SXGEO_BATCH | SXGEO_MEMORY); // Найшвидший режим 4. Визначаємо місто (SxGeo City, GeoLite City, IpGeoBase) $ SxGeo-> get ($ ip); (Повертає інформацію про місто, без назви регіону та тимчасової зони) // $SxGeo->getCityFull($ip); (Повертає повну інформацію про місто та регіон) Тестування продуктивності І на десерт, невелике порівняльне тестування продуктивності. Як опонентів виступають GeoLite API та Geobaza API. Всі учасники тестування використовують бінарну базу даних власного формату та використовують API на PHP. Тестування відбувається під Win 7 (на Linux пропорції зберігаються), PHP 5.2.17.

Результати після 10 прогонів для кожного API у двох режимах (звичайному та з кешуванням у пам'яті) усереднення та округлення до десятків. Для кожного прогону створюється масив із 50 000 випадкових IP-адрес, і в циклі здійснюється пошук кожним алгоритмом.

Пропозиція та побажання вітаються. Також шукаються охочі допомогти з портуванням API іншими мовами, і створенням модулів для Apache і nginx.

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

Встановлення

Підключаємо бібліотеку Яндекса:

Парсим дані про місцезнаходження:


window.onload = function () (
jQuery("#user-city").text(ymaps.geolocation.city);
jQuery("#user-region").text(ymaps.geolocation.region);
jQuery("#user-country").text(ymaps.geolocation.country);
}

У тому місці, де потрібно вивести місто, регіон і країну вставляємо:

Ви можете просто скопіювати всі три фрагменти та вставити в одному місці на сайті. Дивно, але я перевіряв скрипт на демо-сайті і він не виводив жодних даних. Вставивши на Урааа, скрипт видав усі дані по місту, регіону та країні. Причину чомусь на демо-сайті скрипт не працював поки не зрозумів.

Якщо ви хочете зробити автоматичне заповнення міста десь на сайті (наприклад, у формі замовлення), то дізнайтесь ID поля та замініть його вміст таким чином:

jQuery("#user-city").val(ymaps.geolocation.city);

Всім привіт!

Не скажу, що часто, але іноді у розробників виникає необхідність визначення міста по IP в PHP скрипті.

Наприклад, ви вирішили полегшити роботу користувачу щодо введення контактної інформації при оформленні замовлення в Інтернет-магазині. Або хочете встановлювати мову інтерфейсу сайту залежно від країни, з якої на сайт зайшов відвідувач.

Ну, а найчастіше визначення міста IP в PHP за допомогою GeoIP, напевно, потрібно розробникам різних рекламних мереж, щоб пропонувати користувачам таргетовану рекламу в залежності від географічного розташування.

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

А поки що поговоримо про те, скільки способів визначення міста та країни по IP в PHP існує і які варіанти їх реалізацій існують.

PHP GeoIP – стандартний функціонал стороннього виробництва

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

PHP GeoIP — це стороння бібліотека, яку необхідно підключати додатково, незважаючи на те, що опис функцій, що входять до неї, є частиною офіційної документації PHP — http://php.net/manual/ru/ref.geoip.php

У принципі, мотиви розробників PHP цілком зрозумілі.

По-перше, включення даного модуля в комплект мови вимагає великої кількості серверних ресурсів.

По-друге, GeoIP PHP працює на базі переліку IP адрес, що відповідають певним країнам та містам. Тому GeoIP PHP вимагає постійної підтримки та розширення/модернізації існуючої бази, що було б зайвим головним болем розробників PHP.

Ну, і по-третє, визначення міста по IP в PHP — можливість, що досить рідко використовується на практиці.

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

Я займатися описом процесу її установки на сервер, т.к. я сам на практиці цим не займався, і в Інтернеті зараз повно мануалів зі встановлення PHP GeoIP як на Linux, так і на сервері Windows.

Можу тільки сказати, що в даного способу визначення міста, країни та іншої гео інформації по IP в PHP є два суттєві мінуси:

  • Доступ до бази повної інформації на IP адресах, що надається компанією MaxMind, платний. Причому сума в доларах, як не дивно 🙂 Безкоштовно доступні лише істотно урізані варіанти - http://dev.maxmind.com/geoip/geoip2/geolite2/
  • Враховуючи, що PHP GeoIP - стороннє розширення, його необхідно буде окремо встановлювати на сервер, що за умови використання shared хостингу може стати скрутним заходом. Можна, звичайно, звернутися в техпідтримку, але не факт, що вам допоможуть. Мені, наприклад, на прохання встановити Sphinx відмовили.
  • Визначення міста по IP в PHP за допомогою альтернативних бібліотек

    Ще один спосіб дізнатися місто IP в PHP скрипті - це використання альтернативних серверних бібліотек і баз інформації для IP адрес, відмінних від MaxMind.

    Але вони мають ті ж мінусами, як і попередній варіант, т.к. є лише конкурентами MaxMind. Доступи до баз та можливість використання їх API також платна. Безкоштовно можна отримати лише список країн та міст по IP, у той час як за платного тарифу можна отримувати ширший перелік даних.

    Єдина перевага над PHP GeoIP у тому, що ці бібліотеки інтегруються в PHP коді, а чи не лише на рівні сервера, тобто. їх можна використовувати навіть на shared хостингах.

    Прикладом такої бібліотеки є db-ip.com, що надається сервісом.

    До речі, вказаний мною сервіс надає не тільки свою PHP бібліотеку для отримання гео даних по IP клієнтів, але й доступ до баз інформації за адресами. Так що, в принципі, ніхто вам не заважає використовувати їх у PHP GeoIP, щоб використовувати його API, але інформацію брати з інших джерел.

    Ну, і точно ніхто вам не заважає написати власний парсер файлів баз IP адрес для отримання з них інформації самостійно, без будь-яких сторонніх дозволів.

    Як визначити місто по IP в PHP online

    Ну, і ось я підійшов до фінального способу як дізнатися країну по IP в PHP та іншу гео інформацію, який використовував сам на практиці.

    Він полягає у використанні API онлайн сервісів, які дозволяють отримувати дані IP адреси в режимі онлайн.

    Визначати місто IP в PHP я вирішив саме цим способом, т.к. він позбавлений головної нестачі попередніх. А саме, він найпростіший у реалізації — не потрібно нічого встановлювати та налаштовувати на сервері, а тим більше просити про це техпідтримку shared хостингів.

    Для того, щоб отримати необхідну інформацію по IP, достатньо лише надіслати запит на певну URL і обробити відповідь.

    Що ж до вартості їх використання — здебільшого вони як і платні, т.к. працюють, зазвичай, з урахуванням існуючих комерційних баз IP. Але є і безкоштовні сервіси, які надають, можливо, на таку повну інформацію, як комерційні, але її можна отримувати в необмеженому обсязі.

    Щоправда, вони дуже швидко припиняють своє існування, хоч як дивно, т.к. Вижити наданням подібних послуг дуже складно. Це показав мій аналіз безкоштовних онлайн-сервісів визначення міст і країн по IP, який я проводив в особистих цілях. Вони з'являлися на багатьох сайтах, але при спробі скористатися ними було зрозуміло, що вони припинили своє існування.

    В результаті, я знайшов те, що мені було потрібно, чим і хочу з вами визначитися - http://www.geoplugin.com/

    Даний сервіс дозволяє як визначати місто та іншу інформацію по IP на сайті сервісу, так і робити це з коду. Далі я наведу приклад визначення країни IP в PHP скрипті за допомогою geoplugin.com. код здійснюється за допомогою коду, описаного в статті за посиланням.

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

    У моєму прикладі, як я вже й казав, результатом роботи цього скрипту буде код країни клієнта сайту. Взагалі, повний список параметрів, що повертаються виглядає так (для прикладу вирішив взяти IP Новосибірської області РФ):

    ( "geoplugin_request":"195.208.128.3", "geoplugin_status":200, "geoplugin_credit":"Якщо отримані дані включаються http:\/\/www.maxmind.com.", "geoplugin_city":"Novosibirsk", "geoplugin_region":"Novosibirsk", "geoplugin_areaCode":"0", "geoplugin_dmaCode":"0", "geoplugin_countryCode": "RU", "geoplugin_countryName":"Російська Федерація", "geoplugin_continentCode":"EU", "geoplugin_latitude":"55.09", "geoplugin_longitude":"82.6519", "geoplugin_regionCode":"53", " Novosibirsk", "geoplugin_currencyCode":"RUB", "geoplugin_currencySymbol":"руб", "geoplugin_currencySymbol_UTF8":"\u0440\u0443\u0431", "geoplugin_currencyConverter"8:58

    Як бачите, даний сервіс використовує згаданий раніше MaxMind (параметр geoplugin_credit), але платну інформацію чи ні складно припустити. З одного боку, посилання на джерело говорить про те, що використовується безкоштовний доступ до БД IP, але, з іншого, ми бачимо не тільки країну та місто, але ще багато будь-якої інформації, включаючи місто, географічні координати координати (langitude, latitude) , поточну валюту і її курс.

    Так що цей сервіс можна назвати PHP GeoIP онлайн. Єдина його відмінність від серверного аналога - те, що він отримує інформацію по IP трохи повільніше за рахунок відсутності серверного кешування. Але це ще не означає, що його немає на самому сервері GeoPlugin 😉 Так що недолік цей швидше символічний.

    У будь-якому випадку, розробники GeoPlugin заслуговують на оплески, а, особливо, ще й за те, що вони навіть не захаращували свій сайт контекстною рекламою. Тобто. як вони взагалі виживають – незрозуміло. Єдиний спосіб сказати їм "дякую" - це пожертвування на PayPal рахунок.

    До речі, наведений мною PHP код визначення міста по IP є універсальним. Можете його використовувати для отримання гео даних та за допомогою інших сервісів. Єдине, що вам потрібно буде в ньому змінити, - це URL API сервісу та ім'я необхідних параметрів, які вам потрібно буде отримати.

    На цьому маю все. Пишіть ваші відгуки про статтю в коментарях нижче та не забувайте ділитися записом зі своїми друзями у соціальних мережах.

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

    Понад 5 років досвіду професійної розробки сайтів. Робота з PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular та іншими технологіями web-розробки.

    Досвід розробки проектів різного рівня: лендинги, корпоративні сайти, Інтернет-магазини, CRM, портали. У тому числі підтримка та розробка HighLoad проектів. Надсилайте ваші заявки на email [email protected].

     
    Статті потемі:
    Як перевірити яку версію інтернет експлорер встановлено
    Як дізнатися версію браузера Internet Explorer? Подібне питання турбує багатьох сучасних користувачів ПК, особливо тих, хто звик працювати з "Експлорером". Це фірмовий браузер Windows. Деякі називають цей софт "браузером для скачування браузі
    Микола Соболєв та його шлях до успіху У чому успіх Миколи Соболєва
    YouTube: Шлях до успіху. Частина 1 Як отримувати фури лайків і тонни грошей Микола Соболєв Кирило Жуковський Роман Назарчук © Микола Соболєв, 2016 © Кирило Жуковський, 2016 © Роман Назарчук, 2016
    Оновлення типової конфігурації відразу на кілька релізів (8
    Нові релізи 1С виходять щотижня. Своєчасно оновіться та завжди тримайте свої бази в актуальному стані! Останнє оновлення у таблиці від: - 12.07.2019.
    Технологічні платформи 1С.
    Типові конфігурації.