예제 #1
0
        /// <summary>
        /// HorseInfoへInsertするデータの準備
        /// </summary>
        public static HorseInfo CreateHorseInfo(string html)
        {
            DbContext();
            try
            {
                var regex                 = new HorseInfoCname();
                var matchHorseName        = Regex.Replace(regex.horseNames.Match(html).Value, @"<.*?>", "");
                var matchFather           = regex.father.Match(html);
                var matchMother           = regex.mother.Match(html);
                var matchMotherFather     = regex.motherFather.Match(html);
                var matchMotherMother     = regex.motherMother.Match(html);
                var matchSex              = regex.sex.Match(html);
                var matchBirthday         = regex.birthday.Match(html);
                var birthday              = DateTime.ParseExact(matchBirthday.Value, "yyyy年M月d日", CultureInfo.InvariantCulture);
                var matchCoatColor        = regex.coatColor.Match(html);
                var matchHorseNameMeaning = regex.horseNameMeaning.Match(html);
                var matchHorseOwner       = regex.horseOwner.Match(html);
                var TrainerName           = regex.trainer.Match(html);
                var matchTrainer          = Regex.Replace(TrainerName.Value, "\\<.*?\\>", string.Empty);
                var matchProductionRanch  = regex.productionRanch.Match(html);
                var matchOrigin           = regex.origin.Match(html);

                var horseCheck = context.HorseInfo.SingleOrDefault(c => c.HorseName == matchHorseName && c.Birthday == birthday);

                if (horseCheck != null)
                {
                    return(null);
                }
                {
                    var horseInfo = new HorseInfo()
                    {
                        HorseName        = matchHorseName,
                        Father           = matchFather.Value,
                        Mother           = matchMother.Value,
                        MotherFather     = matchMotherFather.Value,
                        MotherMother     = matchMotherMother.Value,
                        Sex              = matchSex.Value,
                        Birthday         = birthday,
                        CoatColor        = matchCoatColor.Value,
                        HorseNameMeaning = matchHorseNameMeaning.Value,
                        HorseOwner       = matchHorseOwner.Value,
                        Trainer          = matchTrainer,
                        ProductionRanch  = matchProductionRanch.Value,
                        Origin           = matchOrigin.Value,
                    };
                    Debug.WriteLine($"Insert実行:{horseInfo.HorseName}");
                    context.Add(horseInfo);
                    context.SaveChanges();

                    return(horseInfo);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                throw;
            }
        }
예제 #2
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;
            }
        }