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); }
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); }
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); }