#!/usr/bin/env python3 """ Скрипт для проверки обоих API ключей (sandbox и production) """ import os import sys import json import requests def test_api_key(api_key, is_sandbox=True): """Проверка API ключа""" if is_sandbox: base_url = "https://fr24api.flightradar24.com/api" headers = { "Authorization": f"Bearer {api_key}", "Accept": "application/json", "Accept-Version": "v1" } key_type = "sandbox" else: base_url = "https://api.flightradar24.com/common/v1" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } key_type = "production" print(f"\n🔑 Тестирование {key_type} ключа...") print(f" Ключ: {api_key[:15]}...{api_key[-10:] if len(api_key) > 25 else '***'}") print(f" Base URL: {base_url}") results = [] # Тестовые endpoints в зависимости от типа if is_sandbox: test_endpoints = [ ("/static/airlines/AAL/light", "Авиакомпания American Airlines (light)"), ("/live/flight-positions/light?bounds=50.682,46.218,14.422,22.243", "Live позиции (test bounds)"), ] else: test_endpoints = [ ("/airport/light/SVO", "Аэропорт Шереметьево (light)"), ("/usage", "Отчет об использовании API"), ] for endpoint, description in test_endpoints: try: url = base_url + endpoint if not endpoint.startswith("http") else endpoint print(f"\n🔍 Тест: {description}") print(f" Endpoint: {endpoint.split('?')[0]}") # Обработка параметров в URL if "?" in endpoint: url, query_string = url.split("?", 1) from urllib.parse import parse_qs params = parse_qs(query_string) # Преобразуем списки в одиночные значения params = {k: v[0] if len(v) == 1 else v for k, v in params.items()} response = requests.get(url, headers=headers, params=params, timeout=10) else: response = requests.get(url, headers=headers, timeout=10) print(f" Статус: {response.status_code}") if response.status_code == 200: try: data = response.json() print(f" ✅ Успешно") # Вывод фрагмента данных if "data" in data: data_count = len(data.get("data", [])) print(f" 📊 Данных: {data_count} записей") if data_count > 0: first_item = data["data"][0] print(f" 🎯 Пример: {json.dumps(first_item, ensure_ascii=False)[:100]}...") elif "name" in data: print(f" 📝 {data.get('name', 'N/A')} ({data.get('iata', 'N/A')}/{data.get('icao', 'N/A')})") results.append((endpoint, True, response.status_code, None)) except json.JSONDecodeError: print(f" ⚠️ Ответ не JSON: {response.text[:100]}") results.append((endpoint, False, response.status_code, "Not JSON")) elif response.status_code == 400: print(f" ❌ Ошибка 400: Неверный запрос") print(f" Детали: {response.text[:200]}") results.append((endpoint, False, response.status_code, "Bad request")) elif response.status_code == 401: print(f" ❌ Ошибка 401: Неавторизован") results.append((endpoint, False, response.status_code, "Unauthorized")) elif response.status_code == 403: print(f" ❌ Ошибка 403: Доступ запрещен") print(f" Возможно: неверный ключ, нет прав, закончились кредиты") results.append((endpoint, False, response.status_code, "Forbidden")) elif response.status_code == 404: print(f" ⚠️ Ошибка 404: Endpoint не найден") results.append((endpoint, False, response.status_code, "Not found")) elif response.status_code == 429: print(f" ⚠️ Ошибка 429: Слишком много запросов") results.append((endpoint, False, response.status_code, "Rate limited")) else: print(f" ❌ Ошибка {response.status_code}") print(f" Ответ: {response.text[:200]}") results.append((endpoint, False, response.status_code, response.text[:100])) except requests.exceptions.Timeout: print(f" ⏱️ Таймаут соединения") results.append((endpoint, False, "Timeout", "Connection timeout")) except requests.exceptions.ConnectionError: print(f" 🔌 Ошибка соединения") results.append((endpoint, False, "ConnectionError", "Network error")) except Exception as e: print(f" 💥 Неожиданная ошибка: {e}") results.append((endpoint, False, "Exception", str(e))) # Сводка successful = sum(1 for _, success, _, _ in results if success) total = len(results) print(f"\n📊 Сводка {key_type}: {successful}/{total} успешных тестов") if successful > 0: print(f"🎉 {key_type.capitalize()} ключ работает!") return True, key_type else: print(f"❌ {key_type.capitalize()} ключ не работает") return False, key_type def main(): print("=== Проверка API ключей Flightradar24 ===") print("Тестирование sandbox и production ключей") print("=" * 50) # Ключи из сообщений sandbox_key = "9d4d192b-8641-4420-b00e-09e3d935badf|fIMdnj8WixjDqyaUTHLKPlgHU9d5JiOZwJJWGiVHdcda602e" production_key = "019d0c18-2d07-704c-9b3e-af32f2482f79|lDODG5lI4BuOGDaE24TPLqRANiuSLXudbC8VrbCgf351f19f" # Тестируем sandbox sandbox_ok, _ = test_api_key(sandbox_key, is_sandbox=True) # Тестируем production production_ok, _ = test_api_key(production_key, is_sandbox=False) print("\n" + "=" * 50) print("🎯 Итоговые результаты:") print(f" Sandbox: {'✅ Работает' if sandbox_ok else '❌ Не работает'}") print(f" Production: {'✅ Работает' if production_ok else '❌ Не работает'}") if sandbox_ok and production_ok: print("\n🎉 Оба ключа работают! Можно начинать разработку.") print(" Этап 1: Прототип на sandbox данных") print(" Этап 2: Переход на production данные после отмашки") elif sandbox_ok and not production_ok: print("\n⚠️ Sandbox работает, production нет.") print(" Можно разрабатывать прототип на sandbox, но нужно проверить production ключ.") print(" Возможные причины: неактивированная подписка, закончились кредиты.") elif not sandbox_ok and production_ok: print("\n⚠️ Production работает, sandbox нет.") print(" Можно разрабатывать сразу на production (будет расходовать кредиты).") else: print("\n❌ Ни один ключ не работает.") print(" Проверьте правильность ключей и статус подписки.") # Сохраняем ключи в файл .env для удобства with open(".env", "w") as f: f.write(f"FLIGHTRADAR24_SANDBOX_KEY={sandbox_key}\n") f.write(f"FLIGHTRADAR24_PRODUCTION_KEY={production_key}\n") f.write(f"FLIGHTRADAR24_API_KEY={sandbox_key} # По умолчанию используем sandbox\n") print(f"\n💾 Ключи сохранены в .env файл") print(" Для использования в скриптах:") print(" - Sandbox: FLIGHTRADAR24_SANDBOX_KEY") print(" - Production: FLIGHTRADAR24_PRODUCTION_KEY") print(" - По умолчанию: FLIGHTRADAR24_API_KEY (sandbox)") return 0 if sandbox_ok else 1 if __name__ == "__main__": try: sys.exit(main()) except KeyboardInterrupt: print("\n\n⏹ Проверка прервана") sys.exit(1) except Exception as e: print(f"\n💥 Критическая ошибка: {e}") sys.exit(2)