Я делаю несколько вызовов API Google Analytics, так как мне нужно получить запрос в течение многих лет.
library(googleAuthR)
library(googleAnalyticsR)
library(tidyverse)
library(lubridate)
my_fetch <- function(ga_id, d1, d2) {
google_analytics(ga_id,
date_range = c(d1, d2),
metrics = c("totalEvents"),
dimensions = c("ga:date", "ga:eventCategory", "ga:eventAction", "ga:eventLabel"),
anti_sample = TRUE)
}
Я использую mapply для вызова своей выборки с несколькими переменными:
my_fetches_fetches <- mapply(my_fetch, an_viewID, my_dates$start, my_dates$end, SIMPLIFY = FALSE)
А потом я снова связываю все df:
total <- do.call(rbind, my_fetches_fetches)
Но внутри функции my_fetch
у меня проблемы, потому что, очевидно, есть много данных для некоторых вызовы API.
Так что я бы хотел пропустить конкретную выборку, если она занимает больше времени, чем n минут, и длится до 5 минут. И переходить к следующей выборке.
Вот так я генерирую диапазоны дат:
make_date_ranges <- function(start, end = Sys.Date() - 1){
from <- as.Date(start)
to <- as.Date(end)
d <- seq(from, to, by = "1 days")
n <- length(d)
chunk <- 3
f <- rep(1:((n %/% chunk) + 1), each = chunk, length.out = n)
lst1 <- split(d, f)
out <- data.frame(start = do.call(c, lapply(lst1, `[`, 1)),
end = do.call(c, lapply(lst1, `[`, 3)))
i1 <- lengths(lst1) < 3
out$end[i1] <- do.call(c, lapply(lst1[i1], tail, 1))
return(out)
}
## useage
my_dates <- make_date_ranges(as.Date("2019-01-01"), as.Date("2019-12-31"))