示例#1
0
        private Ranking GetLatestRanking() // nieużywane
        {
            // prepare document
            Ranking   latestRanking  = new Ranking();
            WebClient client         = new WebClient();
            string    downloadString = client.DownloadString("http://www.fifa.com/fifa-world-ranking/ranking-table/men/index.html");
            var       html           = new HtmlDocument();

            html.LoadHtml(downloadString);

            // get date
            var dateString = html.DocumentNode.SelectNodes("//div[@class='slider slider-mock ranking-browser']/div[@class='slider-wrap']/ul/li").SingleOrDefault <HtmlNode>().InnerText;

            string[] dateTable = dateString.Split(' ');
            latestRanking.Date = new DateTime(Int32.Parse(dateTable[2]), DateTime.ParseExact(dateTable[1], "MMMM", CultureInfo.InvariantCulture).Month, Int32.Parse(dateTable[0]));

            // get team data
            foreach (HtmlNode table in html.DocumentNode.SelectNodes("//tbody"))
            {
                foreach (HtmlNode row in table.SelectNodes("tr"))
                {
                    var team = new TeamInRank();

                    team.Rank           = Int32.Parse(row.SelectNodes(".//td[@class='tbl-rank']").SingleOrDefault <HtmlNode>().InnerText);
                    team.Name           = (row.SelectNodes(".//td[@class='tbl-teamname']").SingleOrDefault <HtmlNode>().InnerText);
                    team.TotalPoints    = Double.Parse(row.SelectNodes(".//td[@class='tbl-points']").SingleOrDefault <HtmlNode>().InnerText.Split('(', ')')[1], System.Globalization.CultureInfo.InvariantCulture);
                    team.PreviousPoints = Int32.Parse(row.SelectNodes(".//td[@class='tbl-prevpoints']").SingleOrDefault <HtmlNode>().InnerText);
                    team.MovePosition   = Int32.Parse(row.SelectNodes(".//td[@class='tbl-prevrank']").SingleOrDefault <HtmlNode>().InnerText);
                    latestRanking.PutTeam(team);
                }
            }
            return(latestRanking);
        }
示例#2
0
        private Ranking GetRankingById(int id) // przestarzałe
        {
            // prepare document
            Ranking latestRanking = new Ranking();

            latestRanking.Id = id;
            WebClient client         = new WebClient();
            string    downloadString = client.DownloadString("http://www.fifa.com/fifa-world-ranking/ranking-table/men/rank=" + id + "/index.html");
            var       html           = new HtmlDocument();

            html.LoadHtml(downloadString);

            // get date
            try
            {
                var dateHtml = html.DocumentNode.SelectNodes("//div[@class='slider slider-mock ranking-browser']/div[@class='slider-wrap']/ul/li");
                if (dateHtml == null && id == 1)                    // ranking o id = 1 nie ma daty na stronie FIFA
                {
                    latestRanking.Date = new DateTime(1992, 12, 1); // przyjmuje się datę 1 grudnia 1992
                }
                else
                {
                    var      dateString = dateHtml.SingleOrDefault <HtmlNode>().InnerText;
                    string[] dateTable  = dateString.Split(' ');
                    latestRanking.Date = new DateTime(Int32.Parse(dateTable[2]), DateTime.ParseExact(dateTable[1], "MMMM", CultureInfo.InvariantCulture).Month, Int32.Parse(dateTable[0]));
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException("[GetRankingById] Problem z odczytem rankingu o id=" + id.ToString() + " ze strony FIFA", ex);
            }

            // get team data
            foreach (HtmlNode table in html.DocumentNode.SelectNodes("//tbody"))
            {
                foreach (HtmlNode row in table.SelectNodes("tr"))
                {
                    var team = new TeamInRank();

                    team.Rank = Int32.Parse(row.SelectNodes(".//td[@class='tbl-rank']").SingleOrDefault <HtmlNode>().InnerText);

                    var    name  = (row.SelectNodes(".//td[@class='tbl-teamname']").SingleOrDefault <HtmlNode>().InnerText);
                    byte[] bytes = Encoding.Default.GetBytes(name);
                    team.Name = Encoding.UTF8.GetString(bytes);

                    team.TotalPoints    = Double.Parse(row.SelectNodes(".//td[@class='tbl-points']").SingleOrDefault <HtmlNode>().InnerText.Split('(', ')')[1], System.Globalization.CultureInfo.InvariantCulture);
                    team.PreviousPoints = Int32.Parse(row.SelectNodes(".//td[@class='tbl-prevpoints']").SingleOrDefault <HtmlNode>().InnerText);
                    team.MovePosition   = Int32.Parse(row.SelectNodes(".//td[@class='tbl-prevrank']").SingleOrDefault <HtmlNode>().InnerText);
                    team.FlagUrl        = "http:" + (row.SelectNodes(".//td[@class='tbl-teamname']").SingleOrDefault <HtmlNode>().FirstChild.FirstChild.Attributes[2].Value);
                    latestRanking.PutTeam(team);
                }
            }
            return(latestRanking);
        }
示例#3
0
        private Ranking GetRankingBySiteId(int siteId, int id)
        {
            // prepare document
            Ranking latestRanking = new Ranking();

            latestRanking.Id = id;
            WebClient client = new WebClient();

            client.Encoding = Encoding.UTF8;
            var htmlData = client.DownloadData("http://www.fifa.com/fifa-world-ranking/ranking-table/men/rank/id" + siteId + "/");
            var htmlCode = Encoding.UTF8.GetString(htmlData);

            // (1) encode hak
            htmlCode = htmlCode.Replace("&#244;", "ô"); // Côte d'Ivoire
            htmlCode = htmlCode.Replace("&#39;", "'");  // Côte d'Ivoire
            htmlCode = htmlCode.Replace("&#231;", "ç"); // Curaçao

            // (2) St. Vincent / Grenadines hak: Windows nie dopuszcza znaku "/" w nazwach plikow
            htmlCode = htmlCode.Replace("St. Vincent / Grenadines", "St Vincent and the Grenadines");

            // (3) na stronie "São Tomé e Príncipe" zamieniono w pewnym momencie na "Sao Tome e Principe"
            htmlCode = htmlCode.Replace("Sao Tome e Principe", "São Tomé e Príncipe");

            var html = new HtmlDocument();

            html.LoadHtml(htmlCode);

            // get date
            try
            {
                var dateHtml = html.DocumentNode.SelectNodes("//div[@class='fi-selected-item']");
                if (dateHtml == null && id == 1)                    // ranking o id = 1 nie ma daty na stronie FIFA
                {
                    latestRanking.Date = new DateTime(1992, 12, 1); // przyjmuje się datę 1 grudnia 1992
                }
                else
                {
                    var      dateString = dateHtml.SingleOrDefault <HtmlNode>().InnerText;
                    string[] dateTable  = dateString.Split(' ');
                    latestRanking.Date = new DateTime(Int32.Parse(dateTable[2]), DateTime.ParseExact(dateTable[1], "MMMM", CultureInfo.InvariantCulture).Month, Int32.Parse(dateTable[0]));
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException("[GetRankingById] Problem z odczytem rankingu o id=" + id.ToString() + " ze strony FIFA", ex);
            }

            // get team data
            foreach (HtmlNode table in html.DocumentNode.SelectNodes("//tbody"))
            {
                foreach (HtmlNode row in table.SelectNodes("tr"))
                {
                    var team = new TeamInRank();
                    var test = row.SelectNodes(".//td[contains(@class,'fi-table__rank')]");
                    team.Rank = Int32.Parse(row.SelectNodes(".//td[contains(@class,'fi-table__rank')]").FirstOrDefault <HtmlNode>().InnerText);

                    var name = (row.SelectNodes(".//td[contains(@class,'fi-table__teamname')]//span[contains(@class,'fi-t__nText ')]").
                                FirstOrDefault <HtmlNode>().InnerText);
                    byte[] bytes = Encoding.Unicode.GetBytes(name);
                    team.Name = Encoding.Unicode.GetString(bytes);

                    if (team.Name == "C&#244;te d&#39;Ivoire") // hak zwiazany z błedem dekodowania w htmlAgilityPack
                    {
                        team.Name = "Côte d'Ivoire";
                    }

                    if (team.Name == "S&#227;o Tom&#233; and Pr&#237;ncipe") // hak zwiazany z błedem dekodowania w htmlAgilityPack
                    {
                        team.Name = "São Tomé e Príncipe";
                    }

                    team.TotalPoints = Double.Parse(row.SelectNodes(".//td[contains(@class,'fi-table__points')]//span[contains(@class,'text')]").
                                                    FirstOrDefault <HtmlNode>().InnerText, CultureInfo.InvariantCulture);
                    team.PreviousPoints = Double.Parse(row.SelectNodes(".//td[contains(@class,'fi-table__prevpoints')]//span[contains(@class,'text')]").
                                                       FirstOrDefault <HtmlNode>().InnerText, CultureInfo.InvariantCulture);
                    team.MovePosition = Int32.Parse(row.SelectNodes(".//td[contains(@class,'fi-table__rankingmovement')]//span[contains(@class,'text')]").
                                                    FirstOrDefault <HtmlNode>().InnerText);
                    team.FlagUrl = (row.SelectNodes(".//td[contains(@class,'fi-table__teamname')]//*//img[contains(@class,'fi-flag--4')]").
                                    FirstOrDefault <HtmlNode>().Attributes.FirstOrDefault().Value);
                    latestRanking.PutTeam(team);
                }
            }
            return(latestRanking);
        }