Найти тему
Роман Дмитриев

Как обмануть букмекера? Сбор данных. Часть 3. Сохраняем информацию по ставкам и определяем конец события.

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

Для того, чтобы строить хоть какие-то гипотезы, нужно знать, как закончились события. Уже сейчас у нас есть статусы:

  • line - событие еще не началось
  • live - событие идет прямо сейчас

Но нет события о конце матча. В будущем мы будем использовать данные статистики только на основе закончившихся событий. К сожалению, то API, которое у нас есть не позволяет нам легко и просто понять, закончилось событие или нет. Например, есть запрос такого вида

В ссылке мы указываем урл с указанием id, по которому еще недавно можно было получить информацию. После того, как матч закончился, видим, что событие для клиентов пропадает.
В ссылке мы указываем урл с указанием id, по которому еще недавно можно было получить информацию. После того, как матч закончился, видим, что событие для клиентов пропадает.

Что делать? Мы не можем получить информацию о закрытии? Нет, можем. Как раз то, что событие возвращается ненайденным и дает нам понять, что событие закончилось и можно изменять статус.

Что нам дано и что у нас уже есть? Список событий со статусами line и live. Очевидно, что конец матча может наступить только после статуса live. Давайте получим все матчи со статусом live.

-2

Теперь надо интегрировать метод get_ids_from_live_events() в код, который собирал информацию.

Кода становится все больше. Неужели скоро уже рефакторинг?
Кода становится все больше. Неужели скоро уже рефакторинг?

Да, это работает. Теперь у нас есть события, которые не будут изменяться, а значит над ними уже сейчас можно проводить опыты. Правда информации о счете нам пока мало, да и хотелось бы, чтобы информация обновлялась с какой-то периодичностью, иначе если мы будем запускать программу вручную каждые там 5 минут, то много информации не соберешь. Будет лучше, например, оставить программу в работающем состоянии на несколько дней и тогда мы получим много разных событий и ставок.

Ставок? Точно, мы же еще не сохраняем ставки. Повременим тогда с периодичностью и давайте уже прикрутим сохранение хоть каких-нибудь ставок, на основе которых будем проводить вычисления и поиск ошибок букмекеров.

Для начала выберем один вид ставок и будем сохранять их. Тоталы нам подходят, потому что уже сейчас мы сохраняем счет. Необходимо добавить новую таблицу.

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

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

К этому времени код настолько сильно разросся, что скоро уже придется выкладывать ссылку на github.

В метод по добавлению ставок по тоталу сразу добавил и проверку, есть ли вообще уже пара id-value в базе и если есть, то вместо добавления обновляю данные.
В метод по добавлению ставок по тоталу сразу добавил и проверку, есть ли вообще уже пара id-value в базе и если есть, то вместо добавления обновляю данные.

По-хорошему, надо бы проверять всю запись, чтобы исключить лишние операции с базой. Запишем эту проблему в беклог до лучших времен. Ведь так делают все разработчики, правда?

Тут все просто. Формирую словарь и отправляю его в метод по добавлению ставки. А там уже внутри метода он сам разберется, добавить или обновить запись в бд.
Тут все просто. Формирую словарь и отправляю его в метод по добавлению ставки. А там уже внутри метода он сам разберется, добавить или обновить запись в бд.

И Д Е А Л Ь Н О.

Программа готова к использованию. Теперь, запуская файл data_load.py мы добавим матч и ставки по тоталу в нашу базу. Последнее, что нужно сделать, это оформить периодичность. Многие знающие люди скажут, что теперь пора прикрутить cron. Но у меня есть предложение получше. Я буду использовать библиотеку schedule.

Импортируем библиотеку и не забываем установить ее
Импортируем библиотеку и не забываем установить ее

Обрамляем наш код в функцию и затем...

Обратите внимание, что программа не заканчивает работать, продолжает занимать терминал и отрабатывать каждую минуту.
Обратите внимание, что программа не заканчивает работать, продолжает занимать терминал и отрабатывать каждую минуту.

Используя библиотеку schedule настраиваем периодичность. Я сделал так, чтобы функция вызывалась каждую минуту.

Данных пока мало и это понятно, ведь события не проходят за несколько минут и могут длиться несколько часов. Поэтому все, что сейчас нам нужно - это терпение. Желательно оставить программу в таком состоянии на недельку.

Это что же получается? Надо компьютер оставить включенным на неделю?

Не обязательно. В следующей статье мы рассмотрим вариант запуска нашей программы на отдельном сервере, который точно не выключится.

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

Всем прочитавшим до этого момента - большая благодарность. Впереди нас ждет последняя часть по сбору информации, а после нее мы уже приступим к разбору статистики.