Современное веб-приложение для просмотра статистики игроков FACEIT в Counter-Strike 2. Быстрое, удобное и красивое решение с поддержкой темной темы и двух языков.
- Полная статистика CS2: ELO, уровень, K/D, винрейт, ADR
- История матчей: последние 5 матчей с подробной информацией
- Avg. Kills: точный расчет по 30 последним матчам
- Информация о банах: отображение активных банов игрока
- Поддержка CSGO: отображение старого ELO из CS:GO
- Recent Searches: лента последних 10 поисков в реальном времени
- Автообновление: каждые 30 секунд
- Детальная информация: никнейм, уровень, страна, баны
- Clickable: быстрый переход к профилю игрока
- Темная/светлая тема: переключатель в правом верхнем углу
- Адаптивный дизайн: отлично работает на мобильных
- Многоязычность: русский и английский языки
- Красивые анимации: плавные переходы и эффекты
- Асинхронные запросы: httpx для максимальной скорости
- Кэширование: 5 минут TTL для снижения нагрузки на API
- Параллельная обработка: все запросы выполняются одновременно
- SQLite база данных: сохранение истории поисков
faceit-python-0.1.1/
├── 📂 api_clients/ # API клиенты для работы с FACEIT
│ ├── __init__.py
│ └── fast_api_client_httpx.py # Быстрый асинхронный клиент
├── 📂 db/ # База данных
│ ├── __init__.py
│ └── database.py # Модели и операции с БД
├── 📂 static/ # Статические файлы
│ ├── style.css # Стили с поддержкой темной темы
│ ├── script.js # JavaScript логика
│ ├── flags/ # Флаги стран
│ ├── lvl1.svg - lvl10.svg # Иконки уровней FACEIT
│ └── invalid.svg # Иконка для забаненных игроков
├── 📂 templates/ # HTML шаблоны
│ ├── index.html # Главная страница
│ ├── player.html # Страница игрока
│ ├── privacy.html # Политика конфиденциальности
│ └── terms.html # Условия использования
├── 📂 tests/ # Тестовые файлы (13 файлов)
│ ├── test_performance.py # Тесты производительности
│ ├── test_bans.py # Тесты работы с банами
│ └── ... # Другие тесты
├── main.py # Основное FastAPI приложение
├── requirements.txt # Зависимости Python
├── env.example # Пример конфигурации
├── .gitignore # Git исключения
└── README.md # Этот файл
pip install -r requirements.txtСоздайте файл .env на основе env.example:
# FACEIT API Configuration (обязательно)
FACEIT_API_KEY=your_faceit_api_key_here
# Steam API Configuration (опционально, для кастомных URL)
STEAM_API_KEY=your_steam_api_key_here
# Environment Configuration
ENVIRONMENT=development
# Server Configuration
PORT=8000
WORKERS=1
# Logging Configuration
LOG_LEVEL=INFOpython main.py# Установите ENVIRONMENT=production в .env
ENVIRONMENT=production python main.pyПриложение будет доступно: http://localhost:8000
GET /- главная страница с поискомGET /{steam_id}- страница конкретного игрокаGET /privacy- политика конфиденциальностиGET /terms- условия использования
POST /find-faceit-by-steam- поиск игрока по Steam URLGET /api/recent-searches- получить последние 10 поисков
GET /static/*- CSS, JS, изображения, иконки
- Введите Steam URL профиля
- Нажмите "Get Statistics"
- Получите полную статистику CS2
https://steamcommunity.com/profiles/76561198000000000
https://steamcommunity.com/id/username
- Автоматически обновляется каждые 30 секунд
- Показывает последние 10 поисков
- Клик по записи → быстрый переход к игроку
# Тест производительности
python tests/test_performance.py
# Тест работы с банами
python tests/test_bans.py
# Тест расчета по 30 матчам
python tests/test_30_matches.py# Поиск игрока
curl -X POST "http://localhost:8000/find-faceit-by-steam" \
-H "Content-Type: application/json" \
-d '{"steam_url": "https://steamcommunity.com/profiles/76561198003886164"}'
# Recent searches
curl "http://localhost:8000/api/recent-searches"- FastAPI - современный асинхронный фреймворк
- SQLite + SQLAlchemy - база данных для recent searches
- httpx - асинхронные HTTP запросы
- Pydantic - валидация данных
- Vanilla JavaScript - без фреймворков
- Bootstrap 5 - адаптивный дизайн
- FontAwesome - иконки
- CSS Variables - поддержка тем
- Источник: 30 последних матчей (не 20!)
- Формула:
(Сумма убийств) / (Количество матчей) - Fallback: если API не дает значение, вычисляем сами
- Отображается: 5 последних матчей для удобства
- Данные: карта, результат, K/D/A, дата, ссылка на матч
- SQLite база: сохраняет историю между перезапусками
- Автоочистка: максимум 50 записей в БД
- Дедупликация: обновляет существующие записи по Steam ID
- TTL: 5 минут для данных игроков
- In-memory: простое решение без Redis
- Cache key: Steam ID
- 🇷🇺 Русский (по умолчанию)
- 🇺🇸 English
- Кнопка в правом верхнем углу
- Сохраняется в localStorage
- Автоматический перевод времени в live feed
FACEIT_API_KEY- ключ FACEIT API (обязательно)STEAM_API_KEY- ключ Steam API (для кастомных URL)ENVIRONMENT- окружение (development/production)PORT- порт сервера (по умолчанию 8000)WORKERS- количество воркеров для продакшена
- TTL: 300 секунд (5 минут)
- Max records: 50 записей в БД recent searches
- Auto-refresh: 30 секунд для live feed
- Уровень: INFO для продакшена
- Файл: app.log в корне проекта
- Структура: timestamp, уровень, сообщение
- Ротация: ручная (рекомендуется настроить)
- Время обработки запросов
- Статус кэша (hit/miss)
- Количество записей в БД
- Ошибки API FACEIT
- ✅ Валидация входных данных с Pydantic
- ✅ Скрытие API ключей в переменных окружения
- ✅ .gitignore для конфиденциальных файлов
- ✅ HTTPS ready (настройте reverse proxy)
- 🔧 Настроить CORS для конкретных доменов
- 🔧 Добавить rate limiting (slowapi)
- 🔧 Использовать HTTPS
- 🔧 Настроить мониторинг (Prometheus/Grafana)
fastapi==0.109.2 # Основной фреймворк
uvicorn==0.27.1 # ASGI сервер
python-dotenv==1.0.1 # Переменные окружения
requests==2.32.3 # HTTP клиент для Steam API
httpx==0.28.1 # Асинхронный HTTP клиент
sqlalchemy==2.0.36 # ORM для базы данных
aiosqlite==0.20.0 # Асинхронный SQLite драйвер
pydantic==2.11.4 # Валидация данных
jinja2==3.1.3 # Шаблонизатор
starlette==0.36.3 # ASGI toolkit
- 🌞 Светлая тема с orange accent
- 🌙 Темная тема с синими акцентами
- 📱 Адаптивный дизайн для мобильных
- 📊 Детальная статистика с прогресс-барами
- 🏆 История последних матчей
⚠️ Информация о банах (если есть)
- 🔴 Live индикатор с анимацией
- 👤 Аватары и никнеймы игроков
- 🌍 Флаги стран
- 🎖️ Уровни FACEIT
Этот проект создан для образовательных целей и демонстрации работы с FACEIT API.
Создано с ❤️ для сообщества CS2
Готов к продакшену? Почти! См. анализ готовности для деталей.