R/parse_pointsbet_data.R

Defines functions parse_pb_game_lines parse_pb_prop parse_pointsbet_data

parse_pointsbet_data <- function(pointsbet_data, sport = NULL, prop = FALSE, game_lines = FALSE, exclude_live = TRUE, exclude_alts = FALSE) {

  # loop through the pointsbet events to extract props
  output_list <- list()
  for (game_event in pointsbet_data) {

    # nuke live games if specified, which is the default
    if (exclude_live) {
      status <- game_event$isLive
      if (status == TRUE) next
    }

    # check for fixed odds markets, skip if they're not there
    if (!'fixedOddsMarkets' %in% names(game_event)) next
    fixed_odds_markets <- game_event$fixedOddsMarkets
    event_names <- fixed_odds_markets$eventName

    # get game lines
    if (game_lines == TRUE) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_game_lines(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names, exclude_alts = exclude_alts)
    }

    # now extract correct props
    if (prop %in% c('first team to score', 'ftts')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                       prop_regex = 'Who Scores Point 1')
    }
    if (prop %in% c('first shot points')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = '1st Field Goal')
    }
    if (prop %in% c('game made first fg')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Will the First Attempted Field Goal be Made?')
    }
    if (prop %in% c('game go to overtime', 'game go to ot')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Will There Be Overtime?')
    }
    if (prop %in% c('first player to score', 'fpts')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'First Basket')
    }



    # TODO: this is a relic of pb's power hour before gamestarts; if thats necessary again we'll update fpts with section
    # if (prop %in% c('first player to score', 'fpts')) {
    #   power_hour <- try(parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
    #                                   prop_regex = '^Power Hour First Basket$'))
    #   if ('try-error' %in% class(power_hour) | nrow(power_hour) == 0) {
    #     output_list[[length(output_list) + 1]] <-
    #       parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
    #                     prop_regex = '^First Basket$')
    #   } else {
    #     output_list[[length(output_list) + 1]] <- power_hour
    #   }
    # }
    if (prop %in% c('player pts alt', 'player points alt')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                       prop_regex = 'Pick Your Own Points')
    }
    if (prop %in% c('player pts ou', 'player points ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                       prop_regex = '[a-z] Points Over/Under$')
    }
    if (prop %in% c('player rebs alt', 'player rebounds alt')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                       prop_regex = 'Pick Your Own Rebounds')
    }
    if (prop %in% c('player rebs ou', 'player rebounds ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                       prop_regex = '[a-z] Rebounds Over/Under$')
    }
    if (prop %in% c('player asts alt', 'player assists alt')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                       prop_regex = 'Pick Your Own Assists')
    }
    if (prop %in% c('player asts ou', 'player assists ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                       prop_regex = '[a-z] Assists Over/Under$')
    }
    if (prop %in% c('player 3pts alt', 'player three-pointers alt')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                       prop_regex = 'Pick Your Own Made Threes')
    }
    if (prop %in% c('player 3pts ou', 'player three-pointers ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                       prop_regex = '[a-z] Threes Over/Under$')
    }
    if (prop %in% c('player to hit home run', 'player to hit hr')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Player To Hit [Aa] Home Run')
    }
    if (prop %in% c('player strikeouts ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Strikeouts Over/Under$')
    }
    if (prop %in% c('player strikeouts alt')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Pick Your Own - Pitcher Strikeouts')
    }
    if (prop %in% c('player total bases alt')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Pick Your Own - Player Total Bases')
    }
    if (prop %in% c('player hits alt')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Pick Your Own - Player Hits')
    }
    if (prop %in% c('player pts+reb+ast ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Pts \\+ Rebs \\+ Asts Over/Under')
    }
    if (prop %in% c('player pts+reb ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Points \\+ Rebounds Over/Under')
    }
    if (prop %in% c('player pts+ast ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Points \\+ Assists Over/Under')
    }
    if (prop %in% c('player reb+ast ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Assists \\+ Rebounds Over/Under')
    }
    if (prop %in% c('player double double')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Double-Double')
    }
    if (prop %in% c('player triple double')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Triple-Double')
    }
    if (prop %in% c('player first td')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = '^First Touchdown Scorer$')
    }
    if (prop %in% c('player any td')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = '^Anytime Touchdown Scorer$')
    }
    if (prop %in% c('player pass atts ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Pass Attempts$')
    }
    if (prop %in% c('player pass yds ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Passing Yards$')
    }
    if (prop %in% c('player pass yds tiers')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Quarterback To Get')
    }

    if (prop %in% c('player pass tds ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Passing Touchdowns$')
    }
    if (prop %in% c('player rec yds ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Receiving Yards$')
    }
    if (prop %in% c('player rush yds ou')) {
      output_list[[length(output_list) + 1]] <-
        parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names,
                      prop_regex = 'Rushing Yards$')
    }


  }
  # if output_list is empty, error, else return as a data.frame
  if (!'output_list' %in% ls()) stop('no pointsbet ', prop, ' props returned')
  if (length(output_list) == 0 & game_lines == FALSE) stop('no pointsbet ', prop, ' props returned')
  if (length(output_list) == 0 & game_lines == TRUE) stop('no pointsbet game lines returned')

  output_df <- dplyr::bind_rows(output_list)
  return(output_df)
}


parse_pb_prop <- function(game_event, fixed_odds_markets, event_names, prop_name = NULL, prop_regex = NULL) {
  if (!is.null(prop_name)) {
    elements <- which(event_names == prop_name)
  } else {
    elements <- which(grepl(prop_regex, event_names))
  }
  selected_markets <- fixed_odds_markets[elements, ]
  outcomes <- selected_markets$outcomes
  output_df <- as.data.frame(outcomes)
  if (nrow(output_df) == 0) return()
  output_df$matchup <- game_event$name
  output_df$tipoff <- game_event$startsAt

  return(output_df)
}

parse_pb_game_lines <- function(game_event, fixed_odds_markets, event_names, exclude_alts) {
  if (exclude_alts) {
    game_lines <- c('Point Spread', 'Moneyline', 'Total')
  } else {
    game_lines <- c('Point Spread', 'Moneyline', 'Total', 'Pick Your Own Line', 'Alternate Totals')
  }

  main_output_list <- list()
  for (i in game_lines) {
    mo <- try(parse_pb_prop(game_event = game_event, fixed_odds_markets = fixed_odds_markets, event_names = event_names, prop_name = i))
    if ('try-error' %in% class(mo)) next
    main_output_list[[length(main_output_list) + 1]] <- mo
  }
  output_df <- dplyr::bind_rows(main_output_list)

  return(output_df)


}
jimtheflash/betfinder documentation built on Dec. 6, 2023, 5:58 a.m.