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); }
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); }
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("ô", "ô"); // Côte d'Ivoire htmlCode = htmlCode.Replace("'", "'"); // Côte d'Ivoire htmlCode = htmlCode.Replace("ç", "ç"); // 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ôte d'Ivoire") // hak zwiazany z błedem dekodowania w htmlAgilityPack { team.Name = "Côte d'Ivoire"; } if (team.Name == "São Tomé and Prí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); }