База GeoIP – страны и города, январь 2011

    Вышла в свет новая версия русскоязычной базы данных стран и городов. Основные изменения:
    — для перевода названий городов использован API Карт Google (идея chernikov)
    — для поиска по странам СНГ подключена база geobaza.ru (идея derketzer)
    Результат этой работы доступен для свободного скачивания.

    База распространяется в двух модификациях: «Страны и города» (22Mb, после установки ~123Mb) и «Только страны» (1Mb, после установки ~6Mb). Также в архивах находится небольшой пример использования базы данных на php.

    Точность определения страны ~99%, точность определения городов в среднем ~95%, России ~98%, Украины ~95%. Много это или мало – зависит от задач, которые собираетесь решать с помощью этой базы.

    Тестовое демо – определение вашей страны и города по IP-адресу

    Рабочее демо — определение вашего города по IP в форме поиска авиабилетов

    Для установки базы рекомендую воспользоваться программами типа mysqldumper или через ssh выполнить
    mysql –p –uюзер база_данных < файл.sql

    Не рекомендую устанавливать базу городов на виртуальный хостинг, не выдержит нагрузки.

    Идеи по усовершенствованию перевода и повышению качества базы приветствуются.

    Немного статистики

    В текущей версии базы 93,342 населенных пунктов.

    Количество населенных пунктов по разным странам:

    Страна Количество
    Германия 18,255
    США 15,525
    Италия 6,595
    Австрия 6,357
    Испания 5,678
    Австралия 5,128
    Франция 4,635
    Россия 3,186
    Канада 3,036
    Польша 2,768
    Бразилия 2,333
    Швейцария 1,795
    Бельгия 1,562
    Япония 1,411
    Португалия 1,271
    Ирландия 1,119
    Аргентина 1,084
    Мексика 1,060
    Украина 715
    Китай 689
    Болгария 603
    Великобритания 572
    Колумбия 545
    Люксембург 358
    Индия 357
    ЮАР 332
    Норвегия 329
    Турция 293
    Новая Зеландия 279
    Венгрия 260
    Сербия 221
    Чили 202
    Казахстан 194
    Филиппины 185
    Румыния 166
    Чехия 159
    Республика Корея 155
    Нидерланды 152
    Словакия 152
    Эквадор 141
    Хорватия 138
    Швеция 128
    Гватемала 124
    Венесуэла 120
    Гондурас 118
    Финляндия 115
    Беларусь 102
    Греция 94
    Иран 91
    Литва 90
    Израиль 90
    Латвия 87
    Молдова 85
    Эстония 85
    Тринидад и Тобаго 79
    Перу 69
    Барбадос 56
    Ямайка 56
    Коста-Рика 55
    Индонезия 54
    Доминиканская республика 53
    Маврикий 51
    Египет 46
    Дания 45
    Марокко 42
    Македония 41
    Армения 39
    Алжир 38
    Нигерия 37
    Уругвай 36
    Панама 36
    Сальвадор 33

    По остальным странам менее 30 населенных пунктов.
    Поделиться публикацией

    Похожие публикации

    Комментарии 49

      +1
      — для поиска по странам СНГ подключена база geobaza.ru (идея derketzer)

      А какая там версия из lite или из полной? И не пробовали ли использовать базы с ipgeobase.ru?
        0
        lite
        ipgeobase уже используется для поиска по российским диапазонам
        В архиве есть пример запросов, логика такая:
        1. проверить, является ли ip российским (ipgeobase)
        2. если не российский, то проверить по СНГ (geobaza)
        3. если не СНГ, то проверить по миру (maxmind)
          +1
          На перед НГ ipgeobase появилась база по Украине и еще обещали добавить данные по Беларуси и Молдавии, так что можно тоже воспользоваться (ссылка на новость blog.ipgeobase.ru/?p=73).
          Данные по Украине лежат отдельным файлов в разделе «Архив», правда с декабря так и не обновлялись.
            0
            Не знал. Использую в следующей сборке базы.
          0
          Спасибо за ipgeobase.ru. Первый подобный сервис, который правильно определил мой город :-)
          0
          Круто, в Германии 18,255 населенных пунктов против 3,186 в Росии. Скажите, в Германии на самом деле так много маленьких сел (хуторов)?
            0
            Здесь нет прямой связи с количеством городов в стране. В России большинство мелких населенных пунктов по ip до сих пор приписываются к областным центрам. Как видно из статистики, в некоторых странах ситуация лучше.
            0
            Ребята, версии меняются, а у меня всё также непопадание примерно в 900 км.
            Может имеет смысл позаимствовать другие базы и наработки? Примеры: MaxMind, бесплатный вариант базы стабильно обновляется тут, прикрутить можно через Pygeoip, нарисовать с помощью Matplotlib.
              0
              Скажите свой IP
                +2
                95.135.46.183. И я не во Львове :)
              –2
              Проделали отличную работу.
              А для каких целей, если не секрет, она нужна?
              Где её думаете применять?
              Как насчет коммерции?
                0
                Русская база geoip потребовалась при разработке одного собственного проекта (он ещё не родился, поэтому без подробностей). Коммерческое использование этой базы не планирую.
                +1
                Спасибо за базу
                  0
                  Украина плохо проработана, но всё равно спасибо.
                    0
                    Могли бы пояснить фразу: «для перевода названий городов использован API Карт Google»?

                    Я правильно понимаю, есть в базе англоязычное название города. Например «Moscow», с помощью API Карт Google переводится в «Москва»? Если так, то как это было реализовано и на сколько языков таким образом можно перевести город.

                    Если можно освятите пожалуйста данный вопрос.
                      +1
                      Если сделать запрос maps.google.com/maps/geo?q=Moscow&output=json&oe=utf8&sensor=false&key=ВАШ_КЛЮЧ, то Google вернет информацию о городе, в том числе строчку
                      «address»: «город Москва, Россия»,
                      Эта строчка пишется на языке из заголовка Accept-Language (ru-ru, en-us и т.д.), либо на английском (если на требуемом языке названия нет, таких получилось ~30%). Таким образом я через curl делал запросы, а потом с json парсил ответы. Теоретически в Accept-Language можно задать любой язык, но будут ли в базе Google названия на этом языке — не знаю.
                        0
                        Спасибо за разъяснение.

                        P.S.
                        Я сразу подумал речь идет о Предпочитаемый код страны.
                          +1
                          вместо Accept-Language можно указать дополнительный парметр hl
                          &hl=en
                          &hl=ru
                            0
                            Интересно. Где это описано? Тут не вижу.
                              0
                              Я тоже не вижу, но товарищ прав. Недокументированная функциональность? Думаю нужно было подсмотреть как показывается информация на Google картах и тогда бы вопросов не было.



                              Всем спасибо за наводку!
                                +1
                                уж поверьте я этот параметр не выдумал,
                                здесь обсуждение

                                вероятно эта особенность плохо задокументирована для API v3 гугло-карт,
                                для v2 это есть в документации:
                                «locale specifies the language to use for returning the results, overriding the Maps API hl parameter, if supplied. If neither locale nore an hl parameter is specified, the browser's default language is used»

                                  0
                                  Случайно не знаете секретный параметр для задания предпочтительного Accuracy? Например, Google по некоторым запросам даёт улицы (8), а мне нужны только города (4)
                                    0
                                    напишите пример запроса, где в результате будет улица
                                      0
                                      Например, при обратном геокодировании, когда мне нужно по координатам определить город.
                                0
                                Да, это удобней. Спасибо.
                            0
                            С Украиной точность будет намного ниже заявленных 95% тк. всех пользователей Укртелекома находит в Киеве. Сильно сомневаюсь, что доля рынка этого провайдера менее 6%.
                              0
                              И не говорите. Сколько раз не проверял, всегда в Киеве оказываюсь… ну и то хорошо.
                                0
                                проверьте, пожалуйста, этот сервис:
                                http://ipinfodb.com/my_ip_location.php
                                  0
                                  Я в Луганске вечно обитаю (тоже Укртелеком). Ваш сервис — не исключение.
                              0
                              Многим, наверное, будет полезное, если вы сделаете небольшое АПИ с инсталляцией (чтоб люди могли в 3 клика и вызовом 1 метода у себя в скрипте иметь готовое решение)
                                0
                                Хочу уточнить один момент: если какого-то населенного пункта в базе нет — по крайней мере страна будет определена верно? Или будет полный undefine?
                                  0
                                  Да, страна определяется отдельно и достаточно точно.
                                  0
                                  У меня еще вот такой вопрос.

                                  В феврале, марте и т.д. выйдет новая версия базы maxmind.
                                  Как вы будет добавить/обновлять/синхронизировать текущую базу с базой maxmind?

                                  Или дальнейшая поддержка БД не планируется.

                                  Я так понимаю провайдеры меняются. Айпи меняются. И что очень редко, названия городов меняются ;)
                                    0
                                    Планирую делать обновления. Как именно это будет — покажет время.
                                    0
                                    А как попадают в подобные базы провайдеры?
                                    Какие базы используют youtube, speedtest?
                                      0
                                      В большинстве своем геобазы используют за основу whois-информацию. Как пример, база ripe-а лежит в открытом доступе, готовая к парсингу: ftp.ripe.net/ripe/dbase/split/ripe.db.inetnum.gz (файлик 150 Мб в архиве и 2.3 Гб распакованный). Более глубокие уточнения можно проводить уже непосредственно с провайдером (позвонить и спросить его диапазоны сетей) или используя косвенную инфу от пользователей: например, если на сайте пользователи из сети a.b.c.d/mask смотрят погоду в Мухосранске чаще, чем в других городах, то сеть наверняка относится к Мухосранску.
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          Замечание по лицензиям справедливое, учту.

                                          MySQL для меня основная СУБД, но в самой базе нет привязки к платформе. При желании можно портировать базу в PostgreSQL или другую реляционную СУБД.

                                          Для api нужно делать более частые обновления базы, на что у меня нет времени. Если кому-то
                                          это интересно — флаг в руки.
                                            0
                                            Как выше предлагал gjf может имеет смысл добавить бинарный формат базы и api для популярных языков (perl, php, python,...) — кода будет строчек 20-50 на каждом из языков. Резолв по ней будет в десятки раз быстрее. Это намного универсальние (даже к nginx-у есть модуль для резолва по таким базам), чем mysql и проблема «Не рекомендую устанавливать базу городов на виртуальный хостинг, не выдержит нагрузки.» отпадет сама собой.
                                              0
                                              Я (пока) слабо знаком с perl и python, но если заставить php часто дергать огромный файл, то это создаст серьезную нагрузку на хостинг, даже больше, чем mysql
                                              Если у кого-то будет желание перевести базу в бинарный формат и написать код на популярных языках — не возражаю и постараюсь помочь. Но сам я не смогу этого сделать.
                                                0
                                                Так большой файл не надо весь читать. Открыть файл, перейти на позицию N1, считать пару байт, перейти на позицию N2, считать пару байт,..., закрыть. Или воспользовать mmap-ом. В общем это быстрее БД. Потестил сейчас лежащую под рукой такую реализую геобазы: выдала 100 тысяч запросов в секунду (и это только на одном ядре в один поток).
                                          0
                                          А у вас там коды регионов в таблице net_city. Они к чему привязаны?
                                            0
                                            Я думаю это региональные коды в соответствии с FIPS (http://www.maxmind.com/app/fips10_4)
                                            0
                                            Сижу из Питера

                                            Ваш IP-адрес: 109.188.214.56
                                            Страна: Россия
                                            Город: Москва

                                            Указало верно только страну.
                                              0
                                              Спасибо за проделанную работу!

                                              Используем Вашу базу в продакшене на двух проектах Incamp.ru и Языкомания.рф. Причем, если IP не из стран СНГ, используется автоматически MaxMind GeoIPCityLite.

                                              Кстати, самый обычный виртуальный хостинг от РБК (на примере проекта Incamp) отлично справляется с нагрузкой.

                                              Дополнили базу, привязав российские города в net_city к базе КЛАДР России (сопоставление по региону и названию города, несопоставленные сопоставляли вручную).
                                                0
                                                Неприятно удивлен, обнаружив много мусора. Комкор-ТВ офисный не определяет — нет в диапазонах.

                                                Есть какие-то обновления с момента написания поста?

                                                Вообще, работа отличная, вяжется прекрасно — если бы не недочеты с дублированием городов
                                                  0
                                                  В Германии около 400 городов с буквой «ё», названия обрываются на ней, видно кодировка ее не поддерживает.
                                                    0
                                                    Хотя может при импорте косяк был…

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

                                                  Самое читаемое