public async Task <Dictionary <int, string> > GetNationalCountries() { var fetchResult = await _dataFetcher.FetchDom(URL_NATIONAL); var allCountries = new Dictionary <int, string>(); var countryList = fetchResult.HtmlDocument.DocumentNode.SelectNodes("//li[contains(@class,'expandable')]/."); foreach (var country in countryList) { try { var areaId = country.GetAttributeValue("data-area_id", ""); if (!string.IsNullOrWhiteSpace(areaId)) { var countryId = ParseFunctions.ParsePositiveNumber(areaId); var countryName = HttpUtility.HtmlDecode(country.InnerText).Trim(); if (!allCountries.ContainsKey(countryId)) { allCountries.Add(countryId, countryName); } } } catch (Exception exception) { } } return(allCountries); }
public CSoccerGameUpdate ParseBasicGameDetails(HtmlNode node, DateTime date) { var game = new CSoccerGameUpdate(); game.HomeTeam.Name = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-a ']/a/.", "title"); game.AwayTeam.Name = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-b ']/a/.", "title"); var rawGameStartTime = ParseFunctions.ExtractValueFromNode(node, "//td[@class='score-time status']"); var rawScore = ParseFunctions.ExtractValueFromNode(node, "//td[@class='score-time score']"); var rawStatusMinute = ParseFunctions.ExtractValueFromNode(node, "//td[@class='minute visible']"); if (!string.IsNullOrEmpty(rawScore)) { var scores = ParseScore(rawScore); game.HomeTeam.Competitor.Scores[(int)ESoccerStages.CurrResult] = scores[0]; game.AwayTeam.Competitor.Scores[(int)ESoccerStages.CurrResult] = scores[1]; } if (!string.IsNullOrEmpty(rawGameStartTime)) { var time = ParseFunctions.ParseTime(rawGameStartTime); game.StartTime = date.Date.Add(time).Subtract(DataFetcher.TimeOffset); } else { game.StartTime = date.Date.AddHours(16); } return(game); }
public async Task <List <CompetitorData> > BuildCompetitorsListByCompetition(CompetitionData comptition) { var competitorList = new List <CompetitorData>(); try { var param = string.Format(API_ExtraParam, HttpUtility.UrlEncode(string.Format(Competitions_CallbackParam, 2)), Competitions_Action, HttpUtility.UrlEncode(string.Format(Competitors_Param, comptition.ID))); var url = string.Format(ApiFormat, BASE_API_URL, Competitions_Block, param); var fetchResult = await _dataFetcher.FetchDom(url, true); var rawComptitor = fetchResult.HtmlDocument.DocumentNode.SelectNodes("//ul/li/."); if (rawComptitor != null) { foreach (var rawComp in rawComptitor) { try { var rawLink = rawComp.SelectSingleNode(rawComp.XPath + "//a/."); var link = rawLink.GetAttributeValue("href", ""); if (string.IsNullOrEmpty(link)) { } else { var comp = new CompetitorData { Link = link, Id = ParseFunctions.ParsePositiveNumber(link, "/(?<num>\\d{2,})"), Name = HttpUtility.HtmlDecode(rawLink.InnerText), CompetitionData = comptition }; competitorList.Add(comp); } } catch (Exception ex) { } } } } catch (Exception exception) { } return(competitorList); }
private List <CompetitorData> ParseBasicGameDetails(HtmlNode node, DateTime date) { List <CompetitorData> game = null; try { var home = new CompetitorData(); var away = new CompetitorData(); home.Name = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-a ']/a/.", "title"); away.Name = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-b ']/a/.", "title"); home.Link = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-a ']/a/.", "href"); away.Link = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-b ']/a/.", "href"); home.Id = ParseFunctions.ParsePositiveNumber(home.Link, "/(?<num>\\d{2,})"); away.Id = ParseFunctions.ParsePositiveNumber(away.Link, "/(?<num>\\d{2,})"); var rawGameStartTime = ParseFunctions.ExtractValueFromNode(node, "//td[@class='score-time status']"); var rawScore = ParseFunctions.ExtractValueFromNode(node, "//td[@class='score-time score']"); if (!string.IsNullOrEmpty(rawGameStartTime)) { var time = ParseFunctions.ParseTime(rawGameStartTime); var gameTime = date.Date.Add(time).Subtract(DataFetcher.TimeOffset); var scanContext = new ScanContext(gameTime); home.NextScan = scanContext; away.NextScan = scanContext; } else { var gameTime = date.Date.AddHours(16); var scanContext = new ScanContext(gameTime); home.NextScan = scanContext; away.NextScan = scanContext; } game = new List <CompetitorData>() { home, away }; } catch (Exception exception) { } return(game); }
public async Task <List <CompetitionData> > BuildCompetionListByCountry(int areaId, string countryName) { var competitionList = new List <CompetitionData>(); try { var param = string.Format(API_ExtraParam, HttpUtility.UrlEncode(string.Format(Competitions_CallbackParam, 1)), Competitions_Action, HttpUtility.UrlEncode(string.Format(Competitions_Param, areaId))); var url = string.Format(ApiFormat, BASE_API_URL, Competitions_Block, param); var fetchResult = await _dataFetcher.FetchDom(url, true); var rawComptitions = fetchResult.HtmlDocument.DocumentNode.SelectNodes("//ul/li/."); if (rawComptitions != null) { foreach (var rawComp in rawComptitions) { try { var comp = ParseFunctions.ParseCompetition(rawComp, countryName); if (comp == null || comp.Name.ToLowerInvariant() == "other") { Console.WriteLine("Skipped competition of country {0}", countryName); continue; } competitionList.Add(comp); } catch (Exception ex) { } } } } catch (Exception exception) { } return(competitionList); }
public async Task <List <CPlayerIndividualStat> > BuildPlayerCareerByCompetition(string playerId, string competitionParams) { var param = string.Format(API_ExtraParam, HttpUtility.UrlEncode(string.Format(PlayerCareerStats_CallbackParam, playerId)), PlayerCareerStats_Action, HttpUtility.UrlEncode(competitionParams)); var url = string.Format(ApiFormat, BASE_API_URL, PlayerCareerStats_Block, param); var fetchResult = await _dataFetcher.FetchDom(url, true); var rawTotalRow = fetchResult.HtmlDocument.DocumentNode.SelectSingleNode("//tfoot/tr/."); if (rawTotalRow == null) { return(null); } var totalRow = rawTotalRow.ChildNodes.Where(rp => rp.Name == "td").ToArray(); var careerRecord = ParseFunctions.ParseCareerRecord(totalRow); return(careerRecord); }