示例#1
0
        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("&amp;", "&");
                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));
        }
示例#2
0
        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);
        }
示例#3
0
        //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);
        }
示例#4
0
        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);
        }
示例#5
0
        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));
        }
示例#6
0
        //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);
        }
示例#7
0
        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);
        }
示例#8
0
        //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);
        }
示例#9
0
        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);
        }