R/yadirGetDictionary.R

Defines functions yadirGetDictionary

Documented in yadirGetDictionary

yadirGetDictionary <- function(DictionaryName = "GeoRegions",
                               Language = "ru",
                               Login         = NULL,
                               Token         = NULL,
                               AgencyAccount = NULL,
                               TokenPath     = getwd()){
  #Ïðîâåðêà íàëè÷èÿ ëîãèíà è òîêåíà

  #???????????
  Token <- tech_auth(login = Login, token = Token, AgencyAccount = AgencyAccount, TokenPath = TokenPath)

  #Ïðîâåðêà âåðíî ëè óêàçàíî íàçâàíèå ñïðàâî÷íèêà
  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("seggeshg", appendLF = T)
   packageStartupMessage(paste0("sgeesgegs: " ,answer$headers$`units-used-login`), appendLF = T)
   packageStartupMessage(paste0("awdffwafaw " ,strsplit(answer$headers$units, "/")[[1]][1]), appendLF = T)
   packageStartupMessage(paste0("awffaw  " ,strsplit(answer$headers$units, "/")[[1]][2]), appendLF = T)
   packageStartupMessage(paste0("fwawfawf " ,strsplit(answer$headers$units, "/")[[1]][3]), appendLF = T)
   packageStartupMessage(paste0("wafwfawa ",answer$headers$requestid), appendLF = T)

  #Âîçâðàùàåì ðåçóëüòàò â âèäå Data Frame
  return(dictionary_df)
}
grkhr/ryandexdirect documentation built on Dec. 10, 2019, 2:28 p.m.