База данных идентификаторов объектов геотаргетинга (стран, областей, городов) используется для взаимодействия с интерфейсами edit, set, stat
БД имеет формат JSON, содержит либо список объектов, с которых было как минимум 10 посещений за неделю, либо полный список объектов и состоит из двух частей:
База содержит массив элементов следующего формата:
Array
(
[1] => Array - ID объекта геотаргетинга для применения в вызовах API-интерфейсов
(
[name] => Название объекта, например Москва
[nameen] => Название объекта на английском языке, например Moscow
[count] => Количество уникальных посетителей за неделю в системе
[tp] => тип объекта: 0 - страна, 1 - область, 2 - город
[nac] => при наличии дополнительной наценки - сумма наценки относительно базовой ставки за показ сайта, в процентах, может отсутствовать
[region] => ID региона для города (tp=2)
[country] => ID страны для региона и города (tp=1 и 2)
)
)
Отсортированный индекс объектов геотаргетинга по посещаемости (необязательная часть, можно использовать для удобства создания древовидного списка объектов)
Ссылка на загрузку архива: https://go.jetswap.com/geoobjectsort.gz (объекты с не менее чем 10 посещениями за неделю)
Ссылка на загрузку полного архива: https://go.jetswap.com/geoobjectsortfull.gz
База содержит массив элементов следующего формата:
Array
(
[cnt] => Array
(
[country] => Array - массив идентификаторов стран
(
[0] => 111 - ID объектов геотаргетинга из базы объектов геотаргетинга(описана сверху)
[1] => 222
[2] => 333
)
[region] => Array - массив идентифификаторов областей для определенной страны, ID страны в примере - 555
(
[555] => Array
(
[0] => 111 - идентификаторы областей для страны с ID 555
[1] => 222
[2] => 333
)
)
[city] => Array - массив идентифификаторов городов для определенной области, ID области в примере - 777
(
[777] => Array
(
[0] => 111 - идентификаторы городов для области с ID 777
[1] => 222
[2] => 333
)
)
)
)
Пример скрипта-загрузчика баз данных на PHP:
<?php
// Устанавливаем URL для проверки и скачивания файлов
$md5_url = "https://go.jetswap.com/geoobject.md5";
$file_urls = [
"https://go.jetswap.com/geoobject.gz",
"https://go.jetswap.com/geoobjectfull.gz",
"https://go.jetswap.com/geoobjectsort.gz",
"https://go.jetswap.com/geoobjectsortfull.gz"
];
// Определяем локальные файлы
$local_md5_file = "geoobject.md5";
// Функция для скачивания файла
function downloadFile($url, $path) {
$file = file_get_contents($url);
if ($file !== false) {
file_put_contents($path, $file);
return ['success' => true, 'error' => ''];
} else {
return ['success' => false, 'error' => "Не удалось скачать файл: $url"];
}
}
// Функция для разархивирования .gz файла с помощью команды gunzip
function decompressFile($gz_file) {
$command = "gunzip -f " . escapeshellarg($gz_file);
$output = [];
$return_var = 0;
exec($command, $output, $return_var);
if ($return_var !== 0) {
return ['success' => false, 'error' => "Не удалось разархивировать файл: $gz_file"];
}
return ['success' => true, 'error' => ''];
}
// Основная функция для проверки и обновления файлов
function checkAndUpdateFiles($md5_url, $file_urls, $local_md5_file) {
// Скачиваем удаленный MD5 файл
$remote_md5 = file_get_contents($md5_url);
if ($remote_md5 === false) {
return ['success' => false, 'error' => "Не удалось получить удаленный MD5 файл"];
}
// Проверяем наличие локального MD5 файла и его содержимое
if (file_exists($local_md5_file)) {
$local_md5 = file_get_contents($local_md5_file);
if ($local_md5 === false) {
return ['success' => false, 'error' => "Не удалось прочитать локальный MD5 файл"];
}
} else {
$local_md5 = "";
}
// Сравниваем MD5 хэши
if (trim($remote_md5) !== trim($local_md5)) {
// Хэши не совпадают, загружаем и разархивируем новые файлы
foreach ($file_urls as $file_url) {
$local_gz_file = basename($file_url);
// Скачиваем архив
$download_result = downloadFile($file_url, $local_gz_file);
if (!$download_result['success']) {
return $download_result;
}
// Разархивируем файл с помощью gunzip
$decompress_result = decompressFile($local_gz_file);
if (!$decompress_result['success']) {
return $decompress_result;
}
}
// Обновляем локальный MD5 файл
file_put_contents($local_md5_file, $remote_md5);
return ['success' => true, 'error' => ''];
} else {
return ['success' => true, 'error' => 'Файлы уже актуальны.'];
}
}
// Использование функции
$result = checkAndUpdateFiles($md5_url, $file_urls, $local_md5_file);
if ($result['success']) {
echo "Операция завершена успешно.";
} else {
echo "Ошибка: " . $result['error'];
}