private static Nhl_Players_Bio_Goalie MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType, int year) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Players_Bio_Goalie model = new Nhl_Players_Bio_Goalie(); model.NhlSeasonType = nhlSeasonType; model.Year = year; model.Number = ConvertStringToInt(tdNodes[0].InnerText); model.Name = tdNodes[1].InnerText; model.Team = tdNodes[2].InnerText; model.Position = "G"; model.DateOfBirth = Convert.ToDateTime(tdNodes[3].InnerText.Replace("'", "/")); model.BirthCity = tdNodes[4].InnerText; model.StateOrProvince = tdNodes[5].InnerText; model.BirthCountry = tdNodes[6].InnerText; model.HeightInches = ConvertStringToInt(tdNodes[7].InnerText); model.WeightLbs = ConvertStringToInt(tdNodes[8].InnerText); model.Catches = tdNodes[9].InnerText; model.Rookie = tdNodes[10].InnerText; model.DraftYear = ConvertStringToInt(tdNodes[11].InnerText); model.DraftRound = ConvertStringToInt(tdNodes[12].InnerText); model.DraftOverall = ConvertStringToInt(tdNodes[13].InnerText); model.GamesPlayed = ConvertStringToInt(tdNodes[14].InnerText); model.Wins = ConvertStringToInt(tdNodes[15].InnerText); model.Losses = ConvertStringToInt(tdNodes[16].InnerText); model.OTSOLosses = ConvertStringToInt(tdNodes[17].InnerText); model.GAA = Convert.ToDouble(tdNodes[18].InnerText); model.SavePercentage = Convert.ToDouble(tdNodes[19].InnerText); model.Shutouts = ConvertStringToInt(tdNodes[20].InnerText); return(model); }
private static List <Nhl_Games_Summary> UpdateSeason(int year, NhlSeasonType nhlSeasonType, DateTime fromDate, bool saveToDb) { // Get HTML rows NhlGamesSummary nhl = new NhlGamesSummary(); List <HtmlNode> rows = nhl.GetResultsForSeasonType(year, nhlSeasonType, fromDate); // Parse into a list List <Nhl_Games_Summary> results = new List <Nhl_Games_Summary>(); foreach (HtmlNode row in rows) { Nhl_Games_Summary result = NhlGamesSummary.MapHtmlRowToModel(row, nhlSeasonType); if (null != result) { results.Add(result); } } // Update DB if (saveToDb) { NhlGamesSummary.AddOrUpdateDb(results); } return(results); }
private static List <Nhl_Players_Bio_Goalie> UpdateSeason(int year, NhlSeasonType nhlSeasonType, bool saveToDb) { // Get HTML rows NhlPlayersBioGoalie nhl = new NhlPlayersBioGoalie(); List <HtmlNode> rows = nhl.GetResultsForSeasonType(year, nhlSeasonType); // Parse into a list List <Nhl_Players_Bio_Goalie> results = new List <Nhl_Players_Bio_Goalie>(); foreach (HtmlNode row in rows) { Nhl_Players_Bio_Goalie result = NhlPlayersBioGoalie.MapHtmlRowToModel(row, nhlSeasonType, year); if (null != result) { results.Add(result); } } // Update DB if (saveToDb) { NhlPlayersBioGoalie.AddOrUpdateDb(results); } return(results); }
private static Nhl_Games_Summary MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Games_Summary model = new Nhl_Games_Summary(); model.NhlSeasonType = nhlSeasonType; model.Date = Convert.ToDateTime(tdNodes[0].InnerText.Replace("'", "/")); model.Year = NhlModelHelper.GetSeason(model.Date).Item2; model.Visitor = tdNodes[1].InnerText; model.VisitorScore = ConvertStringToInt(tdNodes[2].InnerText); model.Home = tdNodes[3].InnerText; model.HomeScore = ConvertStringToInt(tdNodes[4].InnerText); model.OS = tdNodes[5].InnerText; model.WGoalie = tdNodes[6].InnerText; model.WGoal = tdNodes[7].InnerText; model.VisitorShots = ConvertStringToInt(tdNodes[8].InnerText); model.VisitorPPGF = ConvertStringToInt(tdNodes[9].InnerText); model.VisitorPPOpp = ConvertStringToInt(tdNodes[10].InnerText); model.VisitorPIM = ConvertStringToInt(tdNodes[11].InnerText); model.HomeShots = ConvertStringToInt(tdNodes[12].InnerText); model.HomePPGF = ConvertStringToInt(tdNodes[13].InnerText); model.HomePPOpp = ConvertStringToInt(tdNodes[14].InnerText); model.HomePIM = ConvertStringToInt(tdNodes[15].InnerText); model.Attendance = ConvertStringToInt(tdNodes[16].InnerText.Replace(",", String.Empty)); return model; }
private static Nhl_Players_Rtss_Skater MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType, int year) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Players_Rtss_Skater model = new Nhl_Players_Rtss_Skater(); model.NhlSeasonType = nhlSeasonType; model.Year = year; model.Number = 0; model.Name = tdNodes[1].InnerText; model.Team = tdNodes[2].InnerText; model.Position = tdNodes[3].InnerText; model.GamesPlayed = ConvertStringToInt(tdNodes[4].InnerText); model.Hits = ConvertStringToInt(tdNodes[5].InnerText); model.BlockedShots = ConvertStringToInt(tdNodes[6].InnerText); model.MissedShots = ConvertStringToInt(tdNodes[7].InnerText); model.Giveaways = ConvertStringToInt(tdNodes[8].InnerText); model.Takeaways = ConvertStringToInt(tdNodes[9].InnerText); model.FaceoffsWon = ConvertStringToInt(tdNodes[10].InnerText); model.FaceoffsLost = ConvertStringToInt(tdNodes[11].InnerText); model.FaceoffsTaken = ConvertStringToInt(tdNodes[12].InnerText); model.FaceoffWinPercentage = Convert.ToDouble(tdNodes[13].InnerText); model.PercentageOfTeamFaceoffsTaken = Convert.ToDouble(tdNodes[14].InnerText); model.Shots = ConvertStringToInt(tdNodes[15].InnerText); model.Goals = ConvertStringToInt(tdNodes[16].InnerText); model.ShootingPercentage = Convert.ToDouble(tdNodes[17].InnerText); return(model); }
private static Nhl_Players_Bio_Goalie MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType, int year) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Players_Bio_Goalie model = new Nhl_Players_Bio_Goalie(); model.NhlSeasonType = nhlSeasonType; model.Year = year; model.Number = ConvertStringToInt(tdNodes[0].InnerText); model.Name = tdNodes[1].InnerText; model.Team = tdNodes[2].InnerText; model.Position = "G"; model.DateOfBirth = Convert.ToDateTime(tdNodes[3].InnerText.Replace("'", "/")); model.BirthCity = tdNodes[4].InnerText; model.StateOrProvince = tdNodes[5].InnerText; model.BirthCountry = tdNodes[6].InnerText; model.HeightInches = ConvertStringToInt(tdNodes[7].InnerText); model.WeightLbs = ConvertStringToInt(tdNodes[8].InnerText); model.Catches = tdNodes[9].InnerText; model.Rookie = tdNodes[10].InnerText; model.DraftYear = ConvertStringToInt(tdNodes[11].InnerText); model.DraftRound = ConvertStringToInt(tdNodes[12].InnerText); model.DraftOverall = ConvertStringToInt(tdNodes[13].InnerText); model.GamesPlayed = ConvertStringToInt(tdNodes[14].InnerText); model.Wins = ConvertStringToInt(tdNodes[15].InnerText); model.Losses = ConvertStringToInt(tdNodes[16].InnerText); model.OTSOLosses = ConvertStringToInt(tdNodes[17].InnerText); model.GAA = Convert.ToDouble(tdNodes[18].InnerText); model.SavePercentage = Convert.ToDouble(tdNodes[19].InnerText); model.Shutouts = ConvertStringToInt(tdNodes[20].InnerText); return model; }
private static Nhl_Games_Rtss MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Games_Rtss model = new Nhl_Games_Rtss(); model.NhlSeasonType = nhlSeasonType; model.Date = Convert.ToDateTime(tdNodes[0].InnerText.Replace("'", "/")); model.Year = NhlModelHelper.GetSeason(model.Date).Item2; model.GameNumber = Convert.ToInt32(tdNodes[1].InnerText); model.Visitor = tdNodes[2].InnerText; model.Home = tdNodes[3].InnerText; model.RosterLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[4]); model.GameLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[5]); model.EventsLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[6]); model.FaceOffsLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[7]); model.PlayByPlayLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[8]); model.ShotsLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[9]); model.HomeToiLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[10]); model.VistorToiLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[11]); model.ShootoutLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[12]); return model; }
private static Nhl_Games_Summary MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Games_Summary model = new Nhl_Games_Summary(); model.NhlSeasonType = nhlSeasonType; model.Date = Convert.ToDateTime(tdNodes[0].InnerText.Replace("'", "/")); model.Year = NhlModelHelper.GetSeason(model.Date).Item2; model.Visitor = tdNodes[1].InnerText; model.VisitorScore = ConvertStringToInt(tdNodes[2].InnerText); model.Home = tdNodes[3].InnerText; model.HomeScore = ConvertStringToInt(tdNodes[4].InnerText); model.OS = tdNodes[5].InnerText; model.WGoalie = tdNodes[6].InnerText; model.WGoal = tdNodes[7].InnerText; model.VisitorShots = ConvertStringToInt(tdNodes[8].InnerText); model.VisitorPPGF = ConvertStringToInt(tdNodes[9].InnerText); model.VisitorPPOpp = ConvertStringToInt(tdNodes[10].InnerText); model.VisitorPIM = ConvertStringToInt(tdNodes[11].InnerText); model.HomeShots = ConvertStringToInt(tdNodes[12].InnerText); model.HomePPGF = ConvertStringToInt(tdNodes[13].InnerText); model.HomePPOpp = ConvertStringToInt(tdNodes[14].InnerText); model.HomePIM = ConvertStringToInt(tdNodes[15].InnerText); model.Attendance = ConvertStringToInt(tdNodes[16].InnerText.Replace(",", String.Empty)); return(model); }
private static Nhl_Games_Rtss MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Games_Rtss model = new Nhl_Games_Rtss(); model.NhlSeasonType = nhlSeasonType; model.Date = Convert.ToDateTime(tdNodes[0].InnerText.Replace("'", "/")); model.Year = NhlModelHelper.GetSeason(model.Date).Item2; model.GameNumber = Convert.ToInt32(tdNodes[1].InnerText); model.Visitor = tdNodes[2].InnerText; model.Home = tdNodes[3].InnerText; model.RosterLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[4]); model.GameLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[5]); model.EventsLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[6]); model.FaceOffsLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[7]); model.PlayByPlayLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[8]); model.ShotsLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[9]); model.HomeToiLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[10]); model.VistorToiLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[11]); model.ShootoutLink = NhlGamesRtss.ParseLinkFromTd(tdNodes[12]); return(model); }
private static Nhl_Players_Rtss_Skater MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType, int year) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Players_Rtss_Skater model = new Nhl_Players_Rtss_Skater(); model.NhlSeasonType = nhlSeasonType; model.Year = year; model.Number = 0; model.Name = tdNodes[1].InnerText; model.Team = tdNodes[2].InnerText; model.Position = tdNodes[3].InnerText; model.GamesPlayed = ConvertStringToInt(tdNodes[4].InnerText); model.Hits = ConvertStringToInt(tdNodes[5].InnerText); model.BlockedShots = ConvertStringToInt(tdNodes[6].InnerText); model.MissedShots = ConvertStringToInt(tdNodes[7].InnerText); model.Giveaways = ConvertStringToInt(tdNodes[8].InnerText); model.Takeaways = ConvertStringToInt(tdNodes[9].InnerText); model.FaceoffsWon = ConvertStringToInt(tdNodes[10].InnerText); model.FaceoffsLost = ConvertStringToInt(tdNodes[11].InnerText); model.FaceoffsTaken = ConvertStringToInt(tdNodes[12].InnerText); model.FaceoffWinPercentage = Convert.ToDouble(tdNodes[13].InnerText); model.PercentageOfTeamFaceoffsTaken = Convert.ToDouble(tdNodes[14].InnerText); model.Shots = ConvertStringToInt(tdNodes[15].InnerText); model.Goals = ConvertStringToInt(tdNodes[16].InnerText); model.ShootingPercentage = Convert.ToDouble(tdNodes[17].InnerText); return model; }
/// <summary> /// Gets the html table of a page specified by the xpath query /// </summary> protected virtual HtmlNode ParseHtmlTableFromPage(int year, NhlSeasonType nhlSeasonType, int page) { string pageHtml = this.GetFullHtmlPage(year, nhlSeasonType, page); HtmlDocument htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(pageHtml); string tableXPathQuery = @"//table[@class='data stats']"; HtmlNode tableNode = htmlDocument.DocumentNode.SelectSingleNode(tableXPathQuery); return(tableNode); }
private static Nhl_Players_Bio_Skater MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType, int year) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Players_Bio_Skater model = new Nhl_Players_Bio_Skater(); model.NhlSeasonType = nhlSeasonType; model.Year = year; model.Number = ConvertStringToInt(tdNodes[0].InnerText); model.Name = tdNodes[1].InnerText; model.Team = tdNodes[2].InnerText; model.Position = tdNodes[3].InnerText; model.DateOfBirth = Convert.ToDateTime(tdNodes[4].InnerText.Replace("'", "/")); model.BirthCity = tdNodes[5].InnerText; model.StateOrProvince = tdNodes[6].InnerText; model.BirthCountry = tdNodes[7].InnerText; model.HeightInches = ConvertStringToInt(tdNodes[8].InnerText); model.WeightLbs = ConvertStringToInt(tdNodes[9].InnerText); model.Shoots = tdNodes[10].InnerText; model.DraftYear = ConvertStringToInt(tdNodes[11].InnerText); model.DraftRound = ConvertStringToInt(tdNodes[12].InnerText); model.DraftOverall = ConvertStringToInt(tdNodes[13].InnerText); model.Rookie = tdNodes[14].InnerText; model.GamesPlayed = ConvertStringToInt(tdNodes[15].InnerText); model.Goals = ConvertStringToInt(tdNodes[16].InnerText); model.Assists = ConvertStringToInt(tdNodes[17].InnerText); model.Points = ConvertStringToInt(tdNodes[18].InnerText); model.PlusMinus = ConvertStringToInt(tdNodes[19].InnerText); model.PIM = ConvertStringToInt(tdNodes[20].InnerText); string toi = tdNodes[21].InnerText; string[] toiParts = toi.Split(':'); if (toiParts.Length == 2) { int toiMinutes = ConvertStringToInt(toiParts[0]); int toiSeconds = ConvertStringToInt(toiParts[1]); model.ToiSecondsPerGame = toiMinutes * 60 + toiSeconds; } else if (toiParts.Length == 1) { int toiSeconds = ConvertStringToInt(toiParts[0]); model.ToiSecondsPerGame = toiSeconds; } else { model.ToiSecondsPerGame = 0; } return(model); }
private static Nhl_Players_Bio_Skater MapHtmlRowToModel(HtmlNode row, NhlSeasonType nhlSeasonType, int year) { HtmlNodeCollection tdNodes = row.SelectNodes(@"./td"); Nhl_Players_Bio_Skater model = new Nhl_Players_Bio_Skater(); model.NhlSeasonType = nhlSeasonType; model.Year = year; model.Number = ConvertStringToInt(tdNodes[0].InnerText); model.Name = tdNodes[1].InnerText; model.Team = tdNodes[2].InnerText; model.Position = tdNodes[3].InnerText; model.DateOfBirth = Convert.ToDateTime(tdNodes[4].InnerText.Replace("'", "/")); model.BirthCity = tdNodes[5].InnerText; model.StateOrProvince = tdNodes[6].InnerText; model.BirthCountry = tdNodes[7].InnerText; model.HeightInches = ConvertStringToInt(tdNodes[8].InnerText); model.WeightLbs = ConvertStringToInt(tdNodes[9].InnerText); model.Shoots = tdNodes[10].InnerText; model.DraftYear = ConvertStringToInt(tdNodes[11].InnerText); model.DraftRound = ConvertStringToInt(tdNodes[12].InnerText); model.DraftOverall = ConvertStringToInt(tdNodes[13].InnerText); model.Rookie = tdNodes[14].InnerText; model.GamesPlayed = ConvertStringToInt(tdNodes[15].InnerText); model.Goals = ConvertStringToInt(tdNodes[16].InnerText); model.Assists = ConvertStringToInt(tdNodes[17].InnerText); model.Points = ConvertStringToInt(tdNodes[18].InnerText); model.PlusMinus = ConvertStringToInt(tdNodes[19].InnerText); model.PIM = ConvertStringToInt(tdNodes[20].InnerText); string toi = tdNodes[21].InnerText; string[] toiParts = toi.Split(':'); if (toiParts.Length == 2) { int toiMinutes = ConvertStringToInt(toiParts[0]); int toiSeconds = ConvertStringToInt(toiParts[1]); model.ToiSecondsPerGame = toiMinutes * 60 + toiSeconds; } else if (toiParts.Length == 1) { int toiSeconds = ConvertStringToInt(toiParts[0]); model.ToiSecondsPerGame = toiSeconds; } else { model.ToiSecondsPerGame = 0; } return model; }
/// <summary> /// Gets a page and returns the full html /// </summary> protected virtual string GetFullHtmlPage(int year, NhlSeasonType nhlSeasonType, int page) { HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(NhlBaseClass.BaseAddress); string relativeAddress = String.Format(this.RelativeUrlFormatString, year, Convert.ToInt32(nhlSeasonType), page); Uri pageUrl = new Uri(relativeAddress, UriKind.Relative); Task <string> response = httpClient.GetStringAsync(pageUrl); string responseString = response.Result; return(responseString); }
/// <summary> /// Gets a list of all the results in a stat category on fromDate and later /// </summary> /// <remarks> /// This method assumes that rows are sorted in descending order by date (newest to oldest). /// /// year defaults to the current year /// fromDate defaults to DateTime.MinValue /// /// </remarks> protected virtual List <HtmlNode> GetResultsForSeasonType([Optional] int year, NhlSeasonType nhlSeasonType, [Optional] DateTime fromDate) { year = NhlModelHelper.SetDefaultYear(year); List <HtmlNode> results = new List <HtmlNode>(); HtmlNode firstPageTableNode = this.ParseHtmlTableFromPage(year, nhlSeasonType, 1); int numberOfResults = NhlBaseClass.GetResultsCount(firstPageTableNode); if (numberOfResults <= 0) { return(results); } int numberOfPages = NhlBaseClass.GetPageCount(firstPageTableNode); // Handle the first page. Go through each row and add it to the list of results. When we encounter a result with a date earlier than fromDate then we stop. List <HtmlNode> firstPageRows = NhlBaseClass.ParseRowsFromTable(firstPageTableNode); foreach (HtmlNode row in firstPageRows) { DateTime resultDate = this.ParseDateFromHtmlRow(row); if (resultDate < fromDate) { return(results); } else { results.Add(row); } } // Now similar code to handle the rest of the pages. Go through each row, add it to the list, stop when we hit a date prior to fromDate. for (int i = 2; i < numberOfPages + 1; i++) { HtmlNode tableNode = this.ParseHtmlTableFromPage(year, nhlSeasonType, i); List <HtmlNode> rows = NhlBaseClass.ParseRowsFromTable(tableNode); foreach (HtmlNode row in rows) { DateTime resultDate = this.ParseDateFromHtmlRow(row); if (resultDate < fromDate) { return(results); } else { results.Add(row); } } } return(results); }
private static List<Nhl_Players_Bio_Goalie> UpdateSeason(int year, NhlSeasonType nhlSeasonType, bool saveToDb) { // Get HTML rows NhlPlayersBioGoalie nhl = new NhlPlayersBioGoalie(); List<HtmlNode> rows = nhl.GetResultsForSeasonType(year, nhlSeasonType); // Parse into a list List<Nhl_Players_Bio_Goalie> results = new List<Nhl_Players_Bio_Goalie>(); foreach (HtmlNode row in rows) { Nhl_Players_Bio_Goalie result = NhlPlayersBioGoalie.MapHtmlRowToModel(row, nhlSeasonType, year); if (null != result) { results.Add(result); } } // Update DB if (saveToDb) { NhlPlayersBioGoalie.AddOrUpdateDb(results); } return results; }
private static List<Nhl_Games_Summary> UpdateSeason(int year, NhlSeasonType nhlSeasonType, DateTime fromDate, bool saveToDb) { // Get HTML rows NhlGamesSummary nhl = new NhlGamesSummary(); List<HtmlNode> rows = nhl.GetResultsForSeasonType(year, nhlSeasonType, fromDate); // Parse into a list List<Nhl_Games_Summary> results = new List<Nhl_Games_Summary>(); foreach (HtmlNode row in rows) { Nhl_Games_Summary result = NhlGamesSummary.MapHtmlRowToModel(row, nhlSeasonType); if (null != result) { results.Add(result); } } // Update DB if (saveToDb) { NhlGamesSummary.AddOrUpdateDb(results); } return results; }
/// <summary> /// Gets the html table of a page specified by the xpath query /// </summary> protected virtual HtmlNode ParseHtmlTableFromPage(int year, NhlSeasonType nhlSeasonType, int page) { string pageHtml = this.GetFullHtmlPage(year, nhlSeasonType, page); HtmlDocument htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(pageHtml); string tableXPathQuery = @"//table[@class='data stats']"; HtmlNode tableNode = htmlDocument.DocumentNode.SelectSingleNode(tableXPathQuery); return tableNode; }
/// <summary> /// Gets a list of all the results in a stat category on fromDate and later /// </summary> /// <remarks> /// This method assumes that rows are sorted in descending order by date (newest to oldest). /// /// year defaults to the current year /// fromDate defaults to DateTime.MinValue /// /// </remarks> protected virtual List<HtmlNode> GetResultsForSeasonType([Optional] int year, NhlSeasonType nhlSeasonType, [Optional] DateTime fromDate) { year = NhlModelHelper.SetDefaultYear(year); List<HtmlNode> results = new List<HtmlNode>(); HtmlNode firstPageTableNode = this.ParseHtmlTableFromPage(year, nhlSeasonType, 1); int numberOfResults = NhlBaseClass.GetResultsCount(firstPageTableNode); if (numberOfResults <= 0) { return results; } int numberOfPages = NhlBaseClass.GetPageCount(firstPageTableNode); // Handle the first page. Go through each row and add it to the list of results. When we encounter a result with a date earlier than fromDate then we stop. List<HtmlNode> firstPageRows = NhlBaseClass.ParseRowsFromTable(firstPageTableNode); foreach (HtmlNode row in firstPageRows) { DateTime resultDate = this.ParseDateFromHtmlRow(row); if (resultDate < fromDate) { return results; } else { results.Add(row); } } // Now similar code to handle the rest of the pages. Go through each row, add it to the list, stop when we hit a date prior to fromDate. for (int i = 2; i < numberOfPages + 1; i++) { HtmlNode tableNode = this.ParseHtmlTableFromPage(year, nhlSeasonType, i); List<HtmlNode> rows = NhlBaseClass.ParseRowsFromTable(tableNode); foreach (HtmlNode row in rows) { DateTime resultDate = this.ParseDateFromHtmlRow(row); if (resultDate < fromDate) { return results; } else { results.Add(row); } } } return results; }
/// <summary> /// Gets a page and returns the full html /// </summary> protected virtual string GetFullHtmlPage(int year, NhlSeasonType nhlSeasonType, int page) { HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(NhlBaseClass.BaseAddress); string relativeAddress = String.Format(this.RelativeUrlFormatString, year, Convert.ToInt32(nhlSeasonType), page); Uri pageUrl = new Uri(relativeAddress, UriKind.Relative); Task<string> response = httpClient.GetStringAsync(pageUrl); string responseString = response.Result; return responseString; }