yadirGetDictionary <- function(DictionaryName = "GeoRegions", Language = "ru", login = NULL, token = NULL){
#Проверка Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð»Ð¾Ð³Ð¸Ð½Ð° и токена
if(is.null(login)|is.null(token)) {
stop("You must enter login and API token!")
}
#Проверка верно ли указано название Ñправочника
if(!DictionaryName %in% c("Currencies",
"MetroStations",
"GeoRegions",
"TimeZones",
"Constants",
"AdCategories",
"OperationSystemVersions",
"ProductivityAssertions",
"SupplySidePlatforms",
"Interests")){
stop("Error in DictionaryName, select one of Currencies, MetroStations, GeoRegions, TimeZones, Constants, AdCategories, OperationSystemVersions, ProductivityAssertions, SupplySidePlatforms, Interests")
}
#check stringAsFactor
factor_change <- FALSE
#change string is factor if TRUE
if(getOption("stringsAsFactors")){
options(stringsAsFactors = F)
factor_change <- TRUE
}
queryBody <- paste0("{
\"method\": \"get\",
\"params\": {
\"DictionaryNames\": [ \"",DictionaryName,"\" ]
}
}")
#Отправка запроÑа на Ñервер
answer <- POST("https://api.direct.yandex.com/json/v5/dictionaries", body = queryBody, add_headers(Authorization = paste0("Bearer ",token), 'Accept-Language' = Language, "Client-Login" = login[1]))
#Проверка результата на ошибки
stop_for_status(answer)
dataRaw <- content(answer, "parsed", "application/json")
if(length(dataRaw$error) > 0){
stop(paste0(dataRaw$error$error_string, " - ", dataRaw$error$error_detail))
}
#Преобразуем ответ в data frame
#ПарÑинг Ñправочника регионов
if(DictionaryName == "GeoRegions"){
dictionary_df <- data.frame()
for(dr in 1:length(dataRaw$result[[1]])){
dictionary_df_temp <- data.frame(GeoRegionId = dataRaw$result[[1]][[dr]]$GeoRegionId,
ParentId = ifelse(is.null(dataRaw$result[[1]][[dr]]$ParentId),NA , dataRaw$result[[1]][[dr]]$ParentId),
GeoRegionType = dataRaw$result[[1]][[dr]]$GeoRegionType,
GeoRegionName = dataRaw$result[[1]][[dr]]$GeoRegionName)
dictionary_df <- rbind(dictionary_df, dictionary_df_temp)
}}
#ПарÑинг Ñправочника валют
if(DictionaryName == "Currencies"){
dictionary_df <- data.frame()
for(dr in 1:length(dataRaw$result[[1]])){
dictionary_df_temp <- data.frame(Cur = dataRaw$result[[1]][[dr]]$Currency, as.data.frame(do.call(rbind.data.frame, dataRaw$result[[1]][[dr]]$Properties), row.names = NULL, stringsAsFactors = F))
dictionary_df <- rbind(dictionary_df, dictionary_df_temp)
}
dictionary_df_cur <- data.frame()
#Преобразуем Ñправочник валют
for(curlist in unique(dictionary_df$Cur)){
dictionary_df_temp <- data.frame(Cur = curlist,
FullName = dictionary_df[dictionary_df$Cur == curlist & dictionary_df$Name == "FullName",3],
Rate = dictionary_df[dictionary_df$Cur == curlist & dictionary_df$Name == "Rate",3],
RateWithVAT = dictionary_df[dictionary_df$Cur == curlist & dictionary_df$Name == "RateWithVAT",3])
dictionary_df_cur <- rbind(dictionary_df_cur,dictionary_df_temp)
}
dictionary_df <- dictionary_df_cur
}
#ПарÑинг Ñправочника Interests
if(DictionaryName == "Interests"){
dictionary_df <- data.frame()
for(dr in 1:length(dataRaw$result[[1]])){
dictionary_df_temp <- data.frame(Name = dataRaw$result[[1]][[dr]]$Name,
ParentId = ifelse(is.null(dataRaw$result[[1]][[dr]]$ParentId),NA , dataRaw$result[[1]][[dr]]$ParentId),
InterestId = dataRaw$result[[1]][[dr]]$InterestId,
IsTargetable = dataRaw$result[[1]][[dr]]$IsTargetable)
dictionary_df <- rbind(dictionary_df, dictionary_df_temp)
}
}
#ПарÑинг оÑтальных Ñправочников Ñо Ñтандартной Ñтруктурой
if(! DictionaryName %in% c("Currencies","GeoRegions","Interests")){
dictionary_df <- do.call(rbind.data.frame, dataRaw$result[[1]])
}
#back string as factor value
if(factor_change){
options(stringsAsFactors = T)
}
#Выводим информацию о работе запроÑа и о количеÑтве баллов
packageStartupMessage("Ñïðàâî÷íèê óñïåøíî çàãðóæåí!", appendLF = T)
packageStartupMessage(paste0("Áàëëû ñïèñàíû ñ : " ,answer$headers$`units-used-login`), appendLF = T)
packageStartupMessage(paste0("Ê-âî áàëëîâ èçðàñõîäîâàíûõ ïðè âûïîëíåíèè çàïðîñà: " ,strsplit(answer$headers$units, "/")[[1]][1]), appendLF = T)
packageStartupMessage(paste0("Äîñòóïíûé îñòàòîê ñóòî÷íîãî ëèìèòà áàëëîâ: " ,strsplit(answer$headers$units, "/")[[1]][2]), appendLF = T)
packageStartupMessage(paste0("Ñóòî÷íûé ëèìèò áàëëîâ: " ,strsplit(answer$headers$units, "/")[[1]][3]), appendLF = T)
packageStartupMessage(paste0("Óíèêàëüíûé èäåíòèôèêàòîð çàïðîñà êîòîðûé íåîáõîäèìî óêàçûâàòü ïðè îáðàùåíèè â ñëóæáó ïîääåðæêè: ",answer$headers$requestid), appendLF = T)
#Возвращаем результат в виде Data Frame
return(dictionary_df)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.