parse_draftkings_data <- function(draftkings_data, sport, prop = FALSE, game_lines = FALSE, exclude_live = TRUE, exclude_alts = TRUE) {
output_list <- list()
for (e in names(draftkings_data)) {
game_event <- draftkings_data[[e]]
# nuke live games if specified, which is the default
if (exclude_live) {
status <- game_event$event$eventStatus$state
if (status == "STARTED") next
}
# get matchup name and start time
matchup <- game_event$event$name
tipoff <- game_event$event$startDate
# TODO: HANDLE THIS IN THE NEXT LAYER, NOT BETFINDER IF POSSIBLE
# #### JUMP PAST FUTURE GAMES FOR NOW
# if (as.Date(tipoff) > as.Date(Sys.Date()) + 1) next
# break out the offer markets, always necessary
offer_categories <- game_event$eventCategories
offer_category_names <- unlist(lapply(offer_categories, '[[', 'name'))
if (game_lines == TRUE) {
if (sport %in% c('nba', 'ncaaf', 'nfl', 'mlb')) {
output_list[[length(output_list) + 1]] <- parse_dk_game_lines(offer_categories, exclude_alts = exclude_alts, matchup = matchup, tipoff = tipoff)
}
}
if (is.null(prop)) {
next
}
# nba ---------------------------------------------------------------------
if (prop %in% c('first team to score', 'ftts')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Quick Hits', market_subgroup = "Team to Score First FG", offer_label = "Team to Score the First Field Goal", matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('fpts by team')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Quick Hits', market_subgroup = 'First FG - Team', offer_regex = '[a-z] First Field Goal Scorer', matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('game go to overtime', 'game go to ot')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Game Props', market_subgroup = 'To go to OT', market_name = 'Overtime', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('first player to score', 'fpts')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Quick Hits', market_subgroup = 'First Field Goal', offer_label = 'First Field Goal', matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('ftts shot points')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Quick Hits', market_subgroup = "Exact First FG - Team", offer_label = "First Field Goal Type Exact", matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('first shot points')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Quick Hits', market_subgroup = "First FG - Type", offer_label = "First Field Goal Type", matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('fpts shot points')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Quick Hits', market_subgroup = "First FG - Exact", offer_label = "First Field Goal Scorer Exact", matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('fpts shot points by team')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Quick Hits', market_subgroup = "First FG - Exact", offer_regex = "[a-z] First Field Goal Scorer", matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player points ou', 'player pts ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Points', prop_regex = ' Points$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player assists ou', 'player asts ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Assists', prop_regex = ' Assists$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player rebounds ou', 'player rebs ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Rebounds', prop_regex = ' Rebounds$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player pts-rebs-asts ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Pts, Reb & Ast', prop_regex = ' Points \\+ Assists \\+ Rebounds$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player pts-rebs ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Pts + Reb', prop_regex = ' Points \\+ Rebounds$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player pts-asts ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Pts + Ast', prop_regex = ' Points \\+ Assists$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player rebs-asts ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Ast + Reb', prop_regex = ' Assists \\+ Rebounds$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player three-pointers ou', 'player 3pts ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Threes', prop_regex = ' Three Pointers Made$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player blocks ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Blocks', prop_regex = ' Blocks$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player steals ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Steals', prop_regex = ' Steals$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player turnovers ou', 'player to ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Turnovers', prop_regex = ' Turnovers$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player steals plus blocks ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Steals + Blocks', prop_regex = ' Steals \\+ Blocks$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player most points')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Top Point Scorer', market_name = 'Leading Scorer of the Game', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player double double')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Double-Double', prop_regex = ' Double-Double$', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player triple double')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Triple-Double', prop_regex = ' Triple-Double$', market = market, matchup = matchup, tipoff = tipoff)
}
# mlb ---------------------------------------------------------------------
if (prop %in% c('player strikeouts ou', 'strikeouts')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'Pitcher Props', market_subgroup = 'Strikeouts', market_regex = 'Strikeouts',
market_name = prop, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player hits ou')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'Batter Props', market_subgroup = 'Hits', prop_regex = 'Hits',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player rbis ou', 'rbis')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'Batter Props', market_subgroup = 'RBIs', prop_regex = 'RBIs',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player runs ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Batter Props', market_subgroup = 'Runs Scored', prop_regex = 'Runs', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player hrs ou', 'player home runs ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'Batter Props', market_subgroup = 'Home Runs', matchup = matchup, tipoff = tipoff)
}
# nfl ---------------------------------------------------------------------
if (prop %in% c('player rush atts ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'RB/WR Props', market_subgroup = 'Rush Attempts', prop_regex = 'Rushing Attempts', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player rush yds ou')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'RB/WR Props', market_subgroup = 'Rush Yds', prop_regex = 'Rushing Yards',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player recs ou')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'RB/WR Props', market_subgroup = 'Receptions', prop_regex = 'Receptions',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player rec yds ou')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'RB/WR Props', market_subgroup = 'Rec Yds', prop_regex = 'Receiving Yards',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player rush+rec yds ou')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'RB/WR Props', market_subgroup = 'Rush + Rec Yds', prop_regex = 'Rushing \\+ Receiving Yards',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player pass atts ou')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'QB Props', market_subgroup = 'Pass Attempts', prop_regex = 'Passing Attempts',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player pass yds ou')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'QB Props', market_subgroup = 'Pass Yds', prop_regex = 'Passing Yards',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player pass tds ou')) {
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'QB Props', market_subgroup = 'Pass TDs', prop_regex = 'Passing Touchdowns', market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('player anytime td', 'player first td')) {
# first/last/any tds are all in one big data.frame, which gets re-labeled correctly in tidyup_draftkings_data()
output_list[[length(output_list) + 1]] <- parse_dk_prop(offer_categories, market_group = 'TD Scorers', market_subgroup = 'TD Scorer', prop_regex = 'Touchdown Scorer', market = market, matchup = matchup, tipoff = tipoff)
}
# nhl ---------------------------------------------------------------------
if (prop %in% c('goalscorer', 'goals', 'player first goal', 'player any goal', 'player last goal')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Goalscorer', prop_regex = 'Goalscorer',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('shots')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Shots', prop_regex = 'Shots',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('assists')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Assists', prop_regex = 'Assists',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('points')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Points', prop_regex = 'Points',
market = market, matchup = matchup, tipoff = tipoff)
}
if (prop %in% c('goalie saves')) {
output_list[[length(output_list) + 1]] <-
parse_dk_prop(offer_categories, market_group = 'Player Props', market_subgroup = 'Goalie Saves', prop_regex = 'Saves',
market = market, matchup = matchup, tipoff = tipoff)
}
}
# if output_list is empty, error
if (!'output_list' %in% ls()) stop('no draftkings ', prop, ' returned')
if (length(output_list) == 0 & game_lines == FALSE) stop('no draftkings ', prop, ' returned')
if (length(output_list) == 0 & game_lines == TRUE) stop('no draftkings game lines returned')
output_df <- dplyr::bind_rows(output_list)
output_df$prop <- prop
return(output_df)
}
parse_dk_prop <- function(offer_categories, market_group, market_subgroup, offer_label = NULL, offer_regex = NULL, offer_not_regex = NULL, matchup, tipoff) {
outcome_list <- list()
for (oc in offer_categories) {
if (oc[['name']] != market_group) next
market_group_componentizedOffers <- oc[['componentizedOffers']]
for (sc in market_group_componentizedOffers) {
if (sc[['subcategoryName']] != market_subgroup) next
offers <- sc[['offers']]
for (o in offers) {
# filter out incorrect markets here
for (oo in o) {
if (!'label' %in% names(oo)) next
if (!is.null(offer_label) && oo['label'] != offer_label) next
if (is.null(offer_label) && !grepl(offer_regex, oo['label'])) next
if (!is.null(offer_not_regex) && grepl(offer_not_regex, oo['label'])) next
all_outcomes <- dplyr::bind_rows(oo[['outcomes']])
all_outcomes$market_name <- oo['label']
outcome_list[[length(outcome_list) + 1]] <- all_outcomes
}
}
}
}
if (length(outcome_list) == 0) return()
# make a data.frame
market_df <- as.data.frame(dplyr::bind_rows(outcome_list))
market_df$tags <- NULL
market_df <- unique(market_df)
market_df$matchup <- matchup
market_df$tipoff <- tipoff
return(market_df)
}
parse_dk_game_lines <- function(offer_categories, exclude_alts, matchup, tipoff) {
offer_category_names <- unlist(lapply(offer_categories, '[[', 'name'))
if (!'Game Lines' %in% offer_category_names) return()
game_lines_content <- offer_categories[[which(offer_category_names == 'Game Lines')]]$componentizedOffers
if (exclude_alts) {
gl_subgroups <- c('Game')
} else {
gl_subgroups <- c('Game', 'Alternate Spread', 'Alternate Total')
}
gl_group_names <- unlist(lapply(game_lines_content, '[[', 'subcategoryName'))
if (!any(gl_subgroups %in% gl_group_names)) return()
gl_subgroups_content <- game_lines_content[which(gl_group_names %in% gl_subgroups)]
gl_offers <- lapply(gl_subgroups_content, function(x) x[['offers']][[1]])
output_list <- list()
# go through each of the offer groups
for (o in gl_offers) {
outcomes <- lapply(o, '[[', 'outcomes')
outcomes_df <- dplyr::bind_rows(outcomes)
output_list[[length(output_list) + 1]] <- outcomes_df
}
out_df <- dplyr::bind_rows(output_list)
if (nrow(out_df) < 1) return()
out_df$bet_type <- ifelse(out_df$label %in% c("Over", "Under"), "Total",
ifelse(is.na(out_df$line), "Moneyline", "Spread"))
out_df$matchup <- matchup
out_df$tipoff <- tipoff
return(out_df)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.