-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathdb_init.R
87 lines (66 loc) · 2.83 KB
/
db_init.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
library(data.table)
library(RMySQL)
library(rvest)
source("db_query.R")
GetPageCount <- function(year = 14, division = 1, stage = 0){
if(year == 15 & stage == 1.1) {
stage <- 1
}
url <- paste0(
"http://games.crossfit.com/scores/leaderboard.php?stage=",stage,"&sort=",stage,
"&page=0&division=",division,"®ion=0&numberperpage=100&competition=0&frontpage=0",
"&expanded=0&year=",year,"&full=1&showtoggles=0&hidedropdowns=1",
"&showathleteac=1&is_mobile=1")
#message(url)
html.page <- html(url)
page.count <- as.integer(html_text(html_nodes(html.page, "div#leaderboard-pager a.button")[[1]]))
message(page.count)
return(page.count)
}
ExpandBoard <- function(i, boards){
data.table(year = boards[i, year],
division = boards[i,division],
stage = boards[i, stage],
pages = 1:boards[i,pages])
}
InitAllYears <-function(){
# generate table of leaderboard pages
boards <- rbindlist(list(
data.table(year = 12, division = 1, stage = 0:5),
data.table(year = 12, division = 2, stage = 0:5),
data.table(year = 13, division = 1, stage = 0:5),
data.table(year = 13, division = 2, stage = 0:5),
data.table(year = 14, division = 1, stage = 0:5),
data.table(year = 14, division = 2, stage = 0:5),
data.table(year = 15, division = 1, stage = c(1,1.1,2)),
data.table(year = 15, division = 2, stage = c(1,1.1,2))))
boards[, id :=1:.N]
boards[, pages := GetPageCount(year = year,division = division,stage = stage), by=id]
leaderboard.pages <- rbindlist(lapply(boards[, id], ExpandBoard, boards = boards))
leaderboard.pages[, retrieved_datetime := NA]
# write tables
db.con <- dbConnect(RMySQL::MySQL(),
dbname = "crossfit",
user = "crossfit",
password = "",
host = "127.0.0.1")
dbWriteTable(db.con, name = "leaderboard_pages", value=leaderboard.pages, row.names=F)
dbDisconnect(db.con)
}
Init15Wod <- function(stage){
boards <- data.table(year = 15, division = 1:2, stage = stage)
boards[, id :=1:.N]
boards[, pages := GetPageCount(year = year,division = division,stage = stage), by=id]
leaderboard.pages <- rbindlist(lapply(boards[, id], ExpandBoard, boards))
leaderboard.pages[, retrieved_datetime := NA]
# write tables
db.con <- dbConnect(RMySQL::MySQL(),
dbname = "crossfit",
user = "crossfit",
password = "",
host = "127.0.0.1")
QueryDB(paste0("DELETE FROM leaderboard_pages WHERE year = 15 AND stage = ", stage))
QueryDB(paste0("DELETE FROM leaderboard WHERE year = 15 AND stage = ", stage))
dbWriteTable(db.con, name = "leaderboard_pages", value=leaderboard.pages, row.names=F, append=TRUE)
dbDisconnect(db.con)
}