133 lines
5.1 KiB
PHP
133 lines
5.1 KiB
PHP
|
|
<?php
|
|||
|
|
//$flightIdent = $_POST['flight_ident'] ?? null;
|
|||
|
|
//$flightDate = $_POST['flight_date'] ?? null;
|
|||
|
|
// Путь к папке для логов
|
|||
|
|
$logDir = __DIR__ . '/logs';
|
|||
|
|
|
|||
|
|
// Убедимся, что папка для логов существует
|
|||
|
|
if (!is_dir($logDir)) {
|
|||
|
|
mkdir($logDir, 0777, true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Лог-файл
|
|||
|
|
$logFile = $logDir . '/flightawareapi.log';
|
|||
|
|
|
|||
|
|
// Функция для записи в лог
|
|||
|
|
function writeLog($message)
|
|||
|
|
{
|
|||
|
|
global $logFile;
|
|||
|
|
$timestamp = date('Y-m-d H:i:s');
|
|||
|
|
file_put_contents($logFile, "[$timestamp] $message" . PHP_EOL, FILE_APPEND);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Проверяем наличие обязательных параметров
|
|||
|
|
$flightNumber = $_POST['flight_ident'] ?? null;
|
|||
|
|
$flightDate = $_POST['flight_date'] ?? null;
|
|||
|
|
|
|||
|
|
if (!$flightNumber || !$flightDate) {
|
|||
|
|
writeLog("Ошибка: Не переданы обязательные параметры.");
|
|||
|
|
echo json_encode([
|
|||
|
|
"status" => "error",
|
|||
|
|
"message" => "Не переданы обязательные параметры: flight_number, date."
|
|||
|
|
]);
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Преобразуем дату в нужный формат
|
|||
|
|
try {
|
|||
|
|
$start = (new DateTime($flightDate))->setTime(0, 0, 0)->format('Y-m-d\T00:00:00\Z');
|
|||
|
|
$end = (new DateTime($flightDate))->setTime(23, 59, 59)->format('Y-m-d\T23:59:59\Z');
|
|||
|
|
} catch (Exception $e) {
|
|||
|
|
writeLog("Ошибка обработки даты: " . $e->getMessage());
|
|||
|
|
echo json_encode([
|
|||
|
|
"status" => "error",
|
|||
|
|
"message" => "Некорректный формат даты."
|
|||
|
|
]);
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Ваш API-ключ FlightAware
|
|||
|
|
$apiKey = "Puz0cdxAHzAEqMRZwtdeqBUSm9naJfwK";
|
|||
|
|
|
|||
|
|
// Формируем URL для API
|
|||
|
|
$baseUrl = "https://aeroapi.flightaware.com/aeroapi/flights";
|
|||
|
|
$url = "{$baseUrl}/{$flightNumber}?start={$start}&end={$end}";
|
|||
|
|
|
|||
|
|
// Логируем отправку запроса
|
|||
|
|
writeLog("Отправка запроса к API FlightAware: $url");
|
|||
|
|
|
|||
|
|
// Настраиваем cURL
|
|||
|
|
$ch = curl_init($url);
|
|||
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|||
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|||
|
|
"x-apikey: $apiKey"
|
|||
|
|
]);
|
|||
|
|
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
|
|||
|
|
|
|||
|
|
// Отправка запроса
|
|||
|
|
$response = curl_exec($ch);
|
|||
|
|
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|||
|
|
$curlError = curl_error($ch);
|
|||
|
|
|
|||
|
|
curl_close($ch);
|
|||
|
|
|
|||
|
|
// Логируем HTTP-код ответа
|
|||
|
|
writeLog("HTTP-код ответа: $httpCode");
|
|||
|
|
|
|||
|
|
// Проверяем ошибки cURL
|
|||
|
|
if ($curlError) {
|
|||
|
|
writeLog("Ошибка cURL: $curlError");
|
|||
|
|
echo json_encode([
|
|||
|
|
"status" => "error",
|
|||
|
|
"message" => "Ошибка запроса: $curlError"
|
|||
|
|
]);
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Логируем тело ответа
|
|||
|
|
writeLog("Тело ответа: $response");
|
|||
|
|
|
|||
|
|
// Обрабатываем тело ответа
|
|||
|
|
$data = json_decode($response, true);
|
|||
|
|
|
|||
|
|
if ($httpCode === 200 && isset($data['flights'][0])) {
|
|||
|
|
$flight = $data['flights'][0];
|
|||
|
|
|
|||
|
|
// Формируем JSON-ответ
|
|||
|
|
$response = [
|
|||
|
|
"status" => "success",
|
|||
|
|
"message" => "Информация о рейсе получена.",
|
|||
|
|
"flight_info" => [
|
|||
|
|
"Рейс" => $flight['ident'] ?? 'Не указано',
|
|||
|
|
"Статус" => $flight['status'] ?? 'Не указано',
|
|||
|
|
"Аэропорт вылета" => $flight['origin']['name'] ?? 'Не указано',
|
|||
|
|
"Запланированное время вылета" => $flight['scheduled_out'] ?? 'Не указано',
|
|||
|
|
"Фактический взлет" => $flight['actual_off'] ?? $flight['estimated_off'] ?? 'Не указано',
|
|||
|
|
"Аэропорт прилета" => $flight['destination']['name'] ?? 'Не указано',
|
|||
|
|
"Запланированное время прилета" => $flight['scheduled_in'] ?? 'Не указано',
|
|||
|
|
"Фактическое приземление" => $flight['actual_on'] ?? $flight['estimated_on'] ?? 'Не указано',
|
|||
|
|
"Задержка вылета (в минутах)" => isset($flight['departure_delay']) ? round($flight['departure_delay'] / 60) : 'Не указано',
|
|||
|
|
"Задержка прилета (в минутах)" => isset($flight['arrival_delay']) ? round($flight['arrival_delay'] / 60) : 'Не указано',
|
|||
|
|
"Прогресс выполнения рейса (%)" => $flight['progress_percent'] ?? 'Не указано',
|
|||
|
|
"Самолет" => $flight['aircraft_type'] ?? 'Не указано',
|
|||
|
|
"Багажная зона" => $flight['baggage_claim'] ?? 'Не указано'
|
|||
|
|
]
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
writeLog("Возвращаем JSON-ответ: " . json_encode($response, JSON_UNESCAPED_UNICODE));
|
|||
|
|
header('Content-Type: application/json');
|
|||
|
|
echo json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
|||
|
|
exit;
|
|||
|
|
} else {
|
|||
|
|
$error = $data['error']['message'] ?? "Рейс не найден или произошла ошибка.";
|
|||
|
|
writeLog("Ошибка: HTTP-код $httpCode, Сообщение: $error");
|
|||
|
|
|
|||
|
|
// Формируем JSON с ошибкой
|
|||
|
|
echo json_encode([
|
|||
|
|
"status" => "error",
|
|||
|
|
"message" => $error
|
|||
|
|
]);
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
?>
|