--- title: "Retrieving team data from the NHL API" author: "Jozef Hajnala" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Retrieving team data from the NHL API} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ``` # High-level team APIs The high-level team APIs intend to provide convenient functionality used by most users. Each function from the teams API returns a data frame with the requested data processed to serve common purposes. Note that while some of the showcased examples use the `dplyr` package to manipulate the data, the `nhlapi` package itself does not import it and the user is free to use whichever methods to manipulate the data. ```{r} library(nhlapi) ``` ## Team information ```{r} # Get meta information on all teams nhl_teams() ``` # Current rosters ```{r} # Get current rosters for all teams rosters <- nhl_teams_rosters() # View the current roster for the Devils roster_devils <- rosters %>% filter(name == "New Jersey Devils") %>% pull(roster.roster) %>% # This is still a list, extract the first element first() roster_devils ``` # Rosters for past seasons ```{r} # Get rosters for a specific season, all teams rosters_1993 <- nhl_teams_rosters(seasons = 1993) # Select the Quebec Nordiques roster_nordiques_1993 <- rosters_1993 %>% filter(name == "Quebec Nordiques") %>% pull(roster.roster) ``` # Multiple seasons rosters ```{r} # Works with multiple seasons rosters_1993_1994 <- nhl_teams_rosters( seasons = c(1993:1995) ) # It is a bit nicer though (for traffic) to get less data # and make more specific requests - e.g. only get the Nordiques rosters_1993_1994 <- nhl_teams_rosters( teamIds = 32, seasons = c(1993:1995) ) ``` # Upcoming and previous games ## Details on previous game for teams ```{r} # Previous game for all teams nhl_teams_shedule_previous() # Previous game for selected teams nhl_teams_shedule_previous(c(1,3,5)) ``` ## Exploring the full game details There is a lot of information about games in the API, for instance, full details of the previous of the Devils: ```{r} # First get the API URL for the relevant game game_url <- nhl_teams_shedule_previous(1) %>% extract2("previousGameSchedule.dates") %>% first() %>% extract2("games") %>% first() %>% extract2("link") # Now use `nhl_get_data()` to retrieve the data game_data <- file.path("https://statsapi.web.nhl.com", game_url) %>% nhl_get_data() # This is a very complex nested endpoint, for instance, # look at the recorded events in the game game_plays <- game_data %>% first() %>% extract2("liveData") %>% extract2("plays") %>% extract2("allPlays") %>% as_tibble() game_plays ``` ## Details on upcoming game for teams ```{r} # Next game for all teams nhl_teams_shedule_next() # Next game for selected teams nhl_teams_shedule_next(c(1,3,5)) ``` # Team Stats per season ```{r} # All teams, current season nhl_teams_stats() ``` ```{r} # Selected teams, selected seasons nhl_teams_stats(1, 2005:2006) ``` ## Investigate the returned object ```{r} # Get 2 seasons for the Devils: devils_stats <- nhl_teams_stats(1, 2005:2006) # Look at the teamStats object for the first of them # Requires `dplyr` attached using library devils_stats %>% extract2("teamStats") %>% first() %>% extract2("splits") %>% first() %>% slice(1) %>% select(stat.gamesPlayed, stat.wins, stat.losses) ```