Exemplo n.º 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);
        }
Exemplo n.º 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);
        }
Exemplo n.º 3
0
        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);
            }
        }