Вышла новая версия Sypex Geo 2.2 — очень быстрого алгоритма определения города по IP. Теперь базы данных стали двуязычными (русский и английский), регионы и города теперь привязаны к базе данных GeoNames, и имеют постоянные ID.


Были добавлены ОКАТО коды для городов и регионов России, КОАТУУ для Украины и СОАТО для Беларуси.

Технические подробности


Алгоритм работы Sypex Geo значительно не изменился, были исправлены небольшие ошибки, которые возникали при сильной неравномерности распределения IP диапазонов.

Основные изменения коснулись справочников.

  • Добавился справочник стран, позволяющий сохранянь более подробную информацию о стране.
  • Внедрен универсальный формат упаковщика данных, благодаря чему можно сохранять в базу любые данные, без изменений в API.
  • Формат упаковки сохраняется в файле базы данных, после заголовка.


Подробнее о формате данных можно почитать в спецификации формата SxGeo 2.2.

REST API


Вместе с новой версией Sypex Geo был запущен сервис REST API. Где с помощью простого запроса по HTTP или HTTPS можно получить наиболее актуальную и расширенную информацию об IP, используя самую свежую базу данных Sypex Geo Max.

Результаты могут выдаваться в 3 форматах: JSON, JSONP и XML. Поддерживается пакетная обработка, до 100 IP в запросе.

Простейший запрос к API выглядит так:
api.sypexgeo.net/
В результате будет получена информация о вашем IP в формате JSON. 

{
"ip":"123.45.67.89", // Запрашиваемый IP
"city":{ // Информация о городе
    "id":1835848, // ID города в GeoNames
    "lat":37.566, // Широта города
    "lon":126.9784, // Долгота города
    "name_ru":"Сеул", // Название на русском
    "name_en":"Seoul", // Название на английском
    "okato":"" // ОКАТО коды для городов России, КОАТУУ для Украины и СОАТО для Беларуси
},
"region":{ // Информация о регионе
    "id":1835847, // ID региона в GeoNames
    "lat":37.58, // Широта региона
    "lon":127, // Долгота региона
    "name_ru":"Сеул", // Название на русском
    "name_en":"Seoul", // Название на английском
    "iso":"KR-11", // ISO3166-2 геокод региона
    "timezone":"Asia/Seoul", // Часовой пояс региона
    "okato":"" // ОКАТО код для регионов России, КОАТУУ для Украины и СОАТО для Беларуси
},
"country":{ // Информация о стране
    "id":119, // ID страны
    "iso":"KR", // ISO3166-1 геокод страны
    "continent":"AS", // Код континента
    "lat":36.5, // Широта центра страны
    "lon":127.75, // Долгота центра страны
    "name_ru":"Южная Корея", // Название на русском
    "name_en":"South Korea", // Название на английском
    "timezone":"Asia/Seoul" // Часовой пояс столицы
}}



Те же данные в xml можно получить выполнив
api.sypexgeo.net/xml

Чтобы получить информацию об произвольном IP нужно выполнить запрос:
api.sypexgeo.net/json/123.45.67.89

Если нужно проверить сразу несколько IP, нужно их просто перечислить через запятую или точку с запятой
api.sypexgeo.net/json/123.45.67.89;222.22.22.22

Чтобы получить данные в формате JSONP нужно выполнить запрос:
api.sypexgeo.net/jsonp/123.45.67.89&callback=alert

Допускаются и POST запросы, в таком случае IP указываются в параметре ip.

Ссылки по теме