GEOBAZA Модуль GEOBAZA предназначен для быстрого получения географических данных, таких как страна, область или штат, город, а также географических координат, по которым зарегистрирован IP-адрес. Информация предоставляется на трех языках: русском, английском, а также языке страны, в которой зарегистрирован IP-адрес. В некоторых случаях точное определение географической привязки IP-адреса невозможно. Например, пользователь выходит в интернет через GPRS Московского оператора сотовой связи, находясь при этом в Петербурге. Модуль Geobaza5 состоит из файлов базы данных: "geobaza.dat", "geobaza.csv", и нескольких модулей API на языках: PHP, Perl, C. Подробные примеры использования API можно посмотреть в примерах на вышеуказанных языках программирования. Файл "geobaza.dat" является бинарным файлом и используется в классе Geobaza. Файл "geobaza.csv" в текстовом виде предоставляет информацию, хранящуюся в бинарном файле "geobaza.dat". В классе Geobaza не используется, но может быть полезен пользователям. Формат записей данного файла: * IP начала диапазона в текстовом виде * IP конца диапазона в текстовом виде * IP начала диапазона в виде 32-битного целого * Размер диапазона (конец-начало+1) * TLD страны * Иерархический идентификатор географического объекта (город, регион, страна) Данный идентификатор может меняться от версии к версии! "Жесткая" привязка к нему может в последствии вызвать неудобства. * Подробное описание географического объекта в формате JSON. GEOBAZA Lite GEOBAZA Lite предоставляет тот же функционал, что и Geobaza, за одним исключением: точность определения географического объекта ограничивается до региона. Без ограничений определяются лишь города в Новгородской области. Для проверки корректности внедрения Geobaza можно проверить один из адресов, принадлежащих городам в Новгородской области, например, 85.142.15.255. PHP API В случае, если PHP собран без встроенной поддержки формата JSON, можно использовать наши включаемый файл для работы с JSON: include "json-dirty.php". Однако, это является "грязным" хаком, поэтому рекомендуем пересобрать PHP для встроенной поддержки JSON. КЛАСС Geobaza Метод is_valid() - возвращает true, если экземпляр класса Geobaza успешно загрузил требуемые базы данных и false в противном случае. Если экземпляр не смог загрузить базы данных, то нижеуказанные методы будут возвращать false. Метод get_error() - возвращает текстовое значение ошибки, если экземпляр был создан с ошибкой. Метод get_headers() - возвращает массив служебных заголовков файла данных: 'api_version' => 5 'build_date' => дата и время сборки файла 'build_timestamp' => дата и время сборки файла, секунды с 1970 года. Метод lookup($ip4) - возвращает массив. * В случае, если адрес соответствует специальному диапазону, то array('special'=>[ Описание специального диапазона ]) * Если адрес соответствует выделенной сети, то array('items'=>array of items) где array of items - упорядоченный массив описаний географического объекта. Первый элемент - наиболее детализированное описание объекта (город). Последний элемент - обычно страна. Каждый элемент является ассоциативным массивом: 'id' => иерархический идентификатор объекта; 'type' => тип (world, country, region, city); 'lang' => государственный язык; 'lat' => широта; 'lon' => долгота; 'population' => численность населения; 'name' => ассоциативный массив значений 'язык'=>'название'. Для каждого объекта поддерживаются название на русском (RU), английском (EN) и национальном языке, если он отличен от RU и EN; 'name_official' => то же, что и 'name', но вместо общеупотребительных названий (Россия, Беларусь) используются официальные (Российская Федерация, Республика Беларусь). Все данные, возвращаемые методом, представлены в кодировке UTF-8. PERL API Идеологически то же самое, что и PHP API. Различия только в синтаксисе языков. C API Все функции возвращают 0 при успешном завершении и не 0 - при неудаче. int geobaza_open(GEOBAZA *geobaza, char *filename) Открывает на чтение бинарный файл и инициализирует структуру данных geobaza. Данную структуру можно использовать для неограниченного числа последующих вызовов lookup. int geobaza_close(GEOBAZA *geobaza) Закрывает структуру geobaza. int geobaza_lookup(GEOBAZA *geobaza, u_int32_t ipv4, GEOBAZA_PLACE **ref_to_place) Выполняет поиск ip-адреса в формате 32-битного целого по структуре geobaza. Для хранения результата передается ссылка на неинициализированный указатель ref_to_place. В случае успешного поиска функция сама выделит память под результат. Указатель ref_to_place будет ссылаться на структуру, описывающую максимально возможный распознанный географический объект (город). Если значение поля parent не равно null, то оно указывает более высокий объект, следующий в иерархии (регион, страна). int geobaza_free_result(GEOBAZA_PLACE **ref_to_place) Освобождает все динамически выделенные под результат области памяти. int geobaza_aton(char *ipv4_as_text, u_int32_t *ipv4_as_32bit) Преобразует ip-адрес из текстового вида aaa.bbb.ccc.ddd в 32-битное беззнаковое целое.