yadirGetReport <- function(ReportType = "CAMPAIGN_PERFORMANCE_REPORT",
DateRangeType = "LAST_MONTH",
DateFrom = NULL,
DateTo = NULL,
FieldNames = c("CampaignName","Impressions","Clicks","Cost"),
FilterList = NULL,
IncludeVAT = "NO",
IncludeDiscount = "NO",
Login = NULL,
Token = NULL){
#Ôîðìèðóåì ñïèñîê ïîëåé
Fields <- paste0("<FieldNames>",FieldNames, "</FieldNames>", collapse = "")
#Ôîðìèðóåì ôèëüòð
if(!is.null(FilterList)){
fil_list <- NA
filt <- FilterList
for(fil in filt){
fil_list <- paste0(fil_list[!is.na(fil_list)],
paste0("<Filter>",
paste0("<Field>",strsplit(fil ," ")[[1]][1], "</Field>"),
paste0("<Operator>",strsplit(fil ," ")[[1]][2], "</Operator>"),
paste0("<Values>",strsplit(fil ," ")[[1]][3], "</Values>"),"</Filter>"))
}}
#Ôîðìèðóåì òåëî çàïðîñà
queryBody <- paste0('
<ReportDefinition xmlns="http://api.direct.yandex.com/v5/reports">
<SelectionCriteria>',
ifelse(DateRangeType == "CUSTOM_DATE",paste0("<DateFrom>",DateFrom,"</DateFrom>","<DateTo>",DateTo,"</DateTo>") ,"" ),
ifelse(is.null(FilterList),"",fil_list),
'
</SelectionCriteria>',
Fields,'
<ReportName>',paste0("MyReport ", Sys.time()),'</ReportName>
<ReportType>',ReportType,'</ReportType>
<DateRangeType>',DateRangeType ,'</DateRangeType>
<Format>TSV</Format>
<IncludeVAT>',IncludeVAT,'</IncludeVAT>
<IncludeDiscount>',IncludeDiscount,'</IncludeDiscount>
</ReportDefinition>')
#Ñîçäà¸ì ðåçóëüòèðóþùèé dataframe
result <- data.frame()
for(login in Login){
#Âûîäèì ñîîáùåíèå î òîì êàêîé ïðîåêò â ðàáîòå
packageStartupMessage("-----------------------------------------------------------")
packageStartupMessage(paste0("Çàãðóçêà äàííûõ ïî ",login))
#Îòïðàâëÿåì çàïðîñ íà ñåðâåð ßíäåêñà
answer <- POST("https://api.direct.yandex.com/v5/reports", body = queryBody, add_headers(Authorization = paste0("Bearer ",Token), 'Accept-Language' = "ru", 'Client-Login' = login, returnMoneyInMicros = "false", processingMode = "auto"))
if(answer$status_code == 400){
packageStartupMessage(paste0(login," - ",xml_text(content(answer, "parsed","text/xml",encoding = "UTF-8"))))
packageStartupMessage("Îøèáêà â ïàðàìåòðàõ çàïðîñà ëèáî ïðåâûøåíî îãðàíè÷åíèå íà êîëè÷åñòâî çàïðîñîâ èëè îò÷åòîâ â î÷åðåäè.  ýòîì ñëó÷àå ïðîàíàëèçèðóéòå ñîîáùåíèå îá îøèáêå, ñêîððåêòèðóéòå çàïðîñ è îòïðàâüòå åãî ñíîâà.")
next
}
if(answer$status_code == 500){
packageStartupMessage(paste0(login," - ",xml_text(content(answer, "parsed","text/xml",encoding = "UTF-8"))))
packageStartupMessage("Ïðè ôîðìèðîâàíèè îò÷åòà ïðîèçîøëà îøèáêà íà ñåðâåðå. Åñëè äëÿ ýòîãî îò÷åòà îøèáêà íà ñåðâåðå âîçíèêëà âïåðâûå, ïîïðîáóéòå ñôîðìèðîâàòü îò÷åò çàíîâî. Åñëè îøèáêà ïîâòîðÿåòñÿ, îáðàòèòåñü â ñëóæáó ïîääåðæêè.")
next
}
if(answer$status_code == 201){
packageStartupMessage("Îò÷åò óñïåøíî ïîñòàâëåí â î÷åðåäü íà ôîðìèðîâàíèå â ðåæèìå îôëàéí.", appendLF = F)
}
if(answer$status_code == 202){
packageStartupMessage("Ôîðìèðîâàíèå îò÷åòà åùå íå çàâåðøåíî.", appendLF = F)
}
while(answer$status_code != 200){
answer <- POST("https://api.direct.yandex.com/v5/reports", body = queryBody, add_headers(Authorization = paste0("Bearer ",Token), 'Accept-Language' = "ru", 'Client-Login' = login, returnMoneyInMicros = "false", processingMode = "auto"))
packageStartupMessage(".", appendLF = F)
if(answer$status_code == 500){
stop("Ïðè ôîðìèðîâàíèè îò÷åòà ïðîèçîøëà îøèáêà íà ñåðâåðå. Åñëè äëÿ ýòîãî îò÷åòà îøèáêà íà ñåðâåðå âîçíèêëà âïåðâûå, ïîïðîáóéòå ñôîðìèðîâàòü îò÷åò çàíîâî. Åñëè îøèáêà ïîâòîðÿåòñÿ, îáðàòèòåñü â ñëóæáó ïîääåðæêè.")
}
Sys.sleep(5)
}
if(answer$status_code == 200){
#Ïîëó÷àåì ñïèñîê íàçâàíèé ïîëåé
names_col <- strsplit(read.csv(text = content(answer, "text"), sep = "\n", stringsAsFactors = F)[1,], "\t")[[1]]
#ïîëó÷àåì äàííûå
dataRaw <- read.csv(text = content(answer, "text"), sep = "\n", stringsAsFactors = F)[-1,]
#Ôîðìèðóåì ðåçóëüòèðóþùóþ òàáëèöó
df_new <- read.csv(text = dataRaw,header = F, sep = "\t", col.names = names_col)
#Ïðîâåðêà âåðíóëèñü ëè êàêèå òî äàííûå
if(is.null(nrow(df_new[-nrow(df_new),]))){
packageStartupMessage("Âàø çàïðîñ íå âåðíóë íèêàêèõ äàííûõ, âíèìàòåëüíî ïðîâåðüòå çàäàííûé ôèëüòð è ïåðèîä îò÷ òà, ïîñëå ÷åãî ïîâòîðèòå ïîïûòêó.")
next
}
#Çàäà¸ì íàçâàíèÿ ïîëåé
#names(df_new) <- names_col
#Óáèðàåì ñòðîêó èòîãîâ
#df_new <- df_new[-nrow(df_new),]
packageStartupMessage("Îò÷åò óñïåøíî ñôîðìèðîâàí è ïåðåäàí â òåëå îòâåòà.", appendLF = T)
#Èíôîðìàöèÿ î êîëè÷åñòâå áàëëîâ.
packageStartupMessage(paste0("Óíèêàëüíûé èäåíòèôèêàòîð çàïðîñà êîòîðûé íåîáõîäèìî óêàçûâàòü ïðè îáðàùåíèè â ñëóæáó ïîääåðæêè: ",answer$headers$requestid), appendLF = T)
#Äîáàâëÿåì ëîãèí
if(length(Login) > 1){
df_new$login <- login}
#Óäàëÿåì ñòðîêó èòîãîâ
df_new <- df_new[!grepl("Total rows", df_new[,1]),]
#ïðèñîåäèíÿåì ñâåæèå äàííûå ê ðåçóëüòèðóþùåìó äàòà âðåéìó
result <- rbind(result, df_new)
#Çàâåðøàåì öèêë
}
}
#Âîçâðàùàåì ïîëó÷åííûé ìàññèâ
return(result)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.