R/get_team_game_log.R

#' @title Team Game Logs
#' @description gets team game logs from nba api
#' @keywords nba.com api team game logs
#' @importFrom magrittr %>%
#' @export get_team_game_log_stats
#' @export get_team_game_log_score
#' @export get_team_game_logs_multiple_teams
#' @examples
#' get_team_game_log()
#'

team_ids <- c('1610612737','1610612738','1610612751','1610612766','1610612741','1610612739',
              '1610612742','1610612743','1610612765','1610612744','1610612745','1610612754',
              '1610612746','1610612747','1610612763','1610612748','1610612749','1610612750',
              '1610612740','1610612752','1610612760','1610612753','1610612755','1610612756',
              '1610612757','1610612758','1610612759','1610612761','1610612762','1610612764')

team_codes <- c('ATL','BOS','BKN','CHA','CHI','CLE','DAL','DEN','DET','GSW','HOU','IND',
                'LAC','LAL','MEM','MIA','MIL','MIN','NOP','NYK','OKC','ORL','PHI','PHX',
                'POR','SAC','SAS','TOR','UTA','WAS')

code_id_df <- data.frame(team_code = team_codes, team_id = team_ids, stringsAsFactors = F)

get_team_game_log_stats <- function(team_id, season, season_type = 'Regular%20Season',
                              base_url = 'https://stats.nba.com/stats/teamgamelog?') {

  game_log_url <- paste0(base_url,
                         'TeamID=', team_id,
                         '&Season=', season,
                         '&SeasonType=', season_type)

  print(game_log_url)

  game_log_json <-
    curl::curl(game_log_url) %>%
    jsonlite::fromJSON()

  game_log_df <- data.frame(game_log_json$resultSets$rowSet[[1]], stringsAsFactors = F)
  names(game_log_df) = tolower(game_log_json$resultSets$headers[[1]])

  return(game_log_df)

}

get_team_game_log_score <- function(team_id, season, season_type = 'Regular%20Season',
                                         base_url = 'https://stats.nba.com/stats/teamgamelog?') {

  game_log_df <- get_team_game_log_stats(team_id = team_id, season = season)

  game_log_df <- game_log_df %>%
    tidyr::separate(matchup, c('col1', 'opp_code'), sep = "([\\@\\.])") %>%
    dplyr::select(team_id, game_id, game_date, opp_code, pts) %>%
    dplyr::mutate(opp_code = stringr::str_trim(opp_code),
                  opp_pts = NA) %>%
    dplyr::inner_join(code_id_df, by=c('opp_code'='team_code')) %>%
    dplyr::rename(team_id = team_id.x, team_id_opp = team_id.y) %>%
    dplyr::inner_join(code_id_df, by=c('team_id')) %>%
    dplyr::select(team_code, team_id, game_date, game_id, opp_code, team_id_opp, pts, opp_pts)

  for (i in 1:nrow(game_log_df)) {
    opp_df <- get_team_game_log_stats(team_id = game_log_df$team_id_opp[i], season = season)
    game_row <- opp_df %>%
      dplyr::filter(game_id==game_log_df$game_id[i])
    game_log_df$opp_pts[i] <- game_row$pts
    print(game_log_df$game_date[i])
    Sys.sleep(runif(1, min = 0.5, max = 2))
  }

  return (game_log_df)
}

get_team_game_logs_multiple_teams <- function(team_ids, season, season_type = 'Regular%Season') {

  selected_team_df <- setNames(data.frame(matrix(ncol = 8, nrow = 0)),
                      c('team_code', 'team_id', 'game_date', 'game_id',
                        'opp_code','team_id_opp', 'pts', 'opp_pts'))

  for (i in 1:length(team_ids)) {

    curr_team_df <- get_team_game_log_score(team_id = team_ids[i], season = season, season_type = season_type)

    selected_team_df <- selected_team_df %>%
      dplyr::bind_rows(curr_team_df)

    print('FINISHED FOR')
    print(team_ids[i])

  }

  selected_team_df <- selected_team_df %>%
    dplyr::mutate(pts = as.numeric(pts), opp_pts = as.numeric(opp_pts))

  return(selected_team_df)
}
emilykuehler/basketballstatsR documentation built on May 31, 2019, 10:01 a.m.