Определение города по ip yandex. Sypex Geo — быстрое определение города по IP. Определение города по IP в PHP с помощью альтернативных библиотек
В которой упоминался мой «велосипед» отличающийся высокой скоростью работы. Одним из популярных вопросов стала возможность определения города по IP.
И вот несколько месяцев спустя, проект начинавшийся, как «for fun» перерос в самостоятельный проект.
Открыт отдельный сайт посвященный проекту Sypex Geo , на котором можно скачать свежие версии API и баз данных, а также ознакомиться с документацией.
Для желающих скорее протестировать правильность определения города по IP - вот ссылка на демо-страницу . А под хабракатом, я опишу некоторые технические подробности и приведу результаты небольшого тестирования.
Формат Sypex Geo 2.1 С момента публикации последней статьи, формат Sypex Geo (сокращенно SxGeo) был оптимизирован, а также добавлена возможность включения в БД двух справочников - городов и регионов.При создании нового формата, ставились следующие приоритеты:
- высокая скорость
- низкое потребление ресурсов
- открытость (спецификации формата бинарного файла БД и API открыты)
- универсальность (возможность создания баз данных с любыми наборами данных)
В БД хранится следующая информация:
- ID страны
- Код страны ISO 3166-1 (двухсимвольный)
- Код региона FIPS 10-4 (двухсимвольный)
- Название региона (опционально)
- Город
- Широта
- Долгота
- Timezone (опционально)
В данный момент база основана на 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 = new 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.
Обновление от 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 страницы. Удачи!
Определение местоположения пользователя – крайне полезная вещь для интернет-магазинов и для лендингов. Но и для простых сайтов будет также интересно сделать, например, автоматическое заполнение поля город, страны и т.д. Собственно, различного рода автозаполнения позволят ускорить регистрацию и оформление заказа.
УстановкаПодключаем библиотеку Яндекса:
Парсим данные о местоположении:
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.
И вот несколько месяцев спустя, проект начинавшийся, как «for fun» перерос в самостоятельный проект.
Открыт отдельный сайт посвященный проекту Sypex Geo , на котором можно скачать свежие версии API и баз данных, а также ознакомиться с документацией.
Для желающих скорее протестировать правильность определения города по IP - вот ссылка на демо-страницу . А под хабракатом, я опишу некоторые технические подробности и приведу результаты небольшого тестирования.
Формат Sypex Geo 2.1 С момента публикации последней статьи, формат Sypex Geo (сокращенно SxGeo) был оптимизирован, а также добавлена возможность включения в БД двух справочников - городов и регионов.При создании нового формата, ставились следующие приоритеты:
- высокая скорость
- низкое потребление ресурсов
- открытость (спецификации формата бинарного файла БД и API открыты)
- универсальность (возможность создания баз данных с любыми наборами данных)
В БД хранится следующая информация:
- ID страны
- Код страны ISO 3166-1 (двухсимвольный)
- Код региона FIPS 10-4 (двухсимвольный)
- Название региона (опционально)
- Город
- Широта
- Долгота
- Timezone (опционально)
В данный момент база основана на 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 = new 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.