public static void GetGames(bool allseason = true) { var teamService = new TeamService(); var maxPage = 2; // if allseason is true, get all season games. Else get only the first 2 pages of the schedule. if (allseason == true) { var web = new HtmlWeb(); var document = web.Load("http://www.nhl.com/stats/game"); maxPage = ParseNhlBoxscoresHelpers.GetMaxPage(document); } for (int i = 1; i <= maxPage; i++) { var w = new HtmlWeb(); var url = "http://www.nhl.com/ice/gamestats.htm?fetchKey=20152ALLSATALL&viewName=summary&sort=gameDate&pg=" + i; var schedulePage = w.Load(url); var trlist = schedulePage.DocumentNode.QuerySelectorAll("table.data.stats>tbody>tr"); foreach (var tr in trlist) { String winningGoalie = tr.QuerySelector("td:nth-child(7)").InnerText; if (winningGoalie != "") // no wining goalie -> game in progress { try { Game game = new Game(); var link = tr.QuerySelector("td>a"); String [] datetext = link.InnerText.Replace("'", "").Split(' '); var linkText = link.GetAttributeValue("href", "ERROR"); string[] lines = Regex.Split(linkText, "http://www.nhl.com/scores/htmlreports/20142015/GS0"); String gameid = lines[1].TrimEnd('.', 'H', 'T', 'M'); // Set game id game.NhlGameId = gameid; // Set game date String stringToParse = datetext[1] + " " + datetext[0] + " 20" + datetext[2]; game.Date = DateTime.Parse(stringToParse); // Set visitor team var visitorText = tr.QuerySelector("td:nth-child(2)").InnerText; game.VisitorTeam = visitorText; game.VisitorTeamId = teamService.GetTeam(visitorText).Id; // Set visitor score game.VisitorScore = Convert.ToInt32(tr.QuerySelector("td:nth-child(3)").InnerText); // Set home team var homeText = tr.QuerySelector("td:nth-child(4)").InnerText; game.HomeTeam = homeText; game.HomeTeamId = teamService.GetTeam(homeText).Id; // Set home team score game.HomeScore = Convert.ToInt32(tr.QuerySelector("td:nth-child(5)").InnerText); db.Games.Add(game); logger.Info("Saving game # " + gameid); //ParseEventSummary.ProcessEventSummary(game); } catch (Exception e) { logger.Error("Cannot get game information for schedule row"); } } } } db.SaveChanges(); }
public static void GetPlayers() { var web = new HtmlWeb(); var document = web.Load("http://www.nhl.com/stats/player?fetchKey=20152ALLSASAll&viewName=summary&sort=points&gp=1&pg=1"); var maxPage = ParseNhlBoxscoresHelpers.GetMaxPage(document); for (int i = 1; i <= maxPage; i++) { var w = new HtmlWeb(); var url = "http://www.nhl.com/stats/player?fetchKey=20152ALLSASAll&viewName=summary&sort=points&gp=1&pg=" + i; var schedulePage = w.Load(url); var trlist = schedulePage.DocumentNode.QuerySelectorAll("table.data.stats>tbody>tr"); foreach (var tr in trlist) { try { // Get Nhl.com ID var playerUrl = tr.QuerySelector("td:nth-child(2) > a").GetAttributeValue("href", "ERROR"); var splittedPlayerUrl = playerUrl.Split('='); var nhlId = ConvertStringToInt(splittedPlayerUrl[1]); // Get all other values var name = tr.QuerySelector("td:nth-child(2) > a").InnerText; var team = tr.QuerySelector("td:nth-child(3) > a").InnerText; var teamId = teamService.GetTeam(team).Id; var position = tr.QuerySelector("td:nth-child(4)").InnerText; var gamesPlayed = ConvertStringToInt(tr.QuerySelector("td:nth-child(5)").InnerText); var goals = ConvertStringToInt(tr.QuerySelector("td:nth-child(6)").InnerText); var assists = ConvertStringToInt(tr.QuerySelector("td:nth-child(7)").InnerText); var points = ConvertStringToInt(tr.QuerySelector("td:nth-child(8)").InnerText); var plusMinus = ConvertStringToInt(tr.QuerySelector("td:nth-child(9)").InnerText); var pim = ConvertStringToInt(tr.QuerySelector("td:nth-child(10)").InnerText); // Update if player already exists Player player = db.Players.SingleOrDefault(p => p.NhlId == nhlId); //b => b.BookNumber == bookNumber if (player != null) { player.TeamId = teamId; player.Position = position; player.GamesPlayed = gamesPlayed; player.Goals = goals; player.Assists = assists; player.Points = points; player.PlusMinus = plusMinus; player.Pim = pim; //db.SaveChanges(); logger.Info("Updated player: " + player.Name); } // Create new player else { Player newplayer = new Player(); newplayer.Name = name; newplayer.NhlId = nhlId; newplayer.TeamId = teamId; newplayer.Position = position; newplayer.GamesPlayed = gamesPlayed; newplayer.Goals = goals; newplayer.Assists = assists; newplayer.Points = points; newplayer.PlusMinus = plusMinus; newplayer.Pim = pim; // Date of birth newplayer.Birthdate = GetPlayerBirthdate(Convert.ToInt32(nhlId)); db.Players.Add(newplayer); logger.Info("Adding player: " + newplayer.Name); } } catch (Exception e) { logger.Error("Cannot get player information"); } } } db.SaveChanges(); }