R/mfl_players.R

Defines functions .mfl_players_template mfl_players

Documented in mfl_players

#' MFL players library
#'
#' A cached table of MFL players. Will store in memory for each session!
#' (via memoise in zzz.R)
#'
#' @param conn optionally, pass in a conn object generated by ff_connect to receive league-specific custom players
#'
#' @examples
#' \donttest{
#' try({ # try only shown here because sometimes CRAN checks are weird
#'   player_list <- mfl_players()
#'   dplyr::sample_n(player_list, 5)
#' }) # end try
#' }
#'
#' @return a dataframe containing all ~2000+ players in the MFL database
#'
#' @export

mfl_players <- function(conn = NULL) {
  if (!is.null(conn) && !inherits(conn, "mfl_conn")) {
    stop("conn must be generated by 'mfl_connect()' and have type 'mfl_conn'")
  }

  if (is.null(conn)) {
    conn <- mfl_connect(.fn_choose_season())
  }

  df_players <- conn %>%
    mfl_getendpoint("players", DETAILS = 1) %>%
    purrr::pluck("content", "players", "player") %>%
    tibble::tibble() %>%
    tidyr::unnest_wider(1) %>%
    dplyr::mutate_at(
      "birthdate",
      ~ as.numeric(.x) %>%
        .as_datetime() %>%
        .as_date()
    ) %>%
    dplyr::mutate(
      age = round(as.numeric(Sys.Date() - .data$birthdate) / 365.25, 1),
      draft_year = as.integer(.data$draft_year)
    ) %>%
    dplyr::select(
      dplyr::any_of(c(
        "player_id" = "id",
        "player_name" = "name",
        "pos" = "position",
        "age",
        "team",
        "status"
      )),
      dplyr::starts_with("draft_"),
      dplyr::ends_with("_id"),
      dplyr::everything()
    )

  df_players <- dplyr::bind_rows(.mfl_players_template(), df_players)

  return(df_players)
}


.mfl_players_template <- function(){
  tibble::tibble(
    player_id = character(0),
    player_name = character(0),
    pos = character(0),
    age = numeric(0),
    team = character(0),
    status = character(0),
    draft_year = integer(0),
    draft_team = character(0),
    draft_round = character(0),
    draft_pick = character(0),
    stats_global_id = character(0),
    fleaflicker_id = character(0),
    stats_id = character(0),
    cbs_id = character(0),
    sportsdata_id = character(0),
    rotowire_id = character(0),
    rotoworld_id = character(0),
    espn_id = character(0),
    nfl_id = character(0),
    jersey = character(0),
    height = character(0),
    weight = character(0),
    college = character(0),
    twitter_username = character(0),
    birthdate = as.Date(character(0))
  )
}
dynastyprocess/ffscrapr documentation built on June 4, 2024, 1 p.m.