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 void SaveOddsToRedis(Match match, string contents) { var rawFullTimeResult = HtmlHandler.GetImplement("Date", contents).Gets(_fullTimeResultFilter); var date = DateTimeOffset.Now.ToString("yyyyMMdd"); var timeStamp = DateTimeOffset.Now; var key = $"{date}:{match.MatchId}:odds:1101"; var db = _fact.Connection().GetDatabase(); var redis = new RedisVoteService <BetFieldType>(this._fact); if (rawFullTimeResult != null) { redis.Delete(key); } var selection = new Selection(); selection.BetTypeSN = "1101"; selection.BetTypeNM = "Match Result"; var betFields = new List <BetFieldType>(); betFields.Add(new BetFieldType { BetFieldTypeSN = "1", BetFieldTypeNM = "1", Odds = rawFullTimeResult[0], TimeStamp = timeStamp }); betFields.Add(new BetFieldType { BetFieldTypeSN = "3", BetFieldTypeNM = "Draw", Odds = rawFullTimeResult[1], TimeStamp = timeStamp }); betFields.Add(new BetFieldType { BetFieldTypeSN = "2", BetFieldTypeNM = "2", Odds = rawFullTimeResult[2], TimeStamp = timeStamp }); selection.BetFieldList = betFields; redis.SaveList(key, betFields); }
public override async Task <object> ParseAsync(CancellationToken cancellationToken) { using (var scope = serviceScopeFactory.CreateScope()) { var raceDB = scope.ServiceProvider.GetService <RaceDB.Models.RaceDBContext>(); var leagues = raceDB.League.Where(x => x.Status == 1).ToList(); foreach (var league in leagues) { var totalMatchHtml = await GetMatchListAsync(league.LeagueKey);//await _engine.LoadHtml(string.Format(totalMatchUrl, league.LeagueKey.Trim()), JobTimeout); var rawDate = HtmlHandler.GetImplement("Date", totalMatchHtml).Get(_DateFilter) + " 2018"; var attrs = HtmlHandler.GetImplement("TotalMatchAttrs", totalMatchHtml).GetsAttributes(_totalMatchValueFilter); var values = HtmlHandler.GetImplement("TotalLeagueValues", totalMatchHtml).Gets(_totalMatchValueFilter); if (values == null) { continue; } var matchDataList = (from a in attrs from b in values where a.Key == b.Key where a.Value.Any(x => x.Key == "data-fixtureid") select new { MatchKey = a.Value.Where(x => x.Key == "data-fixtureid").FirstOrDefault().Value, MatchValue = b.Value }); var redis = new RedisVoteService <int>(this._fact); var date = Convert.ToDateTime(rawDate).ToString("yyyyMMdd"); foreach (var match in matchDataList) { var matchData = HtmlHandler.GetImplement("matchData", match.MatchValue).Gets(_matchCompetitor); var matchDate = HtmlHandler.GetImplement("matchDate", match.MatchValue).Get(_matchDate); var gameStartDate = new DateTimeOffset(Convert.ToDateTime(matchDate + " " + rawDate), new TimeSpan(1, 0, 0)); RaceDB.Models.Match matchModel = new RaceDB.Models.Match(); var existMatch = raceDB.Match.Where(x => x.MatchKey == match.MatchKey && x.StartDateTime == gameStartDate).FirstOrDefault(); if (existMatch != null) { matchModel = existMatch; } var homeCompetitor = matchData[0]; var awayCompetitor = matchData[1]; matchModel.MatchKey = match.MatchKey; matchModel.LeagueId = league.LeagueId; matchModel.CategoryId = league.CategoryId; matchModel.HomeCompetitorName = homeCompetitor; matchModel.AwayCompetitorName = awayCompetitor; matchModel.Status = 2; matchModel.InPlay = false; matchModel.SportId = 0; matchModel.StartDateTime = gameStartDate; matchModel.CreateDate = DateTimeOffset.Now.ToOffset(new TimeSpan(-4, 0, 0)); matchModel.UpdateDate = DateTimeOffset.Now.ToOffset(new TimeSpan(-4, 0, 0)); matchModel.ResultStatus = 0; if (existMatch == null) { raceDB.Add(matchModel); } raceDB.SaveChanges(); } if (redis.GetList($"{date}:matches") == null) { var matchList = raceDB.Match.Where(x => x.StartDateTime.ToString("yyyyMMdd") == date).Select(x => x.MatchId).ToList(); redis.SaveList($"{date}:matches", matchList); } } } 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); }