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

226 lines
10 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 ключа и доступности Flightradar24 API
"""
import os
import sys
import json
import requests
from datetime import datetime
def check_api_key(api_key):
"""Проверка валидности API ключа"""
print("🔑 Проверка API ключа Flightradar24...")
print(f" Ключ: {api_key[:10]}...{api_key[-4:] if len(api_key) > 14 else '***'}")
print()
# Базовый URL API
base_url = "https://api.flightradar24.com/common/v1"
# Подготовка заголовков
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
# Тестовые запросы (минимальные по кредитам)
test_endpoints = [
("/airport/light/SVO", "Аэропорт Шереметьево (light)"),
("/airline/light/AFL", "Авиакомпания Аэрофлот (light)"),
("/usage", "Отчет об использовании API"),
]
results = []
total_credits_used = 0
for endpoint, description in test_endpoints:
try:
url = base_url + endpoint
print(f"🔍 Тест: {description}")
print(f" Endpoint: {endpoint}")
response = requests.get(url, headers=headers, timeout=10)
if response.status_code == 200:
data = response.json()
# Проверка структуры ответа
if endpoint == "/usage":
credits_used = data.get("credits_used", 0)
credits_total = data.get("credits_total", 60000)
total_credits_used = credits_used
print(f" ✅ Успешно (кредитов использовано: {credits_used:,}/{credits_total:,})")
# Определение типа подписки
if credits_total >= 1000000:
subscription = "Advanced или выше"
elif credits_total >= 100000:
subscription = "Essential"
elif credits_total >= 60000:
subscription = "Explorer (промо до 120k)"
else:
subscription = "Неизвестный тариф"
print(f" 💳 Тариф: {subscription} ({credits_total:,} кредитов/месяц)")
else:
# Для других endpoints проверяем наличие данных
if data.get("data") or "name" in data:
print(f" ✅ Успешно (данные получены)")
else:
print(f" ⚠️ Ответ получен, но данных нет")
results.append((endpoint, True, response.status_code, None))
elif response.status_code == 401:
print(f" ❌ Ошибка 401: Неавторизован (неверный API ключ)")
results.append((endpoint, False, response.status_code, "Invalid API key"))
break
elif response.status_code == 403:
print(f" ❌ Ошибка 403: Доступ запрещен (недостаточно прав или кредитов)")
results.append((endpoint, False, response.status_code, "Access denied"))
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: Слишком много запросов (лимит rate limiting)")
results.append((endpoint, False, response.status_code, "Rate limited"))
else:
print(f" ❌ Ошибка {response.status_code}: {response.text[:100]}")
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)))
print()
# Сводка результатов
print("=" * 60)
print("📊 Сводка проверки API:")
print()
successful_tests = sum(1 for _, success, _, _ in results if success)
total_tests = len(results)
print(f"✅ Успешных тестов: {successful_tests}/{total_tests}")
if successful_tests > 0:
print("🎉 API ключ валиден и работает!")
# Дополнительная информация
print()
print("📈 Информация о подписке:")
# Проверка типа подписки через usage endpoint
try:
response = requests.get(base_url + "/usage", headers=headers, timeout=5)
if response.status_code == 200:
usage_data = response.json()
credits_total = usage_data.get("credits_total", 0)
# Определение тарифа
if credits_total >= 1000000:
tariff = "Advanced или Business"
features = "Полный доступ ко всем endpoints"
elif credits_total >= 100000:
tariff = "Essential"
features = "Расширенный доступ, но без некоторых count endpoints"
elif credits_total >= 60000:
tariff = "Explorer"
features = "Базовый доступ (60k кредитов/мес)"
if credits_total >= 120000:
tariff += " (промо до 120k)"
else:
tariff = "Неизвестный тариф"
features = "Проверьте документацию"
print(f" 💳 Тариф: {tariff}")
print(f" 🎯 Кредитов в месяц: {credits_total:,}")
print(f" 📋 Возможности: {features}")
# Рекомендации по использованию кредитов
print()
print("💡 Рекомендации по использованию:")
print(f" - Средний запрос: 5-50 кредитов")
print(f" - Примерное количество запросов: {credits_total // 50:,} в месяц")
print(f" - Экономьте кредиты: используйте light endpoints и кэширование")
except:
print(" ⚠️ Не удалось получить детальную информацию о тарифе")
else:
print("❌ API ключ не работает. Возможные причины:")
print(" - Неверный API ключ")
print(" - Подписка не активирована")
print(" - Закончились кредиты")
print(" - Проблемы с сетью")
print()
print("🔧 Решение:")
print(" 1. Проверьте правильность API ключа")
print(" 2. Убедитесь, что подписка Explorer активна")
print(" 3. Проверьте баланс кредитов в личном кабинете")
print()
print("🔗 Полезные ссылки:")
print(" - Документация API: https://fr24api.flightradar24.com/")
print(" - Подписки и кредиты: https://fr24api.flightradar24.com/subscriptions-and-credits")
print(" - Поддержка: https://support.fr24.com/")
return successful_tests > 0
def main():
print("=== Flightradar24 API Validator ===")
print("Проверка валидности API ключа и доступности сервиса")
print()
# Получение API ключа
api_key = os.getenv("FLIGHTRADAR24_API_KEY")
if not api_key:
print("❌ Переменная окружения FLIGHTRADAR24_API_KEY не установлена")
print()
print("Установите API ключ командой:")
print(" export FLIGHTRADAR24_API_KEY='your_api_key_here'")
print()
print("Или запустите скрипт с ключом:")
print(" FLIGHTRADAR24_API_KEY='your_key' python3 check_api.py")
sys.exit(1)
# Проверка формата ключа (базовая)
if len(api_key) < 20:
print("⚠️ API ключ слишком короткий. Убедитесь в правильности.")
# Выполнение проверки
is_valid = check_api_key(api_key)
# Возвращаем соответствующий код выхода
if is_valid:
print("\n✅ Проверка завершена успешно")
sys.exit(0)
else:
print("\n❌ Проверка не пройдена")
sys.exit(1)
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\n\n⏹ Проверка прервана пользователем")
sys.exit(1)
except Exception as e:
print(f"\n❌ Неожиданная ошибка: {e}")
sys.exit(2)