public override Round GetRoundResultsHomeAndAway(int year, int roundNo) { var isFinal = roundNo > numHomeandAwayRounds[year]; var parameters = new Dictionary <string, string> { { "SeasonID", year.ToString() }, { "Round", isFinal ? roundNo - numHomeandAwayRounds[year] + "-2" : roundNo + "-1" } }; var page = WebsiteAPI.GetPage(MatchResults, parameters); var link = MatchResults + "?SeasonID=" + year.ToString() + "&Round=" + (isFinal ? roundNo - numHomeandAwayRounds[year] + "-2" : roundNo + "-1");//http://finalsiren.com/Results.asp?SeasonID=2021&Round=12-1 var web = new HtmlWeb(); var doc = web.Load(link); var nodes = doc.DocumentNode.SelectNodes("//table//tr").Where(n => n.InnerText.Contains("dftd") || n.InnerText.Contains("lost to") || n.InnerText.Contains("drew") || n.InnerHtml.Contains("<td>v</td>")).ToList(); var matches = new List <Match>(); var headerCheck = ": Round " + roundNo + " " + year; if (!doc.DocumentNode.InnerText.Contains(headerCheck)) { return(new Round(Convert.ToInt32(year), roundNo, isFinal, matches)); } foreach (var node in nodes) { var details = new List <string>(); var home = node.SelectNodes("td")[0].FirstChild.InnerText; var away = node.SelectNodes("td")[7].FirstChild.InnerText; var match = new Match( Util.GetTeamByName(home), new Score(node.SelectNodes("td")[1].InnerText), new Score(node.SelectNodes("td")[2].InnerText) - new Score(node.SelectNodes("td")[1].InnerText), new Score(node.SelectNodes("td")[3].InnerText) - new Score(node.SelectNodes("td")[2].InnerText), new Score(node.SelectNodes("td")[4].InnerText) - new Score(node.SelectNodes("td")[3].InnerText), Util.GetTeamByName(away), new Score(node.SelectNodes("td")[8].InnerText), new Score(node.SelectNodes("td")[9].InnerText) - new Score(node.SelectNodes("td")[8].InnerText), new Score(node.SelectNodes("td")[10].InnerText) - new Score(node.SelectNodes("td")[9].InnerText), new Score(node.SelectNodes("td")[11].InnerText) - new Score(node.SelectNodes("td")[10].InnerText), Util.GetGroundByName(node.SelectNodes("td")[13].SelectSingleNode("a").InnerText), Util.StringToDate(node.SelectNodes("td")[14].InnerText + " " + year.ToString()) ); var statsUrl = Website + node.SelectNodes("td")[15].FirstChild.GetAttributes("href").First().Value.Replace("ft_match_statistics?mid=", "").Replace("&", "&"); if (statsUrl.Contains("MatchDetails")) { var matchStatistics = GetMatchResults(statsUrl, year, roundNo); match.HomeStats = matchStatistics.Item1; match.HomeStats.For = home; match.HomeStats.Against = away; match.AwayStats = matchStatistics.Item2; match.AwayStats.For = away; match.AwayStats.Against = home; } matches.Add(match); } return(new Round(Convert.ToInt32(year), roundNo, isFinal, matches)); }
public override int GetNumRounds(int year) { //https://www.footywire.com/afl/footy/ft_match_list?year=2019 var numRounds = 0; var parameters = new Dictionary <string, string>(); var results = Website + "/afl/footy/ft_match_list?year=" + year; var page = ""; try { page = WebsiteAPI.GetPage(results, parameters); } catch (Exception e) { Console.WriteLine("No round data for year " + year); } var r = new Regex("(Round) ([0-9])+"); var m = r.Match(page); while (m.Success) { var round = Int32.Parse(m.ToString().Remove(0, 6)); if (round > numRounds) { numRounds = round; } m = m.NextMatch(); } return(numRounds); }
//TODO: this function public List <Player> GetPlayers(int year, int pageNo) { var parameters = new Dictionary <string, string> { { "SeasonID", year.ToString() }, { "Sort", "Rating%20Desc" }, { "Page", pageNo.ToString() } }; var page = WebsiteAPI.GetPage(PlayerList, parameters); var table = WebsiteAPI.SplitOn(page, "<table", "</table")[0]; var rows = WebsiteAPI.SplitOn(table, "<tr", "</tr", 4); var players = new List <Player>(); for (var i = PlayerTableIndex; i < (rows.Count - 1); i++) { var details = WebsiteAPI.SplitOn(rows[i], "<td", "</td", 4); var player = new Player() { FinalSirenPlayerId = ExtractFinalSirenPlayerId(details[2]), Name = ExtractInnerHtml(details[2]), History = new List <PlayerMatch>() }; players.Add(player); } return(players); }
public override int GetNumRounds(int year) { if (numHomeandAwayRounds.ContainsKey(year)) { return(numHomeandAwayRounds[year]); } var numRounds = 0; var parameters = new Dictionary <string, string> { { "SeasonID", year.ToString() }, { "Round", "1-1" } }; var page = WebsiteAPI.GetPage(MatchResults, parameters); var roundList = WebsiteAPI.SplitOn(page, "<select", "</select")[1]; var r = new Regex("([R,F])([1-9])+"); var m = r.Match(roundList); while (m.Success) { var round = StringToRoundNumber(m.ToString(), year); if (round > numRounds) { numRounds = round; } m = m.NextMatch(); } return(numRounds); }
public override Round GetRoundResultsHomeAndAway(int year, int roundNo) { var isFinal = numHomeandAwayRounds[year] > roundNo; var roundString = roundNo < 10 ? "0" + roundNo : "" + roundNo; var parameters = new Dictionary <string, string> { { "roundId", "CD_R" + year + "014" + roundString } }; var page = WebsiteAPI.GetPage(Results, parameters); var table = WebsiteAPI.SplitOn(page, "<table", "</table", "class=\"fancy-zebra fixture\"")[0]; var rows = WebsiteAPI.SplitOn(table, "<tr", "</tr", 4); var dateReg = new Regex("(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday), (January|February|March|April|May|June|July|August|September|October|November|December) ([0-9])+"); var matches = new List <Match>(); var dateHold = ""; for (var i = ResultTableIndex; i < rows.Count; i++) { var dateMatch = dateReg.Match(rows[i]); if (dateMatch.Success) { dateHold = dateMatch.ToString(); } if (!string.IsNullOrEmpty(dateHold)) { var details = WebsiteAPI.SplitOn(rows[i], "<td", "</td", 4); if (details.Count > 1) { throw new Exception("AFLAPI doesn't load match statistics"); //Teams var teams = WebsiteAPI.SplitOn(details[0], "<span class=\"team\"", "</span", 19); var home = teams[0].TrimEnd('v').TrimEnd(' '); var away = teams[1]; //Time var ground = WebsiteAPI.SplitOn(details[1], "<a", "</a", "class=\"venue\"", 40)[0]; //Time var time = WebsiteAPI.SplitOn(details[1], "<span class=\"time\"", "</span", 19)[0]; matches.Add(new Match( Util.GetTeamByName(home), new Score(), new Score(), new Score(), new Score(), Util.GetTeamByName(away), new Score(), new Score(), new Score(), new Score(), Util.GetGroundByName(ground), Util.StringToDate(dateHold + " " + time + " " + year.ToString()) )); } } } return(new Round(Convert.ToInt32(year), roundNo, isFinal, matches)); }
//TODO: this function public int GetNumPlayerPages(int year) { var parameters = new Dictionary <string, string> { { "SeasonID", year.ToString() }, { "Sort", "Rating%20Desc" } }; var page = WebsiteAPI.GetPage(PlayerList, parameters); var navigationPanel = WebsiteAPI.SplitOn(page, "<ul class=\"pagination pagination-sm\"", "</ul")[0]; var navigaationElements = WebsiteAPI.SplitOn(navigationPanel, "<li", "</li"); //Ignore the first and last: return(navigaationElements.Count - 1); }
public override int GetNumRounds(int year) { var numRounds = 0; var parameters = new Dictionary <string, string>(); var page = WebsiteAPI.GetPage(Results, parameters); var roundList = WebsiteAPI.SplitOn(page, "<select", "</select", "name=\"roundId\"")[0]; var r = new Regex("(Round) ([0-9])+"); var m = r.Match(roundList); while (m.Success) { var round = Int32.Parse(m.ToString().Remove(0, 6)); if (round > numRounds) { numRounds = round; } m = m.NextMatch(); } return(numRounds); }
//TODO: this function public List <PlayerMatch> GetPlayerMatchHistory(int playerId) { //http://finalsiren.com/PlayerStats.asp?PlayerID=1815&SeasonID=ALL#ind var parameters = new Dictionary <string, string> { { "PlayerID", playerId.ToString() }, { "SeasonID", "ALL#ind" } }; var page = WebsiteAPI.GetPage(PlayerStats, parameters); var table = WebsiteAPI.SplitOn(page, "<table", "</table")[2]; var rows = WebsiteAPI.SplitOn(table, "<tr", "</tr"); var playerMatches = new List <PlayerMatch>(); for (var i = PlayerTableIndex; i < (rows.Count - 1); i++) { var details = WebsiteAPI.SplitOn(rows[i], "<td", "</td", 4); var playerMatch = new PlayerMatch { FinalSirenPlayerId = playerId, Year = ToInt(details[0]), RoundNo = StringToRoundNumber(details[1], ToInt(details[0])), Against = ExtractInnerHtml(details[2]), //Stats Kicks = ToInt(details[3]), Handballs = ToInt(details[4]), Marks = ToInt(details[6]), HitOuts = ToInt(details[7]), Tackles = ToInt(details[8]), FreesFor = ToInt(details[9]), FreesAgainst = ToInt(details[10]), Goals = ToInt(details[11]), Behinds = ToInt(details[12]), Rating = ToInt(details[14]), Win = details[15] == "Win" }; playerMatches.Add(playerMatch); } return(playerMatches); }
public override int GetNumRounds(int year) { var numRounds = 0; var parameters = new Dictionary <string, string>(); var results = Website + year + "_AFL_season"; var page = WebsiteAPI.GetPage(results, parameters); var roundList = WebsiteAPI.SplitOn(page, "#Premiership_season", "</ul")[0]; var r = new Regex("(Round) ([0-9])+"); var m = r.Match(roundList); while (m.Success) { var round = Int32.Parse(m.ToString().Remove(0, 6)); if (round > numRounds) { numRounds = round; } m = m.NextMatch(); } return(numRounds); }