workspace: initial commit - MEMORY, tasks, skills, memory

This commit is contained in:
Stream
2026-04-12 21:46:09 +03:00
parent 84cd63ce70
commit 256086e73e
224 changed files with 31654 additions and 0 deletions

View File

@@ -0,0 +1,226 @@
#!/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)