Initial commit
This commit is contained in:
@@ -0,0 +1,342 @@
|
||||
using AutoBet.DataRecorded.MessageControllers;
|
||||
using SwiftyMessageHub.Core;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using AutoBet.DataRecorded.RaceResultsDataCollector;
|
||||
using BritishHorseRacingApi;
|
||||
using System.Collections.Generic;
|
||||
using BritishHorseRacingApi.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using AutoBet.Db;
|
||||
using ApiModels = BritishHorseRacingApi.Models;
|
||||
|
||||
namespace AutoBet.DataRecorded
|
||||
{
|
||||
class Program
|
||||
{
|
||||
public static async Task Main(string[] args)
|
||||
{
|
||||
//StartResultsCollection().GetAwaiter().GetResult();
|
||||
//var dayToCollectRunners = GetDayToCollect();
|
||||
await CollectPastResults();
|
||||
|
||||
//await CollectCurrent();
|
||||
//await GetFixtureIds();
|
||||
|
||||
}
|
||||
|
||||
private static async Task GetFixtureIds()
|
||||
{
|
||||
Db.Fixture[] fixturesToProcces;
|
||||
using (var db = new Db.HorseRacingDataContext())
|
||||
{
|
||||
var ids = db.Races.Where(e => e.FixtureId != 0).Select(e => e.FixtureId).ToArray();
|
||||
fixturesToProcces = db.Fixtures.Where(e => !ids.Contains(e.FixtureId)).ToArray();
|
||||
var client = new ApiClient(TimeSpan.FromSeconds(0), "D_SID=188.172.158.138:JT/OEx87nl5ScspTQk38UsDfuIz94DbCf5CYsIC7WpU; __utmz=36595059.1583064856.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); D_ZID=52A68C14-B4B6-3844-8896-9B0E426FEABA; D_ZUID=2E7A90D0-30B7-31B4-BB43-CB2B0DACBDF8; D_HID=0316E576-4AF0-35A5-BEB9-CECB592B4EC2; bha-ie-test=true; __utmc=36595059; __utma=36595059.34208775.1583064856.1583966446.1584046318.17; bha_token=%7B%22token%22%3A%22MjE3Y2I1NDBhYWViZWQ0YmM4YjZmYjg2NDRlOTA2NzU%3D%22%2C%22timestamp%22%3A1584046320723%7D; D_IID=A18DB74E-9ABD-33E1-BF94-96209AF6178E; D_UID=9CDC96FD-4EFE-308E-BC28-2F105AC0B01B; __utmt=1; __utmb=36595059.6.10.1584046318");
|
||||
foreach (var fixture in fixturesToProcces)
|
||||
{
|
||||
var races = await client.GetRaces(fixture.FixtureYear, fixture.FixtureId);
|
||||
foreach (var race in races.Data)
|
||||
{
|
||||
var dbRace = db.Races.FirstOrDefault(e => e.RaceId == race.RaceId);
|
||||
if (dbRace == null)
|
||||
{
|
||||
AddRace(db, fixture.FixtureId, race);
|
||||
await LoadRunners(fixture.FixtureDate.Date, client, db, race);
|
||||
continue;
|
||||
}
|
||||
|
||||
dbRace.FixtureId = fixture.FixtureId;
|
||||
}
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task CollectPastResults()
|
||||
{
|
||||
var dayToCollectRunners = new DateTime(2019, 11, 23);// GetDayToCollect();
|
||||
|
||||
var client = new ApiClient(TimeSpan.FromSeconds(0), "D_SID=188.172.158.138:JT/OEx87nl5ScspTQk38UsDfuIz94DbCf5CYsIC7WpU; __utmz=36595059.1583064856.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); D_IID=A18DB74E-9ABD-33E1-BF94-96209AF6178E; D_UID=9CDC96FD-4EFE-308E-BC28-2F105AC0B01B; __utmc=36595059; bha-ie-test=true; D_ZID=3F37C446-48FB-3F85-B8D2-66FC90A17473; D_ZUID=27B27203-7708-3F5E-8C01-86A8BF3A21DD; D_HID=BC00CAA4-06EE-39E0-8579-A00DCFA20171; bha_token=%7B%22token%22%3A%22ZjYxM2UwMWEwZmZjNjdhYmM5NzRmMDhmMGVmOTYxNGY%3D%22%2C%22timestamp%22%3A1586699412252%7D; __utma=36595059.34208775.1583064856.1586685187.1586702516.21; __utmt=1; __utmb=36595059.2.10.1586702516");
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
var dayToCollectResults = dayToCollectRunners;
|
||||
await LoadPreRaceData(dayToCollectRunners, client);
|
||||
await LoadResults(dayToCollectResults, client);
|
||||
dayToCollectRunners = dayToCollectRunners.AddDays(-1);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
Console.WriteLine("Enter new cookie:");
|
||||
var cookie = Console.ReadLine();
|
||||
if (!String.IsNullOrWhiteSpace(cookie))
|
||||
client = new ApiClient(TimeSpan.FromSeconds(0), cookie);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task CollectCurrent()
|
||||
{
|
||||
var dayToCollectRunners = DateTime.Now.Date;
|
||||
var dayToCollectResults = dayToCollectRunners.AddDays(-1);
|
||||
var client = new ApiClient(TimeSpan.FromSeconds(0), "D_SID=188.172.158.138:JT/OEx87nl5ScspTQk38UsDfuIz94DbCf5CYsIC7WpU; __utmz=36595059.1583064856.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); D_ZID=52A68C14-B4B6-3844-8896-9B0E426FEABA; D_ZUID=2E7A90D0-30B7-31B4-BB43-CB2B0DACBDF8; D_HID=0316E576-4AF0-35A5-BEB9-CECB592B4EC2; bha-ie-test=true; __utmc=36595059; D_IID=A18DB74E-9ABD-33E1-BF94-96209AF6178E; D_UID=9CDC96FD-4EFE-308E-BC28-2F105AC0B01B; __utma=36595059.34208775.1583064856.1584046318.1584135333.18; __utmt=1; __utmb=36595059.1.10.1584135333; bha_token=%7B%22token%22%3A%22NTc0OTdjNTRiMjg2ZGYyYzEyYThmMjRlZDZmYmIyMzM%3D%22%2C%22timestamp%22%3A1584135334879%7D");
|
||||
await LoadPreRaceData(dayToCollectRunners, client);
|
||||
await LoadResults(dayToCollectResults, client);
|
||||
}
|
||||
|
||||
private static async Task LoadPreRaceData(DateTime date, ApiClient client)
|
||||
{
|
||||
Console.WriteLine($"Loading fixtures for {date}");
|
||||
var fixtures = await client.GetAllFixturesForDay(date.Year, date.Month, date.Day);
|
||||
using (var db = new Db.HorseRacingDataContext())
|
||||
{
|
||||
foreach (var fixture in fixtures)
|
||||
{
|
||||
Console.WriteLine($"Processing fixture {fixture.FixtureName}");
|
||||
var dbFixture = ApiFixtureToDbFixture(fixture);
|
||||
db.Fixtures.Add(dbFixture);
|
||||
await db.SaveChangesAsync();
|
||||
|
||||
await LoadRaces(date, client, db, fixture.FixtureYear, fixture.FixtureId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task LoadRaces(DateTime date, ApiClient client, HorseRacingDataContext db, int year, int fixtureId)
|
||||
{
|
||||
Console.WriteLine($"Loading races for {date}");
|
||||
var races = await client.GetRaces(year, fixtureId);
|
||||
|
||||
foreach (var race in races.Data)
|
||||
{
|
||||
AddRace(db, fixtureId, race);
|
||||
await db.SaveChangesAsync();
|
||||
await LoadRunners(date, client, db, race);
|
||||
await db.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task LoadRunners(DateTime date, ApiClient client, HorseRacingDataContext db, ApiModels.Race race)
|
||||
{
|
||||
Console.WriteLine($"Loading runners for race id {race.RaceId}");
|
||||
var runners = await client.GetRaceRunners(date.Year, race.RaceId, race.DivisionSequence);
|
||||
foreach (var runner in runners.Data)
|
||||
{
|
||||
Console.WriteLine($"Loaded runner {runner.RacehorseName} for race {race.RaceId})");
|
||||
db.Runners.Add(new Db.Runner()
|
||||
{
|
||||
HeadGearWearingCode = runner.HeadGearWearingCode,
|
||||
HeadGearWearingSheepSkin = runner.HeadGearWearingSheepSkin,
|
||||
HeadGearDescription = runner.HeadGearDescription,
|
||||
HeadGearAbbreviation = runner.HeadGearAbbreviation,
|
||||
JockeyProfile = runner.JockeyProfile,
|
||||
CourseWinner = runner.CourseWinner,
|
||||
DistanceWinner = runner.DistanceWinner,
|
||||
WindSurgeryFirstRun = runner.WindSurgeryFirstRun,
|
||||
TrainerId = runner.TrainerId,
|
||||
TrainerName = runner.TrainerName,
|
||||
OwnerId = runner.OwnerId,
|
||||
OwnerName = runner.OwnerName,
|
||||
WbSilkCode = runner.WbSilkCode,
|
||||
WbSilkDescription = runner.WbSilkDescription,
|
||||
SilkImage = runner.SilkImage,
|
||||
Plus10 = runner.Plus10,
|
||||
ForecastPriceNumerator = runner.ForecastPriceNumerator,
|
||||
ForecastPriceDenominator = runner.ForecastPriceDenominator,
|
||||
WeightText = runner.WeightText,
|
||||
WeightsJockeyClaiming = runner.WeightsJockeyClaiming,
|
||||
Odds = runner.Odds,
|
||||
DecimalOdds = runner.DecimalOdds(),
|
||||
JockeyName = runner.JockeyName,
|
||||
Status = (Db.Status)runner.Status,
|
||||
RaceId = runner.RaceId,
|
||||
YearOfRace = runner.YearOfRace,
|
||||
DivisionSequence = runner.DivisionSequence,
|
||||
AnimalId = runner.AnimalId,
|
||||
RacehorseName = runner.RacehorseName,
|
||||
AgeYears = runner.AgeYears,
|
||||
Bred = runner.Bred,
|
||||
ClothNumber = runner.ClothNumber,
|
||||
DrawnStall = runner.DrawnStall,
|
||||
ReserveNumber = runner.ReserveNumber,
|
||||
BhaRating = runner.BhaRating,
|
||||
FormFigures = runner.FormFigures,
|
||||
WeightValue = runner.WeightValue,
|
||||
PenaltyValue = runner.PenaltyValue,
|
||||
SexType = (Db.SexType)runner.SexType,
|
||||
NonRunnerDeclaredReason = runner.NonRunnerDeclaredReason,
|
||||
NonRunnerDeclaredDate = runner.NonRunnerDeclaredDate,
|
||||
NonRunnerDeclaredTime = runner.NonRunnerDeclaredTime,
|
||||
RunnerNumber = runner.RunnerNumber,
|
||||
JockeyId = runner.JockeyId,
|
||||
RaceHorseNameWithoutCountry = runner.RacehorseNameWithoutCountry,
|
||||
WeightInGrams = runner.WeightInGrams,
|
||||
LastRuns = runner.LastRuns?.Select(e => new Db.LastRun()
|
||||
{
|
||||
Days = e.Days,
|
||||
RaceType = e.RaceType
|
||||
}).ToList()
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private static void AddRace(HorseRacingDataContext db, int fixtureId, ApiModels.Race race)
|
||||
{
|
||||
Console.WriteLine($"Saving {race.RaceName}");
|
||||
var dbRace = ApiRaceToDbRace(race, fixtureId);
|
||||
db.Races.Add(dbRace);
|
||||
|
||||
}
|
||||
|
||||
private static Db.Fixture ApiFixtureToDbFixture(ApiModels.Fixture fixture)
|
||||
{
|
||||
return new Db.Fixture()
|
||||
{
|
||||
GoingUpdatedTime = fixture.GoingUpdatedTime,
|
||||
GoingUpdatedDate = fixture.GoingUpdatedDate,
|
||||
FixtureSession = (Db.FixtureSession)fixture.FixtureSession,
|
||||
AbandonedReasonCode = fixture.AbandonedReasonCode,
|
||||
Rail = fixture.Rail,
|
||||
Stalls = fixture.Stalls,
|
||||
Other = fixture.Other,
|
||||
Weather = fixture.Weather,
|
||||
Going = fixture.Going,
|
||||
MajorEvent = fixture.MajorEvent,
|
||||
TicketsLink = fixture.TicketsLink,
|
||||
CourseId = fixture.CourseId,
|
||||
RacePlanningCode = (Db.RacePlanningCode)fixture.RacePlanningCode,
|
||||
RacingTrackType = (Db.RacingTrackType)fixture.RacingTrackType,
|
||||
MeetingId = fixture.MeetingId,
|
||||
FixtureType = (Db.FixtureType)fixture.FixtureType,
|
||||
FixtureName = fixture.FixtureName,
|
||||
NumberOfRaces = fixture.NumberOfRaces,
|
||||
BcsEvent = fixture.BcsEvent,
|
||||
BlackTypeRaces = fixture.BlackTypeRaces,
|
||||
EntriesAvailable = fixture.EntriesAvailable,
|
||||
RacecardAvailable = fixture.RacecardAvailable,
|
||||
ResultsAvailable = fixture.ResultsAvailable,
|
||||
FirstRace = fixture.FirstRace,
|
||||
CourseName = fixture.CourseName,
|
||||
Distance = fixture.Distance,
|
||||
FixtureDate = fixture.FixtureDate,
|
||||
FixtureYear = fixture.FixtureYear,
|
||||
FixtureId = fixture.FixtureId
|
||||
};
|
||||
}
|
||||
|
||||
private static Db.Race ApiRaceToDbRace(ApiModels.Race race, int fixtureId)
|
||||
{
|
||||
return new Db.Race()
|
||||
{
|
||||
DistanceChangeText = race.DistanceChangeText,
|
||||
BlackTypeRace = race.BlackTypeRace,
|
||||
AbandonedReasonCode = race.AbandonedReasonCode,
|
||||
RaceCriteriaRaceType = race.RaceCriteriaRaceType,
|
||||
DistanceChange = race.DistanceChange,
|
||||
DistanceText = race.DistanceText,
|
||||
DistanceValue = race.DistanceValue,
|
||||
DistanceUnits = race.DistanceUnits,
|
||||
RawDistanceText = race.RawDistanceText,
|
||||
RatingBand = race.RatingBand,
|
||||
RaceClass = race.RaceClass,
|
||||
PrizeCurrency = race.PrizeCurrency,
|
||||
PrizeAmount = race.PrizeAmount,
|
||||
AgeLimit = race.AgeLimit,
|
||||
RaceName = race.RaceName,
|
||||
RaceTime = race.RaceTime,
|
||||
RaceDate = race.RaceDate,
|
||||
DivisionSequence = race.DivisionSequence,
|
||||
YearOfRace = race.YearOfRace,
|
||||
RaceId = race.RaceId,
|
||||
Plus10 = race.Plus10,
|
||||
FixtureId = fixtureId
|
||||
};
|
||||
}
|
||||
|
||||
private static async Task LoadResults(DateTime date, ApiClient client)
|
||||
{
|
||||
using (var db = new Db.HorseRacingDataContext())
|
||||
{
|
||||
var races = await db.Races.Where(e => e.RaceDate == date.Date).ToListAsync();
|
||||
foreach(var race in races)
|
||||
{
|
||||
if (race.RaceId != 1684)
|
||||
continue;
|
||||
var results = await client.GetRaceResults(race.YearOfRace, race.RaceId, race.DivisionSequence);
|
||||
foreach (var runnerResult in results.Data)
|
||||
{
|
||||
var dbRunnerResult = new Db.RunnerResult()
|
||||
{
|
||||
RaceId = runnerResult.RaceId,
|
||||
YearOfRace = runnerResult.YearOfRace,
|
||||
DivisionSequence = runnerResult.DivisionSequence,
|
||||
HorseId = runnerResult.HorseId,
|
||||
AnimalId = runnerResult.AnimalId,
|
||||
ResultFinishPos = runnerResult.ResultFinishPos,
|
||||
Status = runnerResult.Status,
|
||||
Ran = runnerResult.Ran,
|
||||
NonRunnerDeclaredReason = runnerResult.NonRunnerDeclaredReason,
|
||||
NonRunnerDeclaredDate = runnerResult.NonRunnerDeclaredDate,
|
||||
NonRunnerDeclaredTime = runnerResult.NonRunnerDeclaredTime,
|
||||
RacehorseName = runnerResult.RacehorseName,
|
||||
RacehorseNameWithoutConuntry = runnerResult.RacehorseNameWithoutCountry,
|
||||
AgeYear = runnerResult.AgeYear,
|
||||
Bred = runnerResult.Bred,
|
||||
ClothNumber = runnerResult.ClothNumber,
|
||||
DrawnStall = runnerResult.DrawnStall,
|
||||
WeightValue = runnerResult.WeightValue,
|
||||
SexType = runnerResult.SexType,
|
||||
JockeyId = runnerResult.JockeyId,
|
||||
JockeyName = runnerResult.JockeyName,
|
||||
JockeyProfile = runnerResult.JockeyProfile,
|
||||
TrainerId = runnerResult.TrainerId,
|
||||
TrainerName = runnerResult.TrainerName,
|
||||
OwnerId = runnerResult.OwnerId,
|
||||
OwnerName = runnerResult.OwnerName,
|
||||
WbSilkCode = runnerResult.WbSilkCode,
|
||||
WbSilkDescription = runnerResult.WbSilkDescription,
|
||||
SilkImage = runnerResult.SilkImage,
|
||||
Plus10 = runnerResult.Plus10,
|
||||
ResultBtnDistance = runnerResult.ResultBtnDistance,
|
||||
PositionFinishTime = runnerResult.PositionFinishTime,
|
||||
BettingRatio = runnerResult.BettingRatio,
|
||||
PerformanceFigure = runnerResult.PerformanceFigure,
|
||||
RatingFlat = runnerResult.RatingFlat,
|
||||
RatingAwt = runnerResult.RatingAwt,
|
||||
RatingChase = runnerResult.RatingChase,
|
||||
RatingHurdle = runnerResult.RatingHurdle,
|
||||
RaceCriteriaRaceType = runnerResult.RaceCriteriaRaceType,
|
||||
Hro = runnerResult.Hro,
|
||||
FinishTime = runnerResult.FinishTime,
|
||||
ResultFinishDNF = runnerResult.ResultFinishDNF,
|
||||
FinishTimeInMilliseconds = String.IsNullOrWhiteSpace(runnerResult.ResultFinishDNF) ? runnerResult.FinishTimeInMilliseconds() : null,
|
||||
LossMilliseconds = runnerResult.LossMilliseconds(),
|
||||
};
|
||||
db.RunnerResults.Add(dbRunnerResult);
|
||||
await db.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static DateTime _dateToCollectRunners = GetDayToCollect();
|
||||
public static DateTime GetDayToCollect()
|
||||
{
|
||||
using(var db = new Db.HorseRacingDataContext())
|
||||
{
|
||||
var date = db.Races.OrderBy(e => e.RaceDate)
|
||||
.Select(e => e.RaceDate)
|
||||
.First()
|
||||
.Date;
|
||||
|
||||
return date.AddDays(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user