## ---- include = FALSE--------------------------------------------------------- knitr::opts_chunk$set( eval = FALSE, collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- # library(ryandexdirect) ## ---- eval = TRUE, results = "asis", echo=FALSE------------------------------- library(magrittr) table_report_types <- data.frame(reptype = c("ACCOUNT_PERFORMANCE_REPORT", "CAMPAIGN_PERFORMANCE_REPORT", "ADGROUP_PERFORMANCE_REPORT", "AD_PERFORMANCE_REPORT", "CRITERIA_PERFORMANCE_REPORT", "CUSTOM_REPORT", "REACH_AND_FREQUENCY_PERFORMANCE_REPORT", "SEARCH_QUERY_PERFORMANCE_REPORT"), descr = c("Статистика по аккаунту рекламодателя", "Статистика по кампаниям", "Статистика по группам объявлений", "Статистика по объявлениям", "Статистика по условиям показа", "Статистика с произвольными группировками", "Статистика по медийным кампаниям. Отчет содержит только данные по кампаниям с типом «Медийная кампания», кампании остальных типов игнорируются", "Статистика по поисковым запросам"), grouping = c("–", "CampaignId", "AdGroupId", "AdId", "AdGroupId, CriteriaId, CriteriaType", "–", "В запросе на формирование отчета необходимо указать в поле FieldNames значение CampaignId", "AdGroupId, Query")) names(table_report_types) <- c("Тип отчёта", "Описание", "Добавляется группировка") table_report_types <- kableExtra::kable(table_report_types) kableExtra::kable_styling(table_report_types, bootstrap_options = c("striped", "hover")) ## ---- eval = TRUE, results = "asis", echo=FALSE------------------------------- library(magrittr) table_report_types <- data.frame(field = c("AdNetworkType, CampaignId, CampaignType", "AdFormat, AdGroupId, AdId, Age, AudienceTargetId, CarrierType, ClickType, CriteriaType, CriterionType, Device, DynamicTextAdTargetId, ExternalNetworkName, Gender, LocationOfPresenceId, MatchType, MobilePlatform, Placement, RlAdjustmentId, Slot, SmartBannerFilterId, TargetingLocationId", "Clicks, Conversions, ImpressionReach, Impressions", "AvgClickPosition, AvgCpc, AvgCpm, AvgImpressionFrequency, AvgImpressionPosition, AvgPageviews, AvgTrafficVolume, BounceRate, ConversionRate, Cost, CostPerConversion, Ctr, GoalsRoi, ImpressionShare, Profit, Revenue, WeightedCtr, WeightedImpressions, ", "Keyword, MatchedKeyword, Query"), operators = c("EQUALS, IN", "EQUALS, IN, NOT_EQUALS, NOT_IN", "EQUALS, IN, GREATER_THAN, LESS_THAN", "GREATER_THAN, LESS_THAN", "EQUALS, IN, NOT_EQUALS, NOT_IN, STARTS_WITH_IGNORE_CASE, STARTS_WITH_ANY_IGNORE_CASE, DOES_NOT_START_WITH_IGNORE_CASE, DOES_NOT_START_WITH_ALL_IGNORE_CASE")) names(table_report_types) <- c("Имя поля", "Доступные операторы") table_report_types <- kableExtra::kable(table_report_types) kableExtra::kable_styling(table_report_types, bootstrap_options = c("striped", "hover")) ## ----------------------------------------------------------------------------- # library(ryandexdirect) # # # создаём результирующий фрейм # res <- data.frame() # # # список логинов # log_list <- c("login1", "login2","login3", "login4") # # # проверка лиситов # # отмечаем что это первый запуск # check <- "first" # # # создаём последовательность уровней временной разбивки запросов # fetching_seq <- c("OFF", "MONTH", "WEEK", "DAY") # # # счётчик последовательностей разбивки # fetch_id <- 1 # # # запускаем цикл загрузки данных с проверкой лимитов # while ( ! is.null( log_list ) ) { # # # определяем уровень разбивки запроса # if ( fetching_seq[fetch_id] == "OFF" ) fetching <- NULL else fetching <- fetching_seq[fetch_id] # # # запускаем сбор данных # data <- yadirGetReport(DateRangeType = "CUSTOM_DATE", # DateFrom = "2018-06-01", # DateTo = "2019-05-31", # FieldNames = c("Date","CampaignName","Impressions","Clicks"), # Login = log_list, # FetchBy = fetching) # # # если загрузка была по одному аккаунту добавляем его логин # if ( length(log_list) == 1 ) { # data$Login <- log_list # } # # # проверяем список аккаунтов достигших лимита # log_list <- attr(data, "limit_reached") # # # выводим список аккаунтов достигших лимита # print(log_list) # # # если есть аккаунты достигшие лимита # if ( length(log_list) > 0 ) { # # очищаем от них общую таблицу # data <- data[ ! data$Login %in% log_list, ] # # переключаем уровень разбивки на более мелкий # fetch_id <- fetch_id + 1 # } # # # дописываем в результирующий фрейм данные # # по тем аккаунтам которые не упёрлись в лимит # if ( nrow(data) > 0 ) { # res <- dplyr::bind_rows(res, data) # } # # # проверяем модно ли разбить запрос на более мелкие части # if ( fetch_id > length(fetching_seq) && length(log_list) > 0 ) { # message("Запрос невозможно разбить на меньшие части") # message("Аккаунты которые достигли лимита при загрузке данных по дням: ", paste(log_list, collapse = ", ")) # limits_login <- log_list # break # } # }