public CombinedTeamResult(string teamName, string url, CombinedResultSet results)
        {
            CheckParameter.RequireNotNullOrEmpty(() => teamName);
            CheckParameter.RequireNotNull(() => results);

            Team = teamName;
            this.results = results;
            this.Url = new Url(url);
        }
Example #2
0
        public List<ITeamResults> GetResults(Leagues league)
        {
            List<ITeamResults> teams = new List<ITeamResults>();

            HtmlDocument doc = new HtmlDocument();

            var stream =
                GetPageStream(GuardianLeagueMappings.GetUriForLeague(league));

            doc.Load(stream, Encoding.UTF8);

            var table = doc.DocumentNode.SelectNodes("//table").FirstOrDefault();

            if (table == null)
            {
                throw new InvalidOperationException("Guardian have changed their site again - can't find table.");
            }

            var body = table.SelectNodes(".//tbody").FirstOrDefault();

            if (body == null)
            {
                throw new InvalidOperationException("Guardian have changed their site again - can't find table body.");
            }

            var rows = body.SelectNodes(".//tr");

            if (rows == null)
            {
                throw new InvalidOperationException("Guardian have changed their site again - can't find rows.");
            }

            foreach (var row in rows)
            {
                CombinedResultSet results = new CombinedResultSet();
                HtmlNodeCollection cells = row.SelectNodes(".//td");

                if (cells == null)
                {
                    throw new InvalidOperationException("Guardian have changed their site again - can't find cells.");
                }

                string team = cells[1].InnerText;
                string link = "Link is broken";

                var spans = cells[1].SelectNodes(".//span");
                var linkCells = spans?.First().SelectNodes(".//a");

                var href = linkCells?.First().Attributes["href"];

                if (href != null)
                {
                    link = string.Concat(root, href.Value);
                }

                /*

                Pos Team 	    P 	W 	D 	L 	F 	A 	GD 	Pts 	Form
                1 	Arsenal 	1 	1 	0 	0 	2 	1 	1 	3

                 <tr class="">
                  <td class="table-column--sub">3</td> <-- TD 0 -->
                  <td class="table-column--main"> <-- TD 1 -->
                    <span class="team-name" data-abbr="ARS">
                      <a href="/football/arsenal" data-link-name="View team" class="team-name__long">
                        Arsenal
                      </a>
                    </span>
                  </td>
                  <td>1</td>  <-- TD 2, played, which is calculated -->
                  <td class="table-column--importance-1">1</td> <-- TD 3 -->
                  <td class="table-column--importance-1">0</td> <-- TD 4 -->
                  <td class="table-column--importance-1">0</td> <-- TD 5 -->
                  <td class="table-column--importance-1">2</td> <-- TD 6 -->
                  <td class="table-column--importance-1">1</td> <-- TD 7 -->
                  <td class="table-column--importance-3">1</td> <-- TD 8 -->
                  <td>
                    <b>3</b>  <-- TD 9 - note b tag -->
                  </td>
                  <td class="table-column--importance-2 football-stat--form team__results--thin"><-- TD 10 - form - TODO -->
                    <div class="team__results">
                      <span class="team-result team-result--won" data-foe="C Palace" data-score="2" data-score-foe="1" title="Won 2-1 against C Palace">
                        <span class="u-h">Won against C Palace</span>
                      </span>
                    </div>
                  </td>
                </tr>
            */
                // ReSharper disable UnusedVariable
                var played = int.Parse(cells[2].InnerText);
                int gd = int.Parse(cells[8].InnerText);
                int points = int.Parse(cells[9].InnerText);
                // ReSharper restore UnusedVariable

                results.Won = int.Parse(cells[3].InnerText);
                results.Drawn = int.Parse(cells[4].InnerText);
                results.Lost = int.Parse(cells[5].InnerText);
                results.GoalsScored = int.Parse(cells[6].InnerText);
                results.GoalsConceded = int.Parse(cells[7].InnerText);

                teams.Add(new CombinedTeamResult(team, link, results));
            }

            teams.Sort(new TeamResultsComparer());

            return teams;
        }