Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FACEIT Stats - Статистика CS2

Современное веб-приложение для просмотра статистики игроков FACEIT в Counter-Strike 2. Быстрое, удобное и красивое решение с поддержкой темной темы и двух языков.

✨ Основные возможности

🎮 Статистика игроков

  • Полная статистика CS2: ELO, уровень, K/D, винрейт, ADR
  • История матчей: последние 5 матчей с подробной информацией
  • Avg. Kills: точный расчет по 30 последним матчам
  • Информация о банах: отображение активных банов игрока
  • Поддержка CSGO: отображение старого ELO из CS:GO

🔥 Live Feed

  • 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                    # Этот файл

🚀 Установка и запуск

1. Установка зависимостей

pip install -r requirements.txt

2. Настройка переменных окружения

Создайте файл .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=INFO

3. Запуск приложения

Для разработки:

python main.py

Для продакшена:

# Установите ENVIRONMENT=production в .env
ENVIRONMENT=production python main.py

Приложение будет доступно: http://localhost:8000

🎯 API Endpoints

Веб-страницы:

  • GET / - главная страница с поиском
  • GET /{steam_id} - страница конкретного игрока
  • GET /privacy - политика конфиденциальности
  • GET /terms - условия использования

API:

  • POST /find-faceit-by-steam - поиск игрока по Steam URL
  • GET /api/recent-searches - получить последние 10 поисков

Статические файлы:

  • GET /static/* - CSS, JS, изображения, иконки

🎮 Использование

Поиск игрока:

  1. Введите Steam URL профиля
  2. Нажмите "Get Statistics"
  3. Получите полную статистику CS2

Поддерживаемые форматы Steam URL:

https://steamcommunity.com/profiles/76561198000000000
https://steamcommunity.com/id/username

Live Feed:

  • Автоматически обновляется каждые 30 секунд
  • Показывает последние 10 поисков
  • Клик по записи → быстрый переход к игроку

🧪 Тестирование

Запуск всех тестов:

# Тест производительности
python tests/test_performance.py

# Тест работы с банами  
python tests/test_bans.py

# Тест расчета по 30 матчам
python tests/test_30_matches.py

API тестирование:

# Поиск игрока
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"

🛠️ Технические детали

Backend:

  • FastAPI - современный асинхронный фреймворк
  • SQLite + SQLAlchemy - база данных для recent searches
  • httpx - асинхронные HTTP запросы
  • Pydantic - валидация данных

Frontend:

  • Vanilla JavaScript - без фреймворков
  • Bootstrap 5 - адаптивный дизайн
  • FontAwesome - иконки
  • CSS Variables - поддержка тем

Особенности реализации:

Расчет Avg. Kills:

  • Источник: 30 последних матчей (не 20!)
  • Формула: (Сумма убийств) / (Количество матчей)
  • Fallback: если API не дает значение, вычисляем сами

Match History:

  • Отображается: 5 последних матчей для удобства
  • Данные: карта, результат, K/D/A, дата, ссылка на матч

Live Feed:

  • 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 Feed:

  • 🔴 Live индикатор с анимацией
  • 👤 Аватары и никнеймы игроков
  • 🌍 Флаги стран
  • 🎖️ Уровни FACEIT

📄 Лицензия

Этот проект создан для образовательных целей и демонстрации работы с FACEIT API.

👨‍💻 Автор

Создано с ❤️ для сообщества CS2


Готов к продакшену? Почти! См. анализ готовности для деталей.

About

FACEIT CS2 player statistics website with live feed

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages