Архив за Март 2009

27 МарРоссийская география

Гео-база maxmind окончательно задолбала своими приколами, когда треть Москвы определяется как область в Великобритании. Могу себе представить как она определяет географию для других городов России. В поисках нормальной базы ip-адресов России нашёл ipgeobase.ru. Бесплатная, поддерживаемая, актуальная база для России. Но когда дело дошло до парсинга, меня её формат взбесил. Вместо того, чтобы сделать так, как делают те же maxmind, где последовательно располагаются блоки адресов, они реализовали структуру со множественными вложениями, парсер для которой, без поллитра не напишешь.

Поломав голову над парсером, я его родил и решил выложить доработанный скрипт для тех, кому не хочется мучаться самому :)

Скачать скрипт можно тут: ipgeobase.php.gz.

Для работы скрипта нужен файл cidr_ru_block.txt из архива db_files.tar.gz. Запускаться скрипт должен в том же каталоге, что и cidr_ru_block.txt. После работы скрипта появляются 3 файла: ipgeobase-states.dat, ipgeobase-cities.dat, ipgeobase-ips.dat.

В ipgeobase-states.dat храняться области в формате [идентификатор области]\t[название области].
В ipgeobase-cities.dat храняться города в формате [идентификатор города]\t[идентификатор области]\t[название города].
В ipgeobase-ips.dat храняться диапазоны ip-адресов в формате [IP от]\t[IP до]\t[идентификатор области]\t[идентификатор города].

При повторном запуске скрипт начитывает данные из ipgeobase-states.dat и ipgeobase-cities.dat (если они есть). Таким образом, при появлении новых городов или областей, идентификаторы “старых” записей не изменятся. IP храняться в виде беззнакового 32-битного числа.

Как-то так, надеюсь кому-то мой труд облегчит жизнь :)