public static DataObjects.MatchDetails GetMatchStatisticsFromLivescore(string url) { var awayDetails = new DataObjects.TeamDetails(); var homeDetails = new DataObjects.TeamDetails(); var matchDetails = new DataObjects.MatchDetails(); var dom = CQ.CreateFromUrl(url); string homeTeam = dom["[data-type=home-team]"].Text(); string awayTeam = dom["[data-type=away-team]"].Text(); int homeGoals = int.Parse(dom[".sco [data-type=home]"].Text()); int awayGoals = int.Parse(dom[".sco [data-type=away]"].Text()); return(matchDetails); }
public static DataObjects.TeamDetails FillTheRightField(string fieldName, int fieldValue, DataObjects.TeamDetails details) { switch (fieldName.ToUpper()) { case "ASSISTS": details.Assists = fieldValue; break; case "FREE KICKS": details.FreeKicks = fieldValue; break; case "PENALTIES": details.Penalties = fieldValue; break; case "TOTAL SHOTS": details.TotalShots = fieldValue; break; case "SHOTS ON TARGET": details.OnTarget = fieldValue; break; case "SHOTS OFF TARGET": details.OffTarget = fieldValue; break; case "CROSSES": details.Crossses = fieldValue; break; case "CORNERS": details.Corners = fieldValue; break; case "THROW INS": details.ThrowIns = fieldValue; break; case "SAVES": details.Saves = fieldValue; break; case "BLOCKS": details.Blocks = fieldValue; break; case "CLEARANCES": details.Clearances = fieldValue; break; case "OFFSIDES": details.Offsides = fieldValue; break; case "HANDBALLS": details.Handballs = fieldValue; break; case "FOULS": details.Fouls = fieldValue; break; case "YELLOW CARDS": details.YellowCards = fieldValue; break; case "RED CARDS": details.RedCards = fieldValue; break; } return(details); }
public static DataObjects.MatchDetails GetMatchStatistics(string url) { var awayDetails = new DataObjects.TeamDetails(); var homeDetails = new DataObjects.TeamDetails(); var matchDetails = new DataObjects.MatchDetails(); var dom = CQ.CreateFromUrl(url); var homeTeamName = dom[".club.home"].Text(); var awayTeamName = dom[".club.away"].Text(); var date = dom[".fixtureinfo"].Text().Split('|').First().Trim(); matchDetails.Date = DateTime.Parse(date); homeDetails.Name = homeTeamName; awayDetails.Name = awayTeamName; var allRelevantSections = dom[".statsTable .contentTable tr"].ToList(); for (int i = 0; i < allRelevantSections.Count; i = i + 3) { var parameters = allRelevantSections[i].ChildElements.Select(x => x.Cq().Text()).Skip(1).ToList(); var homeParameters = allRelevantSections[i + 1].ChildElements.Select(x => x.Cq().Text()).Skip(1).ToList(); var awayParameters = allRelevantSections[i + 2].ChildElements.Select(x => x.Cq().Text()).Skip(1).ToList(); for (int j = 0; j < parameters.Count; j++) { var parameter = parameters[j]; var homeValue = int.Parse(homeParameters[j]); var awayValue = int.Parse(awayParameters[j]); FillTheRightField(parameter, homeValue, homeDetails); FillTheRightField(parameter, awayValue, awayDetails); } } var homeGoals = dom[".homeScore"].Text(); var awayGoals = dom[".awayScore"].Text(); homeDetails.Goals = int.Parse(homeGoals); awayDetails.Goals = int.Parse(awayGoals); var homeGoalsDetails = dom[".home.goals li"].Select(x => x.Cq().Text()); var awayGoalsDetails = dom[".away.goals li"].Select(x => x.Cq().Text()); homeDetails.GoalsDetails = new List <DataObjects.Goal>(); awayDetails.GoalsDetails = new List <DataObjects.Goal>(); foreach (var homeGoalsDetail in homeGoalsDetails) { var goalsToAdd = GetGoalsFromString(homeGoalsDetail); homeDetails.GoalsDetails.AddRange(goalsToAdd); } foreach (var awayGoalsDetail in awayGoalsDetails) { var goalsToAdd = GetGoalsFromString(awayGoalsDetail); awayDetails.GoalsDetails.AddRange(goalsToAdd); } matchDetails.AwayTeam = awayDetails; matchDetails.HomeTeam = homeDetails; return(matchDetails); }
public static DataObjects.MatchDetails GetMatchStatistics(string url) { var awayDetails = new DataObjects.TeamDetails(); var homeDetails = new DataObjects.TeamDetails(); var matchDetails = new DataObjects.MatchDetails(); var dom = CQ.CreateFromUrl(url); var date = dom[".fixture__date"].Text().Replace("Sept", "sep"); matchDetails.Date = DateTime.ParseExact(date, "ddd dd MMM yyyy", new CultureInfo("us")); var matchHeaderQuery = ".match-overview-header"; var teamNames = matchHeaderQuery + " " + ".fixture__team-name--HorA"; homeDetails.Name = dom[teamNames.Replace("HorA", "home")].Text(); awayDetails.Name = dom[teamNames.Replace("HorA", "away")].Text(); var score = matchHeaderQuery + " " + ".fixture__number--HorA"; homeDetails.Goals = int.Parse(dom[score.Replace("HorA", "home")].Text()); awayDetails.Goals = int.Parse(dom[score.Replace("HorA", "away")].Text()); var scorersQuery = matchHeaderQuery + " " + ".fixture__scorers-HorA"; var homeScorers = dom[scorersQuery.Replace("HorA", "home")] .Select(x => x.Cq().Text()) .Where(x => !string.IsNullOrEmpty(x)) .SelectMany(x => x.Split('Â').ToList()) .Where(x => !x.Contains("Dismissed")) .Select(Helper.RemoveDiacritics) .Select(Helper.NormalizePlayerName) .ToList(); var homeGoals = GetGoalsForTeam(homeScorers); var awayScorers = dom[scorersQuery.Replace("HorA", "away")] .Select(x => x.Cq().Text()) .Where(x => !string.IsNullOrEmpty(x)) .SelectMany(x => x.Split('Â').ToList()) .Where(x => !x.Contains("Dismissed")) .Select(Helper.RemoveDiacritics) .Select(Helper.NormalizePlayerName) .ToList(); var awayGoals = GetGoalsForTeam(awayScorers); homeDetails.GoalsDetails = homeGoals; awayDetails.GoalsDetails = awayGoals; var percentageRowQuery = ".percentage-row"; var relevantDetails = dom[percentageRowQuery].ToList(); try { var possesion = relevantDetails.First(x => x.Cq().Text().Contains("Possession")); var possessionElements = possesion.ChildElements.ToList(); homeDetails.Possession = int.Parse(possessionElements[1].Cq().Text().Replace("Home", "").Trim().Trim('%')); awayDetails.Possession = int.Parse(possessionElements.Last().Cq().Text().Replace("Away", "").Trim().Trim('%')); var totalShots = relevantDetails.First(x => x.Cq().Text().Contains("Shots")); var totalShotsElements = totalShots.ChildElements.ToList(); homeDetails.TotalShots = int.Parse(totalShotsElements[1].Cq().Text().Replace("Home", "")); awayDetails.TotalShots = int.Parse(totalShotsElements.Last().Cq().Text().Replace("Away", "")); var shotsOnTarget = relevantDetails.First(x => x.Cq().Text().Contains("Shots on Target")); var shotsOnTargetElements = shotsOnTarget.ChildElements.ToList(); homeDetails.OnTarget = int.Parse(shotsOnTargetElements[1].Cq().Text().Replace("Home", "")); awayDetails.OnTarget = int.Parse(shotsOnTargetElements.Last().Cq().Text().Replace("Away", "")); var corners = relevantDetails.First(x => x.Cq().Text().Contains("Corners")); var cornernsElements = corners.ChildElements.ToList(); homeDetails.Corners = int.Parse(cornernsElements[1].Cq().Text().Replace("Home", "")); awayDetails.Corners = int.Parse(cornernsElements.Last().Cq().Text().Replace("Away", "")); var fouls = relevantDetails.First(x => x.Cq().Text().Contains("Fouls")); var foulsElements = fouls.ChildElements.ToList(); homeDetails.Fouls = int.Parse(foulsElements[1].Cq().Text().Replace("Home", "")); awayDetails.Fouls = int.Parse(foulsElements.Last().Cq().Text().Replace("Away", "")); } catch (Exception) { Console.WriteLine("No Stats for this match!"); } matchDetails.HomeTeam = homeDetails; matchDetails.AwayTeam = awayDetails; return(matchDetails); }
public static DataObjects.MatchDetails GetMatchStatisticsFromEspn(string url) { var awayDetails = new DataObjects.TeamDetails(); var homeDetails = new DataObjects.TeamDetails(); var matchDetails = new DataObjects.MatchDetails(); var summaryPage = url.Replace("matchstats", "match"); var summaryPageDom = CQ.CreateFromUrl(summaryPage); var title = summaryPageDom["title"].Text(); var dateStr = title.Split('-')[2].Trim(); matchDetails.Date = DateTime.Parse(dateStr); if (matchDetails.Date > DateTime.Today) { return(null); } var dom = CQ.CreateFromUrl(url); homeDetails.Name = dom[".team.away .long-name"].Text(); awayDetails.Name = dom[".team.home .long-name"].Text(); homeDetails.Goals = int.Parse(dom[".score-container [data-home-away=home]"].Text()); awayDetails.Goals = int.Parse(dom[".score-container [data-home-away=away]"].Text()); var awayScorers = dom[".team.home [data-event-type=goal]"] .Select(x => x.Cq().Text().Trim()) .SelectMany(x => x.Split(')').ToList()) .Where(x => !string.IsNullOrEmpty(x)) .Select(Helper.RemoveDiacritics) .Select(Helper.NormalizePlayerName) .ToList(); var awayGoals = GetGoalsForTeam(awayScorers); var homeScorers = dom[".team.away [data-event-type=goal]"] .Select(x => x.Cq().Text().Trim()) .SelectMany(x => x.Split(')').ToList()) .Where(x => !string.IsNullOrEmpty(x)) .Select(Helper.RemoveDiacritics) .Select(Helper.NormalizePlayerName) .ToList(); var homeGoals = GetGoalsForTeam(homeScorers); homeDetails.GoalsDetails = homeGoals; awayDetails.GoalsDetails = awayGoals; homeDetails.Possession = int.Parse(dom[".possession [data-home-away=home]"].First().Text().Replace("%", "").Trim()); awayDetails.Possession = int.Parse(dom[".possession [data-home-away=away]"].First().Text().Replace("%", "").Trim()); var homeShots = dom[".shots [data-home-away=home]"].First().Text(); homeDetails.TotalShots = int.Parse(homeShots.Split('(').First()); homeDetails.OnTarget = int.Parse(homeShots.Split('(').Last().Replace(")", "").Trim()); var awayShots = dom[".shots [data-home-away=away]"].First().Text(); awayDetails.TotalShots = int.Parse(awayShots.Split('(').First()); awayDetails.OnTarget = int.Parse(awayShots.Split('(').Last().Replace(")", "").Trim()); homeDetails.Fouls = int.Parse(dom["[data-stat=foulsCommitted]"].First().Text()); awayDetails.Fouls = int.Parse(dom["[data-stat=foulsCommitted]"].Last().Text()); homeDetails.YellowCards = int.Parse(dom["[data-stat=yellowCards]"].First().Text()); awayDetails.YellowCards = int.Parse(dom["[data-stat=yellowCards]"].Last().Text()); homeDetails.RedCards = int.Parse(dom["[data-stat=redCards]"].First().Text()); awayDetails.RedCards = int.Parse(dom["[data-stat=redCards]"].Last().Text()); homeDetails.Offsides = int.Parse(dom["[data-stat=offsides]"].First().Text()); awayDetails.Offsides = int.Parse(dom["[data-stat=offsides]"].Last().Text()); homeDetails.Corners = int.Parse(dom["[data-stat=wonCorners]"].First().Text()); awayDetails.Corners = int.Parse(dom["[data-stat=wonCorners]"].Last().Text()); matchDetails.HomeTeam = homeDetails; matchDetails.AwayTeam = awayDetails; return(matchDetails); }
public static DataObjects.MatchDetails GetMatchStatistics(string url) { var awayDetails = new DataObjects.TeamDetails(); var homeDetails = new DataObjects.TeamDetails(); var matchDetails = new DataObjects.MatchDetails(); matchDetails.Date = DateTime.Today; var basicQuery = "[data-bind=text: HorA.Event]"; var attempsInitial = ".total-attempts--values-wrap "; var dom = CQ.CreateFromUrl(url.Replace("index.html", "statistics/index.html")); //ballPossession var homeTeamName = dom[".team-home .team-name"].Last().Text().Trim().Trim('\n').Trim('\r').Trim('\t').Trim().Trim(); var homeGoals = dom[basicQuery.Replace("HorA", "home").Replace("Event", "goalsScored")].Text(); var homeoffsides = dom[basicQuery.Replace("HorA", "home").Replace("Event", "offside")].Text(); var homePossession = dom[basicQuery.Replace("HorA", "home").Replace("Event", "ballPossession + '%'")].Text().Trim('%'); var homeGoalsDetails = GetGoalsForTeamInMatch(dom, "home"); Console.Write(homeTeamName + " "); var homeCorners = dom[basicQuery.Replace("HorA", "home").Replace("Event", "corner")].Text(); var homeOnTarget = dom[attempsInitial + basicQuery.Replace("HorA", "home").Replace("Event", "attempsOn")].Text(); var homeOffTarget = dom[attempsInitial + basicQuery.Replace("HorA", "home").Replace("Event", "attempsOff")].Text(); homeDetails.Type = (int)DataObjects.TeamType.Home; homeDetails.Name = homeTeamName; homeDetails.Goals = int.Parse(homeGoals); homeDetails.Offsides = int.Parse(homeoffsides); homeDetails.Corners = int.Parse(homeCorners); homeDetails.OnTarget = int.Parse(homeOnTarget); homeDetails.OffTarget = int.Parse(homeOffTarget); homeDetails.Possession = int.Parse(homePossession); homeDetails.GoalsDetails = homeGoalsDetails; var awayTeamName = dom[".team-away .team-name"].Last().Text().Trim().Trim('\n').Trim('\r').Trim('\t').Trim().Trim(); var awayGoals = dom[basicQuery.Replace("HorA", "away").Replace("Event", "goalsScored")].Text(); var awayoffsides = dom[basicQuery.Replace("HorA", "away").Replace("Event", "offside")].Text(); var awayCorners = dom[basicQuery.Replace("HorA", "away").Replace("Event", "corner")].Text(); var awayOnTarget = dom[attempsInitial + basicQuery.Replace("HorA", "away").Replace("Event", "attempsOn")].Text(); var awayOffTarget = dom[attempsInitial + basicQuery.Replace("HorA", "away").Replace("Event", "attempsOff")].Text(); var awayPossession = dom[basicQuery.Replace("HorA", "away").Replace("Event", "ballPossession + '%'")].Text().Trim('%'); var awayGoalsDetails = GetGoalsForTeamInMatch(dom, "away"); Console.Write(awayTeamName); Console.WriteLine(); awayDetails.Type = (int)DataObjects.TeamType.Away; awayDetails.Name = awayTeamName; awayDetails.Goals = int.Parse(awayGoals); awayDetails.Offsides = int.Parse(awayoffsides); awayDetails.Corners = int.Parse(awayCorners); awayDetails.OnTarget = int.Parse(awayOnTarget); awayDetails.OffTarget = int.Parse(awayOffTarget); awayDetails.OffTarget = int.Parse(awayPossession); awayDetails.GoalsDetails = awayGoalsDetails; matchDetails.HomeTeam = homeDetails; matchDetails.AwayTeam = awayDetails; return(matchDetails); }