Sypex Geo 2.2 — теперь с GeoNames и ОКАТО

    Вышла новая версия 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.

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

    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 40
    • +1
      Ура! Дождались!

      Надеюсь на регулярность обновления.
      • 0
        Пока, что по планам темп обновлений — 2 раза в месяц.
      • –1
        Всё хорошо но вот только изо 3G операторов не получается точно определять ip.
        А рынок без проводного рынка растет.
        • +1
          Ну с 3G как и просто с крупными провайдерами могут быть проблемы, так как далеко не всегда они указывают информацию о распределении IP.
          • 0
            А некрупные просто вам сообщают домашние адреса своих клиентов по ip?
            • 0
              Зависит от провайдера, зачастую указывают, в каком городе подсеть или районе города для крупных городов.
              • +1
                Мелкие провайдеры, обычно, действуют в рамках одного или нескольких городов в пределах одного региона. Соответственно, все их IP-адреса будут принадлежать к конкретному региону и, с большой долей вероятности, к определенному городу, в котором и работает провайдер.

                Для крупных же провайдеров вполне характерна ситуация, когда пользователи одного региона выходят в сеть через шлюз, расположенный в другом регионе. А у мобильных операторов проблема усугубляется использованием NAT, когда вообще всегда все пользователи федерального округа выходят через единый шлюз. Например, Калининградцы, использующие Мегафон, выходят в Интернет через Санкт-Петербург, точно так же, как и сами Питерцы, и еще куча регионов, да еще и одновременно с одного IP-адреса (по крайней мере, я не заметил распределения IP-адресов из их диапазона по регионам). В данном случае определить регион по IP-адресу просто невозможно.
              • 0
                По моему для них это не проблема. Они наверно даже и не в курсе про наши проблемы. Так как по видимому с этого не зарабатывают.
                Я решил эту проблему для себя так. Не показываю гео зависимую выдачу если клиент зашёл через мобильного оператора. Может показаться что я теряю что то но я терял больше когда людям из одного города показывал другой. Чисто потому что оператор выход в интернет с делал в другом городе.
            • +1
              Парни, ОКАТО отменили.
              Теперь ОКТМО.
              • 0
                Пасиб за инфу, заменим к следующему обновлению базы.
              • 0
                «okato»:"" // ОКАТО код для регионов России, КОАТУУ для Украины и СОАТО для Беларуси
                Для каждого варианта будет свое наименование поля? Или будет всегда именоваться okato?
                • 0
                  поле везде okato, так как по сути одно и тоже, только по разному названо в разных странах.
                • 0
                  Да уж, уже более года искал GeoIP базу поддерживаемую, но на мои вопросы так и не отозвались…
                  У Вас как дела обстоят?
                  • +1
                    Пока что сходу вижу очевидный недочет — вы не возвращаете диапазон IP провайдера к которому принадлежит запрашиваемый IP, что крайне затрудняет кеширование запросов и существенно увеличивает их число к вашему сервису.
                    PS Часовой пояс желательно бы для города, а не для страны возвращать. Более практически полезно будет.
                    • 0
                      А почему Вы не храните слепок geoip-базы у себя?
                      • 0
                        Реальная ситуация с распределением IP меняется постоянно, минимум раз в месяц, зачем мне просроченные данные?
                        Результаты запросов кешируются для уменьшения их числа, но не дольше чем на 30 дней.

                        Этим и отличаются недобросовестные GeoIP сервисы, что заливают 1 раз базу к себе и бросают в таком состоянии на N лет. Нужен именно поддерживаемый внешний сервис.
                        • 0
                          Я автоматом поставил скачиваться и парситься базу ipgeobase раз в неделю, благо архив всегда доступен по одному и тому же адресу.
                          В итоге у меня один-единственный медленный запрос в неделю и вполне актуальные данные.
                          • 0
                            Как раз ipgeobase последнее время крайне разочаровывает редиректами из-за превышения нагрузки (писал ранее на тостере), а перекачивать регулярно. Да и одного СНГ маловато…
                      • 0
                        Если вам нужно обрабатывать много адресов, то лучше использовать базу локально. Так как в любом случае ping никуда не денется. И значительно быстрее проверить по локальной базе. API имеет смысл использовать, когда запросы достаточно редкие, ну например, в админке сделать кнопочку посмотреть откуда юзер пришел.
                        • 0
                          Нет, не лучше, см коммент выше. Нужная актуальная информация, а не «кукла».
                    • 0
                      Дополнительные данные получаете с гугла?
                      • 0
                        Что под дополнительными данными имеется ввиду? Если окато, временные зоны, то из открытых справочников, в том числе wiki.
                      • 0
                        А выложите плз скрипт-пример, как загнать свою базу в формат sxgeo.
                        • 0
                          Я думаю к середине месяца выложим. Сейчас соберем отзывы если всё нормально, то выложим конвертер. И займемся модулями для серверов.
                        • +1
                          Было бы полезно в информации о городе иметь данные о часовом поясе, а то эта информация для страны применимо к России не очень поможет.
                          • 0
                            Сейчас информация о часовом поясе идет для каждого региона. Проверю, есть ли города у которых временная зона отличается от временной зоны для региона.
                            • 0
                              Исключений оказалось не много, но они есть: Вики
                          • 0
                            Не помешало бы:

                            — рейтинг достоверности источника (ведь наверняка данные не из одного источника);
                            — диапазон IP к которому принадлежит адрес;
                            — (возможно) владелец диапазона.
                            • 0
                              Было бы еще хорошо давать возможность делать срезы базы данных. Например, сайт имеет свои страницы для областных центров Уральского ФО, а остальные посетители перенаправляются на страницу по умолчанию. Поэтому, был бы интересен срез по конкретным городам.
                              • 0
                                В принципе такое легко реализуемо, тут разве что нужно подумать как будет выглядеть интерфейс для создания срезов.
                              • 0
                                Есть проблема с одноименными населенными пунктами, так например адрес 77.106.95.186 принадлежит российскому Северску в Томской области, но определяется как украинский из Донецкой области.

                                • +1
                                  Если бы только. 78.30.215.196 принадлежит Севастополю. (http://api.sypexgeo.net/json/78.30.215.196), который уже не UA и таймзона там не киевская
                                  • 0
                                    Данные привязаны к GeoNames, так что, тут разве, что спецверсию базы для России делать.
                                    • 0
                                      в ссылке-примере 109.110.95.135 (Севастополь) на карте отобразило возле Брянска где-то…
                                  • –4
                                    Разработчик из Украины. По конституции Украины, АР Крым находится в составе Украины. Так что все правильно Севастополь — UA.
                                    • +1
                                      Так что же, теперь все Geo-базы будут составляться в зависимости от того, кому как захотелось, независимо от реального положения дел?

                                      Тем более, whois IP-адреса говорит сам за себя:
                                      netname:        LANCOM-DIR2
                                      descr:          Lancom Ltd, Russia, Sevastopol
                                      descr:          Sevstar TM, broadband
                                      country:        ru
                                      


                                      P.S. Вот и автор выше озвучил, почему так вышло. И никакой политики здесь нет.
                                  • 0
                                    Пасиб, да, был такой глюк исправили.
                                  • +1
                                    Большое спасибо за внешние ключики из geonames.
                                    А то раньше по несколько часов бедный Левенштайн работал.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.