Location: PHPKode > projects > CNStats > cnstats/geo/geobaza/readme.RU.html
<meta http-equiv=content-type content="text/html; charset=UTF-8">

<pre>
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-битное беззнаковое целое.





Return current item: CNStats