R/GamedayGrabber.R

Defines functions GamedayGrabber

Documented in GamedayGrabber

#' GamedayGrabber
#' 
#' This function grabs games!
#' 
#' 
#' @export


GamedayGrabber <- function(){
require(tidyr)
require(magrittr)

current_date <- as.character(Sys.Date())

dri <- RSelenium::rsDriver(browser = c("chrome"), chromever = "77.0.3865.40", verbose = F)

remote <- dri[["client"]]
remote$open()






LineReversalsFunc <- function(sport,startD,endD,d_unit){
  start_url2 <- "https://zcodesystem.com/linereversals.php"
  remote$navigate(start_url2)
  
  if (sport == "NFL"){
    sn <- 3
  } else if (sport == "NCAAF"){
    sn <- 6
  } else if (sport == "NHL"){
    sn <- 2
  } else if (sport == "MLB"){
    sn <- 1
  } else if (sport == "NBA"){
    sn <- 4
  }
  print(sn)
  
  
  sport_paste <- paste("/html/body/div[1]/div[2]/div[1]/div/div[6]/div/span[",sn,"]",sep = "")
  
  sport_button <- remote$findElement(using = 'xpath', value = sport_paste)
  sport_button$clickElement()
  Sys.sleep(2)
  
  DateSeq <- function(startD,endD,d_unit,format="%d %b %Y"){
    dates <- seq(as.Date(startD,format=format),as.Date(endD, format=format), by=d_unit)
    format(dates,format)
  }
  
  date_list <- DateSeq(startD,endD,d_unit)
  print(date_list)
  
  
  date_data <- list()
  
  print(date_data)
  print("Above is date being scraped")
  
  
  date_in <- remote$findElement(using = 'class', value = 'hasDatepicker')
  date_in$clearElement()
  
  date_in$sendKeysToElement(list(date_list[1]))
  date_in$sendKeysToElement(list("\uE007"))
  Sys.sleep(3)
  
  
  print(date_list[1])
  
  response_page <- xml2::read_html(unlist(remote$getPageSource()), encoding = "UTF-8")

  response_tables <- response_page %>% rvest::html_nodes('table') %>% rvest::html_table(fill = TRUE)
  
  table2 <- response_tables[[2]]
  print(length(table2[,1]))
  print("above is length table2")
  if(length(table2[,1]) <= 2){ print("This day doesn't have games")}
  else {
    table3 <- table2[-1:-2,]
    table4 <- data.frame(table3, stringsAsFactors = FALSE)
    Sys.sleep(1)
    
    test_s <- data.frame(table4$X2, stringsAsFactors = FALSE)
    test_split <- test_s[[1]] %>% strsplit(split = "[:%(),]")
    
    ## Row Remover
    
    bad_rows <- c()
    remove_badrows <- function(input_data,subset){
      
      for(t in 1:length(subset)){
        
        if(length(subset[[t]]) == 1){
          bad_rows[t] <- t
          
        }  
      }
      if(length(bad_rows>0)){
        bad_frame <- data.frame(bad_rows)
        row_index <- ggplot2::remove_missing(bad_frame,na.rm = TRUE)
        output <- input_data[-row_index,]} else {input_data}
    }
    
    
    clean_data <- remove_badrows(table4,test_split)
    
    ## Split Data columns
    
    Dates <- data.frame(clean_data$X1, stringsAsFactors = F)
    TM1 <- data.frame(clean_data$X2, stringsAsFactors = F)
    TM1ML <- data.frame(clean_data$X3, stringsAsFactors = F)
    TM1O <- data.frame(clean_data$X14, stringsAsFactors = F)
    TM1U <- data.frame(clean_data$X15, stringsAsFactors = F)
    TM1SP <- data.frame(clean_data$X6, stringsAsFactors = F)
    TM2 <- data.frame(clean_data$X8, stringsAsFactors = F)
    TM2ML <- data.frame(clean_data$X9, stringsAsFactors = F)
    TM2O <- data.frame(clean_data$X14, stringsAsFactors = F)
    TM2U <- data.frame(clean_data$X15, stringsAsFactors = F)
    TM2SP <- data.frame(clean_data$X12, stringsAsFactors = F)
    Score <- data.frame(clean_data$X18, stringsAsFactors = F)
    
  
    ## Split TM1, TM2
    
    TM1split <- TM1[[1]] %>% strsplit(split = "[:%(),]")
    TM2split <- TM2[[1]] %>% strsplit(split = "[:%(),]")
    
    ## Split each row function
    
    Splitter <- function(dataIN){
      
      row_mat <- list()
      test <- list()
      
      dummy <- matrix(nrow = length(dataIN), ncol = length(dataIN[[1]]))
      
      for (h in 1:length(dataIN)){
        test <- dataIN[[h]]
        dummy[h,] <- matrix(test, nrow = 1, ncol = length(dataIN[[1]]), byrow = TRUE)
      }
      
      output_Splitter <- data.frame(dummy, stringsAsFactors = FALSE)
    }
    
    
    
    ## Apply splitter to Teams1 Teams2
    
    Team1_final <- Splitter(TM1split)
    
    Team2_final <- Splitter(TM2split)
    Sys.sleep(2)
    
    
    ## Cbind all columns to TM1 TM2
    
    TM1rows <- cbind(Dates,Team1_final,TM1ML,TM1SP,TM1O,TM1U)
    TM2rows <- cbind(Dates,Team2_final,TM2ML,TM2SP,TM2O,TM2U)
    
    
    
    
    
    ## Delete unecessary columns 
    delete_bad_columns <- function(INPUTdata){
      output <- INPUTdata[,c(-4,-6,-8,-9,-11,-14,-17,-19,-22,-26,-29)]
    }
    
    TM1_final <- delete_bad_columns(TM1rows)
    TM2_final <- delete_bad_columns(TM2rows)
    
    
    
    ## Rbind TM1 TM2 to stacked columns
    final_data1 <- list(TM1_final,TM2_final)
    final_data <- data.table::rbindlist(final_data1)
    
    
    
    
    date_data[[1]] <- final_data
  }     
  
  
  final_out <- data.table::rbindlist(date_data,fill = TRUE)
  colnames(final_out) <- c("Date","Team","ML","SP","OV","UN","MLT","MLTR","SPT","SPTR","OVT","UNT","OUTR","PBR","SPTD","SPTDR","MLTD","MLTDR","OUTD","OUTDR","MLodd","Spreadd","OverL","UnderL")
  return(final_out)
  
}


h <- as.character(Sys.Date())
h52 <- stringr::str_split(h,pattern = "-",simplify = TRUE)

hdd <- paste(h52[1],h52[2],h52[3],sep = "-")
hdd <- as.Date(hdd)

s <- c(format="%d %b %Y")
current_date <- format(hdd,s)

LineRev <- LineReversalsFunc(sport = "NBA",current_date,current_date,"days")





half <- length(LineRev$Date)/2
end <- length(LineRev$Date)

Today <- transform(LineRev, H1A0="")
Today[1:half,]$H1A0 <- "0"
Today[half+1:end,]$H1A0 <- "1"




  final_trim <- function(data){
    
    SP <- data$Spreadd
    OV <- data$OverL
    UN <- data$UnderL
    
    SPodd <- stringr::str_sub(SP,1,5)
    SPline <- stringr::str_sub(SP,6)
    
    OV <- stringr::str_split(OV, pattern = "\\(", simplify = TRUE)
    OV[,1] <- stringr::str_remove_all(OV[,1], pattern = "Over ")
    OV[,2] <- stringr::str_remove_all(OV[,2], pattern = "\\)")
    colnames(OV) <- c("Total22","OverOdd")
    
    UN <- stringr::str_split(UN, pattern = "\\(", simplify = TRUE)
    UN[,1] <- stringr::str_remove_all(UN[,1], pattern = "Under ")
    UN[,2] <- stringr::str_remove_all(UN[,2], pattern = "\\)")
    colnames(UN) <- c("Total2","UnderOdd")
    
    new_data <- cbind(data,SPodd,SPline,OV,UN)
    
    new_data$Team <- stringr::str_remove_all(new_data$Team, pattern = "ML public")
    new_data$Team <- stringr::str_remove_all(new_data$Team, pattern = "ML tickets")
    new_data$PBR <- stringr::str_remove_all(new_data$PBR,pattern = "Spread tickets difference")
    
    return(new_data)
  }
  
  dataLR <- final_trim(Today)

write.csv(dataLR,"cur_date.csv")
bb <- read.csv("cur_date.csv")


t <- bb


if(is.numeric(t$MLTR)==FALSE){
  bad <- c(which(t$MLTR=="Spread public"))
  t <- t[-c(bad),]
}

write.csv(t,"ass.csv")
t <- read.csv("ass.csv")

turday <- transform(t, D0F1=ifelse(t$SPline>0,0,1))



turday$H1A0 <- as.factor(turday$H1A0)
turday$D0F1 <- as.factor(turday$D0F1)

remote$close()
dri$server$stop()

return(turday)
}
dennist2/MerlinV1 documentation built on Dec. 11, 2019, 8:41 p.m.