Skip to content

lolevan/sports-data-parser

Repository files navigation

Проект автоматизации спортивных ставок v.5

Этот проект представляет собой систему автоматизации спортивных ставок, которая интегрирует данные из разных источников, таких как Pinnacle и другие букмекеры, для выявления и использования выгодных возможностей для ставок. Система анализирует коэффициенты, сопоставляет события и предоставляет информацию для принятия решений о ставках.

Структура проекта

project_root/ ├── parsers/ <-- получение и парсинг данных, Flask ├── matching/ <-- сопоставление матчей ├── automation/ <-- анализ, размещение ставок, Flask ├── pinnacle_recheck/ ├── csv_generator/ ├── csv_merge/ ├── json_to_csv/ ├── match_csv_files/ ├── analyzer.py <-- анализ данных от парсеров ├── client.py ├── utils.py ├── bookmakers.json <-- конфиг букмекеров: порт, путь ├── match_limits.json <-- завистимости д/проекта ├── placed_bets_ids.json <-- завистимости д/проекта └── requirements.txt <-- завистимости д/проекта

Функциональность

1. Получение и парсинг данных: Система получает данные о коэффициентах и матчах от Pinnacle и других букмекеров, используя специализированные парсеры. 2. Сопоставление матчей: Модуль matching/ отвечает за сопоставление событий между данными из разных источников, обеспечивая точное сравнение коэффициентов. 3. Анализ коэффициентов: analyzer.py анализирует полученные коэффициенты, сравнивает их между букмекерами и выявляет потенциально выгодные ставки. 4. Автоматическое размещение ставок: Модуль automation/ принимает решения о размещении ставок на основе анализа и автоматически размещает их у выбранных букмекеров. 5. Веб-интерфейс: Предоставляется веб-интерфейс для мониторинга коэффициентов и управления ставками. 6. Отчетность: Система создает CSV отчеты и отправляет уведомления через Telegram-бота.

Настройка и запуск

Установите необходимые зависимости:

pip install -r requirements.txt

Настройте учетные данные API и токены в соответствующих конфигурационных файлах. Запустите парсеры для сбора данных от букмекеров:

python /parsers/[bookmaker_name]/main.py

Запустите AdvancedAnalyzer для обработки и анализа данных:

python analyzer.py

Запустите модуль сопастовления данных:

python /matching/main.py

Для автоматического размещения ставок запустите модули автоматизации:

python automation/[bookmaker_name]/main.py

Откройте веб-интерфейс для мониторинга и управления ставками.

Основные компоненты системы

1. Парсеры данных по букмекерам

project_root/ ├── parsers/ │ ├── betcenter/ <--Betcenter (порт 6006) │ ├── fonbet/ <--Fonbet (порт 6005) │ ├── lobbet_me/ <--Lobbet (порт 6007) │ ├── pinnacle2/ <--Pinnacle2 (порт 6000) - источник для сравнения │ ├── sansabet/ <--Sansabet (порт 6001) │ ├── unibet_BE/ <--Unibet_BE (порт 6003) │ ├── unibet_UK/ <--Unibet_UK (порт 6004) │ └── Стандарт перевода данных.md │ ├── bookmakers.json Список парсеров букмекеров, их порты, пути

Основные функции

  • Сбор данных о предстоящих и live матчах
  • Парсинг коэффициентов для различных типов ставок
  • Стандартизация данных для унифицированного формата
  • Сохранение обработанных данных в формате JSONL
  • Передача актуальных данных клиентам через WebSocket

Ключевые компоненты

Конфигурационные файлы: Содержат настройки для подключения к API букмекеров, параметры WebSocket-сервера, интервалы обновления данных и другие важные параметры. Основной скрипт (main.py): Координирует весь процесс парсинга, включая инициализацию, запуск асинхронных задач и управление WebSocket-сервером. Модули парсинга: Специализированные скрипты для каждого букмекера, реализующие логику взаимодействия с их API и обработку полученных данных. Вспомогательные функции: Набор утилит для обработки и стандартизации данных, работы с API, управления прокси и т.д. WebSocket-сервер: Обеспечивает передачу обновленных данных подключенным клиентам в режиме реального времени.

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

Использование асинхронного программирования для эффективной обработки данных. Реализация механизмов ограничения частоты запросов к API букмекеров. Поддержка работы через прокси-серверы для обхода ограничений. Логирование всех важных событий и ошибок для удобства отладки. Гибкая конфигурация, позволяющая настраивать параметры парсинга для каждого букмекера.

Настройка и запуск

Для запуска каждого парсера необходимо:

Установить зависимости из файла [bookmaker]/requirements.txt. Настроить конфигурационные файлы для каждого букмекера. Запустить основной скрипт командой:

python main.py

Парсер будет работать в фоновом режиме, постоянно обновляя данные и отправляя их подключенным клиентам.

2. Сопоставление матчей Pinnacle с данными букмекеров.

Система автоматически сопоставляет спортивные события между букмекерской конторой Pinnacle и другими букмекерами, получая данные через WebSocket от парсеров и используя алгоритмы нечеткого сравнения. Она сохраняет результаты сопоставления в JSON-файлы для каждого букмекера и отправляет регулярные отчеты о проценте успешных сопоставлений через Telegram бот.

Структура файлов

project_root/ ├── matching/ │ ├── bookmaker_mappings/ <--Маппинги и результаты сопоставления событий (маппинги стран, лиг, команд между Pinnacle и другими букмекерами, cопоставленные/несопоставленные события как для Pinnacle, так и для других букмекеров) │ ├── __init__.py │ ├── algo_matching.py <--Содержит класс MatchPairer, который реализует алгоритм сопоставления матчей между разными букмекерами │ ├── main.py <--Основная точка входа в приложение. Координирует весь процесс сбора ставок и WebSocket сервера │ ├── mappings.py <--Реализует класс Mappings для управления маппингами между различными букмекерами (страны, лиги, команды) │ ├── match_finder.py <--Содержит класс MatchFinder для поиска соответствующих матчей между Pinnacle и другими букмекерами │ ├── my_test.py <--Тестовый скрипт для проверки функциональности MatchPairer │ ├── telegram_config.json <--Файл настроек для Тм бота │ └── websocket_client.py <--Подключение к системе букмекера

Настройка и запуск

Установите необходимые зависимости: pip install aiogram fuzzywuzzy websockets Убедитесь, что у вас есть файл bookmakers.json в корневой директории проекта с настройками для букмекеров. Создайте файл telegram_config.json в matching/ с вашим токеном бота и ID чата:

{
  "token": "ваш_токен_бота",
  "chat_id": "ваш_id_чата"
}

Запустите основной скрипт: python main.py

Основные функции

  • Получение данных о спортивных событиях от различных букмекеров через WebSocket.
  • Сопоставление событий между Pinnacle и другими букмекерами.
  • Создание и обновление маппингов для стран, лиг и команд.
  • Сохранение результатов сопоставления (сопоставленные и несопоставленные события).
  • Периодическая отправка отчетов о проценте успешных сопоставлений через Telegram.
  • Обработка ошибок и автоматический перезапуск системы при критических сбоях.

Ключевые компоненты

WebSocketClient (websocket_client.py): start(): Запускает WebSocket соединения с букмекерами get_data(bookmaker): Получает актуальные данные от конкретного букмекера

MatchPairer (algo_matching.py): match_events(): Основной метод для сопоставления событий между Pinnacle и другим букмекером first_round_matching(): Сопоставление с учетом лиги и страны second_round_matching(): Сопоставление без учета лиги third_round_matching(): Сопоставление с учетом времени, округленного до дня match_on_single_team(): Сопоставление по одной известной команде create_match(): Создает структуру данных для сопоставленного матча

Mappings (mappings.py): add_mapping(): Добавляет новое соответствие в маппинги get_mapped_value(): Получает сопоставленное значение из маппингов save_mapping(): Сохраняет маппинги в JSON файл load_mapping(): Загружает маппинги из JSON файла get_country(), get_league(), get_team(): Получают сопоставленные значения для стран, лиг и команд

MatchFinder (match_finder.py): find_corresponding_match(): Ищет соответствующий матч другого букмекера для матча Pinnacle load_matched_events(): Загружает ранее сопоставленные события из файла find_corresponding_match_by_id(): Ищет соответствие по ID события Pinnacle

PinnacleDataManager: update_matches(): Обновляет данные о матчах Pinnacle get_matches(): Возвращает текущие данные о матчах Pinnacle

Основные асинхронные функции в main.py: process_pinnacle_data(): Обрабатывает и обновляет данные Pinnacle process_other_bookmakers(): Обрабатывает данные других букмекеров и выполняет сопоставление main(): Координирует весь процесс, запускает основные задачи

Функции для работы с Telegram ботом: send_message(): Отправляет сообщение через Telegram бот generate_report(): Генерирует отчет о проценте сопоставления

Функции для работы с файловой системой: save_json_file(): Сохраняет данные в JSON файл load_json_file(): Загружает данные из JSON файла save_matched_events(): Сохраняет сопоставленные события save_unmatched_events(): Сохраняет несопоставленные события

Вспомогательные функции: round_time(): Округляет время до заданного интервала compare_tennis_names(): Специальная функция для сравнения имен теннисистов check_no_value_and_outcome_count(): Проверяет соответствие коэффициентов и исходов

3. Анализ коэффициентов и выявление ценных ставок.

analyzer.py содержит класс AdvancedAnalyzer, который является ключевым компонентом системы анализа данных букмекеров. Он анализирует и сравнивает коэффициенты между Pinnacle и другими букмекерами, вычисляя потенциальную доходность ставок, фильтруя и обновляя данные, учитывая время их актуальности. Запускает собственный WebSocket сервер для передачи результатов анализа клиентам.

Структура файлов

project_root/ ├── analyzer.py <-- ключевой компонент системы анализа данных букмекеров ├── client.py <-- клиентский скрипт для подключения к WebSocket AdvancedAnalyzer (опция для тестирования)

Основые функции

  • Сбор данных о ставках. Система подключается к нескольким букмекерам через WebSocket и непрерывно получает информацию о коэффициентах.
  • Обработка и фильтрация данных. Полученные данные организуются по букмекерам, видам спорта и типам матчей. Устаревшая информация удаляется для поддержания актуальности базы данных.
  • Сопоставление матчей и исходов. Программа находит соответствующие матчи и исходы между Pinnacle и другими букмекерами для корректного сравнения коэффициентов.
  • Анализ коэффициентов. Система сравнивает коэффициенты между Pinnacle и другими букмекерами, рассчитывая потенциальную доходность для каждой возможности ставки.
  • Выявление ценных ставок. На основе заданных критериев, таких как минимальная и максимальная величина коэффициентов, определяются наиболее выгодные ставки.
  • Распространение результатов анализа. Система запускает WebSocket сервер, который в реальном времени отправляет отфильтрованные и актуальные данные о ценных ставках подключенным клиентам.

Ключевые компоненты:

AdvancedAnalyzer: Основной класс, управляющий всем процессом анализа с методами: analyze_loop() - запуск циклов анализа данных букмекеров analyze_bookmaker() - анализирует данные конкретного букмекера в сравнении с Pinnacle: фильтр свежих данных, удаление устаревшей информации. Если матч сопоставлен, то вызывается analyze_match() analyze_match() - анализ конкретного матча, поиск соответсвующих исходов, для каждой пары исходов вызывается analyze_outcome() analyze_outcome() - анализ исхода на соответствие критериям, расчет потенциальной доходночти, добавление ставки в values для трансляции на WebSocket.

update_bookmaker_data(): Обновляет внутреннее хранилище данных о ставках

update_value(): Обновляет информацию о потенциально выгодных ставках

filter_fresh_data(): Фильтрует устаревшие данные о ставках

4. Система автоматического размещения ставок и отчетов

Эта система предназначена для автоматического анализа коэффициентов, отобранных анализатором и размещения ставок.

Структура файлов

Корневая папка проекта/

  • automation/

    • __ init __.py
    • calculate_stake.py: <-- Расчет оптимального размера ставки на основе критерия Келли.
    • match_limits.py: <--Управление лимитами ставок на матчи.
    • check_stake_posible.py: <--Проверка на неповторяемость ставки (поиск по корневая_папка/placed_bets_ids.json).
    • [bookmakers] /: <--директория для каждого букмекера
      • __ init __.py
      • config.json: <--Файл настроек для API букмекера
      • bets.py/place_bets: <--Скрипт размещения ставки и информации об аккаунте у брокера.
      • main.py: <--Скрипт проводит основной анализ, принятие решения и размещение ставки.
      • placed_bets.json: <--Реестр размещенных ставок.
  • csv_generator/: <--Папка с модулем для создания CSV-отчетов.

  • pinnacle_recheck/:

  • csv_merge.py: <--Обрабатывает, фильтрует файлы matching/bookmaker_mappings/[bookmaker]/matched_events.json и переводит в CSV в match_csv_files/.

  • jsonl_to_csv.py: <--parsers/[bookmaker]/odds_data.jsonl и переводит в CSV в parsers/[bookmaker]/odds_data_csv.jsonl.

  • match_limits.json: <--Управляет лимитами ставок по матчам.

  • placed_bets_ids.json: <--JSON-файл для хранения ID размещенных ставок.

  • utils.py: <--Вспомогательные функции для работы с CSV

  • match_csv_files: <--CSV файлы для матчей с наиболее перспективными вариантами ставок для анализа изменений коэффициентов и потенциальную прибыль (ROI) во времени.
    • *_full.csv: <--Полный набор данных без фильтрации
    • *_filtered.csv: <--Отфильтрованные данные, содержащие только записи с ROI выше определенного порога (обычно 5%) и удовлетворяющие другим критериям.

Основные функции

  • Запуск "монитора" букмекера, прим. FonbetValueMonitor/UnibetValueMonitor при запуске main.py.
  • Установка WebSocket соединения с AdvancedAnalyzer для получения отобранных ставок с оценкой прибыльности.
  • Анализ возможности ставки. Фильтрация данных по заданным критериям (букмекер, тип события, спорт, минимальный yield). Проверка на дублирование ставок. Сравнение коэффициентов с Pinnacle. Расчет оптимального размера ставки. Проверка лимитов на матч.
  • Размещение ставки через API букмекера Обработка результата ставки. Обновление placed_bets.json и match_limits.json. Логирование в bet_log.txt. Генерация CSV-отчета.
  • Управление лимитами и проверка дублирования Проверка и обновление лимитов на матч, предотвращение дублирования ставок
  • Логирование и отчетность Ведение различных лог-файлов. Сохранение информации об ошибках и подозрительных ситуациях
  • Управление лимитами и проверка дублирования Использование функций из automation/match_limits.py Проверка с помощью automation/check_stake_posible.py
  • Файлы для веб-интерфейса Flask-сервера (statis/templates/etc)

Ключевые компоненты:

[bookmaker]Monitor: Основной класс, управляющий процессом мониторинга и ставок: FonbetValueMonitor/UnibetValueMonitor CSVCreator: Компонент для создания CSV-отчетов placed_bets.json: Хранилище информации о размещенных ставках match_limits.json: Файл с лимитами ставок на матчи Различные лог-файлы: bet_log.txt, bet_attempt_log.txt, dangerous_values.txt calculate_stake.py: Расчет оптимального размера ставки на основе критерия Келли. match_limits.py: Управление лимитами ставок на матчи. check_stake_posible.py: Проверка на неповторяемость ставки (поиск по корневая_папка/placed_bets_ids.json). сложность с выделением основных компонентов, т.к. разные подходы у разных букмекеров

Технологии используемые в проекте

Python, WebSocket, Aiogram, Pandas, Flask

Примечание

Этот проект предназначен для образовательных целей и демонстрации возможностей анализа данных в области спортивных ставок. Пожалуйста, используйте ответственно и в соответствии с местным законодательством.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages