/// <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 RaceInfo AddRaceInfo(string html, List <HorseInfo> horses) { DbContext(); try { var regex = new RaceInfoCname(); var matchHolding = regex.holding.Match(html); var matchRaceName = regex.raceName.Match(html); var matchShippingTime = regex.shippingTime.Match(html); // Dateに時刻を加え、PKが重複しないようにする var shippingTime = DateTime.Parse(matchShippingTime.Value).TimeOfDay; var matchDate = regex.date.Match(html); var date = DateTime.ParseExact(matchDate.Value, "yyyy年M月d日", CultureInfo.InvariantCulture) + shippingTime; var matchWeather = regex.weather.Match(html); var matchBaba = regex.baba.Match(html); var matchBabaState = regex.babaState.Match(html); var matchDistance = regex.distance.Match(html); var matchAround = regex.around.Match(html); // レースの出走条件 var matchOldClass = regex.oldClass.Matches(html); var oldClass = ""; foreach (Match match in matchOldClass) { var category = match.Groups["OldClass"].Value; oldClass = string.Join(" ", Regex.Matches(category, "cell (category|class|rule|weight)\\\">(?<name>.*?)\\</div\\>", RegexOptions.Singleline) .Cast <Match>() .Select(match => match.Groups["name"].Value)); } var raceDuplicateCheck = context.RaceInfo.SingleOrDefault(c => c.Date == date && c.ShippingTime == matchShippingTime.Value); if (raceDuplicateCheck != null) { return(null); } { var raceInfo = new RaceInfo() { Holding = matchHolding.Value, RaceName = matchRaceName.Value, Date = date, ShippingTime = matchShippingTime.Value, Weather = matchWeather.Value, Baba = matchBaba.Value, BabaState = matchBabaState.Value, OldClass = oldClass, Distance = matchDistance.Value, Around = matchAround.Value, }; Debug.WriteLine($"Insert実行:{raceInfo.RaceName}"); context.Add(raceInfo); context.SaveChanges(); // raceInfoが無ければ、PayBackはaddしない var payBacks = new PayBackQuery().AddPayBack(html); return(raceInfo); } } catch (Exception ex) { Debug.WriteLine(ex); throw; } }
public PayBack AddPayBack(string html) { DbContext(); var regex = new PayBackCname(); var win = regex.win.Matches(html); var wideBefore = regex.wideBefore.Matches(html); var wideAfter = regex.wideAfter.Matches(html); var tripleBefor = regex.tripleBefor.Matches(html); var tripleCenter = regex.tripleCenter.Matches(html); var tripleAfter = regex.tripleAfter.Matches(html); var refund = regex.refund.Matches(html); var payback = new PayBack(); var headCount = win.Count + wideBefore.Count + wideAfter.Count + tripleBefor.Count + tripleCenter.Count + tripleAfter.Count; // 馬番 switch (headCount) { case 22: payback.TanshoNum = int.Parse(win[0].Value); payback.Fuku1Num = int.Parse(win[1].Value); payback.Fuku2Num = int.Parse(win[2].Value); payback.Fuku3Num = int.Parse(win[3].Value); payback.Wakuren1Waku = int.Parse(wideBefore[0].Value); payback.Wakuren2Waku = int.Parse(wideAfter[0].Value); payback.Wide1_1Num = int.Parse(wideBefore[1].Value); payback.Wide1_2Num = int.Parse(wideAfter[1].Value); payback.Wide2_1Num = int.Parse(wideBefore[2].Value); payback.Wide2_2Num = int.Parse(wideAfter[2].Value); payback.Wide3_1Num = int.Parse(wideBefore[3].Value); payback.Wide3_2Num = int.Parse(wideAfter[3].Value); payback.Umaren1Num = int.Parse(wideBefore[4].Value); payback.Umaren2Num = int.Parse(wideAfter[4].Value); payback.Umatan1Num = int.Parse(wideBefore[5].Value); payback.Umatan2Num = int.Parse(wideAfter[5].Value); payback.Sanfuku1Num = int.Parse(tripleBefor[0].Value); payback.Sanfuku2Num = int.Parse(tripleCenter[0].Value); payback.Sanfuku3Num = int.Parse(tripleAfter[0].Value); payback.Santan1Num = int.Parse(tripleBefor[1].Value); payback.Santan2Num = int.Parse(tripleCenter[1].Value); payback.Santan3Num = int.Parse(tripleAfter[1].Value); break; case 20: payback.TanshoNum = int.Parse(win[0].Value); payback.Fuku1Num = int.Parse(win[1].Value); payback.Fuku2Num = int.Parse(win[2].Value); payback.Fuku3Num = int.Parse(win[3].Value); payback.Wide1_1Num = int.Parse(wideBefore[0].Value); payback.Wide1_2Num = int.Parse(wideAfter[0].Value); payback.Wide2_1Num = int.Parse(wideBefore[1].Value); payback.Wide2_2Num = int.Parse(wideAfter[1].Value); payback.Wide3_1Num = int.Parse(wideBefore[2].Value); payback.Wide3_2Num = int.Parse(wideAfter[2].Value); payback.Umaren1Num = int.Parse(wideBefore[3].Value); payback.Umaren2Num = int.Parse(wideAfter[3].Value); payback.Umatan1Num = int.Parse(wideBefore[4].Value); payback.Umatan2Num = int.Parse(wideAfter[4].Value); payback.Sanfuku1Num = int.Parse(tripleBefor[0].Value); payback.Sanfuku2Num = int.Parse(tripleCenter[0].Value); payback.Sanfuku3Num = int.Parse(tripleAfter[0].Value); payback.Santan1Num = int.Parse(tripleBefor[1].Value); payback.Santan2Num = int.Parse(tripleCenter[1].Value); payback.Santan3Num = int.Parse(tripleAfter[1].Value); break; case 19: payback.TanshoNum = int.Parse(win[0].Value); payback.Fuku1Num = int.Parse(win[1].Value); payback.Fuku2Num = int.Parse(win[2].Value); payback.Wide1_1Num = int.Parse(wideBefore[0].Value); payback.Wide1_2Num = int.Parse(wideAfter[0].Value); payback.Wide2_1Num = int.Parse(wideBefore[1].Value); payback.Wide2_2Num = int.Parse(wideAfter[1].Value); payback.Wide3_1Num = int.Parse(wideBefore[2].Value); payback.Wide3_2Num = int.Parse(wideAfter[2].Value); payback.Umaren1Num = int.Parse(wideBefore[3].Value); payback.Umaren2Num = int.Parse(wideAfter[3].Value); payback.Umatan1Num = int.Parse(wideBefore[4].Value); payback.Umatan2Num = int.Parse(wideAfter[4].Value); payback.Sanfuku1Num = int.Parse(tripleBefor[0].Value); payback.Sanfuku2Num = int.Parse(tripleCenter[0].Value); payback.Sanfuku3Num = int.Parse(tripleAfter[0].Value); payback.Santan1Num = int.Parse(tripleBefor[1].Value); payback.Santan2Num = int.Parse(tripleCenter[1].Value); payback.Santan3Num = int.Parse(tripleAfter[1].Value); break; } var refundCount = refund.Count; // 払戻金 switch (refundCount) { case 12: payback.TanshoRe = int.Parse(refund[0].Value, System.Globalization.NumberStyles.AllowThousands); payback.Fuku1Re = int.Parse(refund[1].Value, System.Globalization.NumberStyles.AllowThousands); payback.Fuku2Re = int.Parse(refund[2].Value, System.Globalization.NumberStyles.AllowThousands); payback.Fuku3Re = int.Parse(refund[3].Value, System.Globalization.NumberStyles.AllowThousands); payback.WakurenRe = int.Parse(refund[4].Value, System.Globalization.NumberStyles.AllowThousands); payback.Wide1Re = int.Parse(refund[5].Value, System.Globalization.NumberStyles.AllowThousands); payback.Wide2Re = int.Parse(refund[6].Value, System.Globalization.NumberStyles.AllowThousands); payback.Wide3Re = int.Parse(refund[7].Value, System.Globalization.NumberStyles.AllowThousands); payback.UmarenRe = int.Parse(refund[8].Value, System.Globalization.NumberStyles.AllowThousands); payback.UmatanRe = int.Parse(refund[9].Value, System.Globalization.NumberStyles.AllowThousands); payback.SanfukuRe = int.Parse(refund[10].Value, System.Globalization.NumberStyles.AllowThousands); payback.SantanRe = int.Parse(refund[11].Value, System.Globalization.NumberStyles.AllowThousands); break; case 11: payback.TanshoRe = int.Parse(refund[0].Value, System.Globalization.NumberStyles.AllowThousands); payback.Fuku1Re = int.Parse(refund[1].Value, System.Globalization.NumberStyles.AllowThousands); payback.Fuku2Re = int.Parse(refund[2].Value, System.Globalization.NumberStyles.AllowThousands); payback.Fuku3Re = int.Parse(refund[3].Value, System.Globalization.NumberStyles.AllowThousands); payback.Wide1Re = int.Parse(refund[4].Value, System.Globalization.NumberStyles.AllowThousands); payback.Wide2Re = int.Parse(refund[5].Value, System.Globalization.NumberStyles.AllowThousands); payback.Wide3Re = int.Parse(refund[6].Value, System.Globalization.NumberStyles.AllowThousands); payback.UmarenRe = int.Parse(refund[7].Value, System.Globalization.NumberStyles.AllowThousands); payback.UmatanRe = int.Parse(refund[8].Value, System.Globalization.NumberStyles.AllowThousands); payback.SanfukuRe = int.Parse(refund[9].Value, System.Globalization.NumberStyles.AllowThousands); payback.SantanRe = int.Parse(refund[10].Value, System.Globalization.NumberStyles.AllowThousands); break; case 10: payback.TanshoRe = int.Parse(refund[0].Value, System.Globalization.NumberStyles.AllowThousands); payback.Fuku1Re = int.Parse(refund[1].Value, System.Globalization.NumberStyles.AllowThousands); payback.Fuku2Re = int.Parse(refund[2].Value, System.Globalization.NumberStyles.AllowThousands); payback.Wide1Re = int.Parse(refund[3].Value, System.Globalization.NumberStyles.AllowThousands); payback.Wide2Re = int.Parse(refund[4].Value, System.Globalization.NumberStyles.AllowThousands); payback.Wide3Re = int.Parse(refund[5].Value, System.Globalization.NumberStyles.AllowThousands); payback.UmarenRe = int.Parse(refund[6].Value, System.Globalization.NumberStyles.AllowThousands); payback.UmatanRe = int.Parse(refund[7].Value, System.Globalization.NumberStyles.AllowThousands); payback.SanfukuRe = int.Parse(refund[8].Value, System.Globalization.NumberStyles.AllowThousands); payback.SantanRe = int.Parse(refund[9].Value, System.Globalization.NumberStyles.AllowThousands); break; } context.PayBack.Add(payback); context.SaveChanges(); return(payback); }