Описание
Заказчик поставил задачу: создать систему, которая автоматически собирает с сайта BetExplorer полную статистику футбольных матчей (коэффициенты, результаты, даты, команды, лиги), сохраняет данные в структурированную базу данных, а затем на основе собранных данных рассчитывает вероятности исходов, эффективности ставок и формирует прогнозы по 6 критериям (включая разницу очков, проход форы и распределение Пуассона).
Главные вызовы проекта:
Сбор данных из нескольких тысяч матчей из десятков лиг и сезонов (Аргентина, Англия, Бразилия, Армения и др.).
Обработка азиатских фор (Asian Handicap) — определение равновесных и покупных линий с целыми индексами.
Расчёт сложных статистических критериев и вероятностей для каждого матча.
Экспорт результатов в Excel с автоматической стилизацией и форматированием.
Особенность: все расчёты должны выполняться для тысяч матчей без таймаутов и сбоев.
Решение
Для решения задачи я разработал многослойную архитектуру:
1. Сбор данных (парсер)
Написал парсер на Playwright (Node.js) с эмуляцией браузера для обхода динамических страниц.
Парсер умеет обрабатывать страницы турниров (/results/) и страницы матчей (#ah) для сбора азиатских фор.
Реализован механизм извлечения коэффициентов 1X2, дат, счёта, названий команд и ID матчей.
2. Хранение и структура данных
Использовал Laravel + MySQL с чёткой структурой БД: лиги, команды, матчи, азиатские форы, критерии, прогнозы.
Внедрена система дедупликации (updateOrCreate) для избежания дублей при повторных запусках.
3. Асинхронная обработка (масштабирование)
Так как объём данных достиг 6000+ матчей, синхронная обработка приводила к таймаутам (504 Gateway Time-out).
Внедрил систему очередей Laravel Jobs с драйвером database:
Отдельные задания для парсинга каждой ссылки.
Отдельные задания для сбора азиатских фор для каждого матча.
Настроил фоновый воркер (queue:work) с поддержкой повторных попыток (tries: 3) и таймаутов.
Добавил кнопку в административной панели для запуска воркера из интерфейса (без доступа к консоли).
4. Расчёты и статистика
Реализовал расчёт 6 критериев:
Разница очков общая.
Разница очков дома.
Разница очков за последние 5 матчей.
Разница очков за последние 5 матчей дома.
Процент прохода форы с учётом поля.
Критерий Пуассона (сила атаки/обороны, ожидаемые голы, вероятности исходов).
Алгоритмы вероятностей: на основе исторических данных для каждого критерия вычисляются частоты исходов, умножаются на коэффициенты → получаются эффективности.
Все расчёты также вынесены в очередь для обработки тысяч матчей без сбоев.
5. Экспорт результатов
Разработан модуль экспорта в Excel (XLSX) с автоматической стилизацией (зелёная шапка, чередование строк, границы, автоширина).
В файле выводятся: дата, лига, команды, коэффициенты, вероятности, эффективности, прогноз (победа хозяев/ничья/победа гостей), а также данные по азиатским форам (равновесные и покупные).
6. Интерфейс управления
Создана административная панель на Filament с пошаговыми блоками:
Настройка парсинга (ввод ссылок, выбор наборов URL).
Этапы: сбор данных → расчёт статистики → расчёт критериев → расчёт вероятностей → экспорт.
Сервисные кнопки для очистки таблиц.
Добавлена таблица последних добавленных матчей для контроля качества.
Результат
Система успешно обрабатывает более 6000 матчей из 20+ ссылок (10+ лиг, 3+ сезона). Основные достижения:
Стабильность. Благодаря очереди и фоновым воркерам обработка выполняется без таймаутов даже при 4000+ заданиях.
Автоматизация. Парсинг, расчёты и экспорт происходят в несколько кликов, без ручного вмешательства.
Точность прогнозов. Расчёты основаны на реальных исторических данных и 6 критериях, что повышает объективность.
Удобство для заказчика. Интерфейс интуитивно понятен, все этапы визуально разделены, есть подсказки для каждого действия.
Масштабируемость. Архитектура позволяет легко добавлять новые лиги, сезоны и критерии без переписывания кода.
Экспорт данных. Заказчик получает готовый Excel-файл со всеми прогнозами и азиатскими форами, который можно использовать для анализа и принятия решений.
Проект показал, что даже сложная система сбора и анализа данных может быть реализована надёжно, с учётом всех требований к производительности и удобству использования.