R/yadirGetMetrikaGAData.R

yadirGetMetrikaGAData <- function

                      (start_date = "10daysAgo",
                       end_date = "today",
                       counter_ids = NULL,
                       dimensions = NULL,
                       metrics = NULL,
                       filters = NULL,
                       sort = NULL,
                       samplingLevel = "HIGHER_PRECISION",
                       token = NULL){
#Ïðîâåðêà çàïîëíåíèÿ îáÿçàòåëüíûõ àðãóìåíòîâ
if(is.null(counter_ids)|is.null(metrics)|is.null(token)){
  stop("Àðãóìåíòû counter_ids, metrics è token ÿâëÿþòñÿ îáÿçàòåëüíûìè, çàïîëíèòå èõ è çàïóñòèòå çàïðîñ ïîâòîðíî!")
}
  
#Ïðîâåðÿåì ôóíêöèþ StringAsFactor
if(getOption("stringsAsFactors") == TRUE){
  string_as_factor <- "change"
  options(stringsAsFactors = F)
} else {
  string_as_factor <- "no change"
}

#Ñîçäà¸ì ðåùóëüòèðóþùèé äàòà ôðåéì
result <- data.frame(stringsAsFactors = F)

#Óáèðàåì ïðîáåëû èç ìåòðèê è ãðóïïèðîâîê
metrics <- gsub(" ", "",metrics)

#Ïåðåìåííûå äëÿ ïîñòðàíè÷íîé âûáîðêè
max_results <- 500
start_index <- 1
last_query <- FALSE

packageStartupMessage("Processing", appendLF = F)

while(last_query == FALSE){

#Ôîðìèðóåì GET Çàïðîñ ê API ìåòðèêè
#Ñîåäèíÿåì GET ïàðàìåòðû
query <- paste0("start-date=",start_date,"&end-date=",end_date,"&metrics=",metrics,"&ids=",counter_ids,"&max-results=",max_results,"&start-index=",start_index,"&oauth_token=",token)
#Ïî î÷åðåäè äîáàâëÿåì íå îáÿçàòåëüíûå ïàðàìåòðû
if(!is.null(dimensions)) {
  dimensions <- gsub(" ", "",dimensions)
  query <- paste0(query,"&dimensions=",dimensions)}
if(!is.null(filters)) query <- paste0(query,"&filters=",filters)
if(!is.null(sort)) query <- paste0(query,"&sort=",sort)
if(!is.null(samplingLevel)) query <- paste0(query,"&samplingLevel=",samplingLevel)

#Çàìåíÿåì ñïåö ñèìâîëû ïàðàìåòðîâ íà URL êîäèðîâêó
query <- gsub(":","%3a",query)
#Ñîåäèíÿåì URL è GET ïàðàìåòðû
query <- paste0("https://api-metrika.yandex.ru/analytics/v3/data/ga?", query)
#Îòïðàâëÿåì çàïðîñ íà ñåðâåð
answer <- GET(query)
#Ïàðñèì ðåçóëüòàò
rawData <- content(answer, "parsed", "application/json")

#Ïðîâåðêà îòâåòà íà îøèáêè
if(!is.null(rawData$error)){
  stop(paste0(rawData$error$errors[[1]]$reason," - ",rawData$error$errors[[1]]$message, ", location - ", rawData$error$errors[[1]]$location))
}

#Ïàðñèíã ðåçóëüòàòà
#Ïîëó÷àåì âåêòîð ñ íàçâàíèåì ñòîëáöîâ
column_names <- unlist(lapply(rawData$columnHeader, function(x) return(x$name)))

#Ïàðñèì ñòðîêè
rows <- lapply(rawData$rows, function(x) return(x))
for(rows_i in 1:length(rows)){
  result <- rbind(result, unlist(rows[[rows_i]]))
}
#Âûâîäèì òî÷êó
packageStartupMessage(".", appendLF = F)
#Ïåðåõîäèì íà ñëåäóþùóþ ñòðàíèöó.
start_index <- start_index + max_results

#Ïðîâåðÿåì ïîñëåäíÿÿ ëè ýòî ñòðàíèöà
if(rawData$totalResults < start_index){
  last_query <- TRUE
 }
}

#Çàäà¸ì èìåíà ñòîëáöîâ
colnames(result) <- column_names

#Ïðåîáðàçóåì òèï äàííûõ â ñòîëáöàõ
for(tape_i in 1:length(rawData$columnHeaders)){

  if(rawData$columnHeaders[[tape_i]]$columnType == "METRIC"){
    result[,tape_i] <- as.numeric(result[,tape_i])
  }
}

#Âîçâðàøàåì îïöèþ ïðåîáçîâàíèÿ òåêñòîâûõ ïîëåé â ôàêòîð åñëè ìåíÿëè å¸ íà ñòàðòå ðàáîòû
if(string_as_factor == "change"){
  options(stringsAsFactors = T)
}

#Âûâîäèì ñîîáùåíèå î òîì ÷òî äàííûå çàãðóæåíû
packageStartupMessage("Done", appendLF = T)

#Âûâîäèì îáùóþ èíôîðìàöèþ
if(rawData$containsSampledData == TRUE){
packageStartupMessage("Ïðè ñáîðå äàííûõ áûëî èñïîëüçîâàíî ñåìïëèðîâàíèå.", appendLF = T)
packageStartupMessage(paste0("ðàçìåð âûáîðêè íà êîòîðîé ñîñòàâëåí îò÷¸ò: ", rawData$sampleSize), appendLF = T)
packageStartupMessage(paste0("äàííàÿ âûáîðêà ñîñòàâëÿåò : ",  as.integer(rawData$sampleSize) / as.integer(rawData$sampleSpace) * 100, "% îò îáùåãî êîëè÷åñòâà âèçèòîâ"), appendLF = T)
packageStartupMessage(paste0("Îáùåå êîëè÷åñòâî ïîëó÷åííûõ ðåçóëüòàòîâ: ", rawData$totalResults), appendLF = T)
} else {
packageStartupMessage("Ïðè ñáîðå äàííûõ íå áûëî èñïîëüçîâàíî ñåìïëèðîâàíèå.", appendLF = T)
packageStartupMessage(paste0("Îáùåå êîëè÷åñòâî ïîëó÷åííûõ ðåçóëüòàòîâ: ", rawData$totalResults), appendLF = T)
}
#Âîçâðàùåì ðåçóëüòàò
return(result)
}
alex-www-marketing/ryandexdirect_edit documentation built on May 4, 2019, 10:57 a.m.