コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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);
        }