Co-authored-by: Copilot <copilot@github.com>
⚽ Match Management & vMix Integration System
Полноценная система управления футбольными матчами с live-обновлением, парсингом данных и интеграцией с vMix.
📌 Описание
Проект состоит из нескольких ключевых частей:
- FastAPI сервер (админка + API)
- Scheduler (live-обновления матчей)
- Парсеры (игры, расписание, таблица)
- PostgreSQL база данных
- WebSocket сервер для vMix
🧱 Архитектура системы
┌──────────────┐
│ Scheduler │
│ │
│ matches_loop │
│ standings │
└──────┬───────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
live_match_worker parser_game parser_standings
│
▼
Database
│
▼
FastAPI
│
▼
vMix
🗄 Структура базы данных
Таблица: matches
Поле Тип Описание
id int ID матча external_id text ID матча на сайте match_date timestamp дата и время status text статус матча home_score int счет хозяев away_score int счет гостей updated_at timestamp последнее обновление
Таблица: standings
Поле Тип Описание
team_id int команда position int позиция points int очки played int сыграно
Таблица: match_lineup_players
- составы команд
- старт + запас
Таблица: match_events
- события матча (голы, карточки и т.д.)
🔄 Основные процессы
1. Scheduler
Работает как отдельный процесс:
Каждую минуту:
- ищет матчи на сегодня
- запускает worker за 1 минуту до начала
Worker:
- раз в минуту:
- парсит сайт
- обновляет счет и статус
- останавливается при finished
2. Обновление турнирной таблицы
- вызывается
parser_standings - обновляет standings в БД
- запускается раз в минуту
3. FastAPI
Обеспечивает:
- админку
- API для vMix
- WebSocket соединения
📡 API Endpoints
Основные
Матчи
- GET /admin/matches
- GET /admin/session/{session_token}
vMix
- GET /vmix/session/{session_token}/info
- GET /vmix/session/{session_token}/standings
- GET /vmix/session/{session_token}/schedule
- GET /vmix/session/{session_token}/scoreboard
WebSocket
/ws/vmix-client
Функции: - регистрация клиентов - heartbeat - отправка команд
⚙️ Запуск проекта
1. Установка
pip install -r requirements.txt
2. Настройка БД
Отредактировать:
db.py
3. Запуск
API
uvicorn app:app --reload
Scheduler
python scheduler.py
❗ ВАЖНО
Scheduler должен запускаться отдельно.
НЕЛЬЗЯ:
run_scheduler()
внутри FastAPI.
🔧 Что нужно реализовать
fetch_match_live_data()
def fetch_match_live_data(match_row):
return {
"status": "live",
"home_score": 1,
"away_score": 0
}
🚀 Рекомендации
- запускать scheduler отдельно
- использовать 1 worker для API
- добавить логирование
- обрабатывать ошибки парсинга
📌 Dev режим
uvicorn app:app --reload
python scheduler.py
🧠 Production
- API отдельно
- Scheduler отдельно
- supervisor / systemd
📬 Контакты
Для доработок и улучшений --- пиши 👍