/// <summary> /// HorseInfoへInsert /// </summary> public List <HorseInfo> AddHorseInfo(string otherRace) { var horseCNames = ParseHorseCNames(otherRace); var horses = new List <HorseInfo>(); // HorseInfoのInsert foreach (var horseInfo in horseCNames) { var horseHtml = new Downloder().GetHorseHtml(horseInfo); var horse = CreateHorseInfo(horseHtml); horses.Add(horse); } context.SaveChanges(); return(horses); }
/// <summary> /// レース結果のInsert /// </summary> public List <RaceResult> AddRaceResults(string otherRace) { DbContext(); var raceCName = ParseRaceResultCNames(otherRace).Distinct(); var raceResult = new List <RaceResult>(); foreach (var raceResults in raceCName) { var getResultsHtml = new Downloder().GetRaceResultsHtml(raceResults); // 1着~最下位のHTMLを取得 var raceResultsHtml = Regex.Match(getResultsHtml, @"<tbody>.*?</tbody>", RegexOptions.Singleline); MatchCollection raceResultHtml = Regex.Matches(raceResultsHtml.Value, @"<tr>.*?</tr>", RegexOptions.Singleline); var result = Regex.Matches(raceResultsHtml.Value, @"<tr>.*?</tr>", RegexOptions.Singleline) .Cast <Match>() .Select(result => CreateRaceResults(result.Value, getResultsHtml)) .ToList(); // すでにレース結果が存在しているかチェック for (var i = 0; i < result.Count; i++) { var raceCheck = context.RaceResults.SingleOrDefault(c => c.Date == result[i].Date && c.Num == result[i].Num && c.RaceName == result[i].RaceName && c.Place == result[i].Place ); if (raceCheck == null) { Debug.WriteLine($"Insert実行{result[i].RaceName}:{result[i].Date}"); context.RaceResults.Add(result[i]); } else { Debug.WriteLine($"既に存在:{result[i].RaceName}:{result[i].Horse}"); } raceResult.Add(result[i]); } } context.SaveChanges(); return(raceResult); }
public static void Main(string[] args) { DbContext(); // 1カ月単位で取得可能 DateTime inputFrom = new DateTime(2021, 10, 9); DateTime inputTo = new DateTime(2021, 10, 9); while (inputFrom <= inputTo) { var html = new AccessSCodeMonthlyConvertor().FetchRaceResultPage(inputFrom); List <string> venusCnames = new RaceInfoQuery().RaceDaysCNames(html, inputFrom, inputTo); //Cname:開催情報(1回東京1日目など)を取得 foreach (var venusCname in venusCnames) { //TODO: fromToの期間を設定。while内で日付を決める。 string sarchRaceResultHtml = new Downloder().GetRaceResultsHtml(venusCname); var raceResultCNames = new RaceResultQuery().ParseRaceResultCNames(sarchRaceResultHtml); //Cname:1R~12Rまで取得 foreach (var raceResultCName in raceResultCNames) { //if() //raceInfoがすでにあれば、PAYBACKは不要の条件を入れる。 //{ // cotinue; //} string raceResultHtml = new Downloder().GetRaceResultsHtml(raceResultCName); var horseInfo = new HorseQuery().AddHorseInfo(raceResultHtml); var raceResults = new RaceResultQuery().AddRaceResults(raceResultHtml); var raceInfo = new RaceInfoQuery().AddRaceInfo(raceResultHtml, horseInfo); // 2020/03/21 レース結果を完成させてからコメントアウトを外す // otherRaceからRaceInfoを作る // otherRaceからRaceResultを作る(複数) } } inputFrom = inputFrom.AddDays(1); } }