Пример #1
0
        public override async Task <object> ParseAsync(CancellationToken cancellationToken)
        {
            using (var scope = serviceScopeFactory.CreateScope())
            {
                var raceDB = scope.ServiceProvider.GetService <RaceDB.Models.RaceDBContext>();
                var page   = await _engine.newPage();

                await page.GoToAsync(_settings.Bet365.Url.MainPage.ToString());

                var waitOption = new WaitForSelectorOptions
                {
                    Timeout = 30000,
                    Hidden  = true
                };
                var preLoadOuter = await page.WaitForXPathAsync(_settings.Bet365.ElementXpath.PreLoader, waitOption);

                waitOption.Hidden = false;
                var selectSport = await page.WaitForXPathAsync(_settings.Bet365.ElementXpath.Soccer, waitOption);

                Thread.Sleep(3000);
                await selectSport.ClickAsync();

                Thread.Sleep(3000);

                var totalCatergoryHtml = await page.GetContentAsync();

                var attrs         = HtmlHandler.GetImplement("TotalCatergory", totalCatergoryHtml).GetsAttributes(_totalCounrtyFilter);
                var values        = HtmlHandler.GetImplement("TotalCatergory", totalCatergoryHtml).Gets(_totalCounrtyFilter);
                var catergoryData = (from a in attrs
                                     from b in values
                                     where a.Key == b.Key
                                     select new
                {
                    CatergoryKey = a.Value.Where(x => x.Key == "data-sportskey").FirstOrDefault().Value,
                    CatergoryValue = b.Value
                });

                var differentDatas = catergoryData.Where(x => raceDB.Category.Any(g => g.CategoryName == x.CatergoryValue && g.CategoryKey != x.CatergoryKey)).ToList();

                foreach (var data in differentDatas)
                {
                    var category = raceDB.Category.Where(x => x.CategoryName == data.CatergoryValue).FirstOrDefault();
                    category.CategoryKey = data.CatergoryKey;
                }
                await raceDB.SaveChangesAsync();
            }
            return(null);
        }
Пример #2
0
        public override async Task <object> ParseAsync(CancellationToken cancellationToken)
        {
            //string contents = File.ReadAllText(@"E:\365.txt");
            //SaveOddsToRedis(contents);
            using (var scope = serviceScopeFactory.CreateScope())
            {
                var raceDB         = scope.ServiceProvider.GetService <RaceDB.Models.RaceDBContext>();
                var dateTimeFilter = DateTimeOffset.Now.AddHours(-7);
                var matches        = raceDB.Match.AsQueryable().Include(x => x.League).Include(x => x.Category).Where(x => x.Status == 2).Take(3).ToList();
                var redis          = new RedisVoteService <MatchInfo>(this._fact);

                foreach (var match in matches)
                {
                    if (redis.Get($"{match.StartDateTime.ToString("yyyyMMdd")}:{match.MatchId}") == null)
                    {
                        var matchInfo = new MatchInfo
                        {
                            MatchId            = match.MatchId,
                            CategoryName       = match.Category.CategoryName,
                            LeagueName         = match.League.LeagueName,
                            SportName          = "Soccer",
                            StartDateTime      = match.StartDateTime,
                            Status             = match.Status,
                            HomeCompetitorName = match.HomeCompetitorName,
                            AwayCompetitorName = match.AwayCompetitorName
                        };
                        redis.Save($"{match.StartDateTime.ToString("yyyyMMdd")}:{match.MatchId}", matchInfo);
                    }

                    var page = await _engine.newPage();

                    var targetPage = await GetMatchOddsAsync(page, match);

                    Task.Run(async() => {
                        do
                        {
                            await Task.Delay(3000);
                            var qq = await targetPage.GetContentAsync();
                            SaveOddsToRedis(match, qq);
                            await Task.Delay(3000);
                        } while (true);
                    });
                }
            }
            return(null);
        }
Пример #3
0
        public override async Task <object> ParseAsync(CancellationToken cancellationToken)
        {
            using (var scope = serviceScopeFactory.CreateScope())
            {
                var raceDB       = scope.ServiceProvider.GetService <RaceDB.Models.RaceDBContext>();
                var categoryKeys = raceDB.Category.Where(x => x.Status == 1).ToList();


                foreach (var key in categoryKeys)
                {
                    Func <XPathHandler, XPathHandler> categoryFilter = element => element.Find(TagEnum.Div, "@class='eventWrapper cc_34_8'");
                    var page = await _engine.newPage();

                    await page.GoToAsync(_settings.Bet365.Url.MainPage.ToString());

                    var waitOption = new WaitForSelectorOptions
                    {
                        Timeout = 30000,
                        Hidden  = true
                    };
                    var preLoadOuter = await page.WaitForXPathAsync(_settings.Bet365.ElementXpath.PreLoader, waitOption);

                    waitOption.Hidden = false;
                    var selectSport = await page.WaitForXPathAsync(_settings.Bet365.ElementXpath.Soccer, waitOption);

                    Thread.Sleep(3000);
                    await selectSport.ClickAsync();

                    Thread.Sleep(3000);
                    var totalLeagueHtml = await page.GetContentAsync();

                    var html       = HtmlHandler.GetImplement("TotalLeague", totalLeagueHtml).Gets(categoryFilter)[0];
                    var attrs      = HtmlHandler.GetImplement("TotalLeague", html).GetsAttributes(_totalLeagueFilter);
                    var values     = HtmlHandler.GetImplement("TotalLeague", html).Gets(_totalLeagueValueFilter);
                    var leagueData = (from a in attrs
                                      from b in values
                                      where a.Key == b.Key
                                      select new
                    {
                        LeagueKey = a.Value.Where(x => x.Key == "data-sportskey").FirstOrDefault().Value,
                        LeagueValue = b.Value
                    });
                    var differentDatas = leagueData.Where(x => raceDB.League.Any(g => g.LeagueName != x.LeagueValue && g.LeagueKey != x.LeagueKey)).ToList();
                    foreach (var data in differentDatas)
                    {
                        var league = raceDB.League.Where(x => x.LeagueName == data.LeagueValue).FirstOrDefault();
                        if (league != null)
                        {
                            league.LeagueKey = data.LeagueKey;
                        }
                        else
                        {
                            RaceDB.Models.League leagueModel = new RaceDB.Models.League();
                            leagueModel.CategoryId = key.CategoryId;
                            leagueModel.LeagueKey  = data.LeagueKey;
                            leagueModel.LeagueName = data.LeagueValue;
                            raceDB.Add(leagueModel);
                        }
                        //.LeagueKey = data.LeagueKey;
                    }
                    await raceDB.SaveChangesAsync();
                }
            }
            return(null);
        }