コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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;
        }
コード例 #7
0
ファイル: NhlGamesRtss.cs プロジェクト: jrfitzgi/sportsdata
        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;
        }
コード例 #8
0
        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);
        }
コード例 #9
0
ファイル: NhlGamesRtss.cs プロジェクト: jrfitzgi/sportsdata
        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);
        }
コード例 #10
0
        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;
        }
コード例 #11
0
ファイル: NhlBaseClass.cs プロジェクト: jrfitzgi/sportsdata
        /// <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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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;
        }
コード例 #14
0
ファイル: NhlBaseClass.cs プロジェクト: jrfitzgi/sportsdata
        /// <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);
        }
コード例 #15
0
ファイル: NhlBaseClass.cs プロジェクト: jrfitzgi/sportsdata
        /// <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);
        }
コード例 #16
0
        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;
        }
コード例 #17
0
        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;
        }
コード例 #18
0
ファイル: NhlBaseClass.cs プロジェクト: jrfitzgi/sportsdata
        /// <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;
        }
コード例 #19
0
ファイル: NhlBaseClass.cs プロジェクト: jrfitzgi/sportsdata
        /// <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;
        }
コード例 #20
0
ファイル: NhlBaseClass.cs プロジェクト: jrfitzgi/sportsdata
        /// <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;
        }