Files
wiki/tasks/flightradar24/scripts/test_both_keys.py
2026-04-12 21:55:33 +03:00

195 lines
9.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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)