{"id":14272,"url":"\/distributions\/14272\/click?bit=1&hash=9c431bca9c7cafdd4ed114bc7fb4d407f06f28aa165d6f80b9637d3a8581e5c2","title":"\u0421\u0431\u0435\u0440\u041a\u043e\u0442 \u2014 \u043f\u0435\u0440\u0432\u044b\u0439 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u043b\u044e\u0435\u043d\u0441\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0435\u0442\u0435\u043b \u0432 \u043a\u043e\u0441\u043c\u043e\u0441","buttonText":"","imageUuid":""}

Выгружаем данные из множества аккаунтов Яндекс.Директ. Часть 4

Совместно с коллегами из ADF MediaАртемом Дурневым и Султаном Назаралиевым – мы решили выпустить цикл из 6 статей, посвященных автоматизации процессов в Яндекс.Директе. О теории вы уже можете почитать в первой статье. Во второй вы узнаете, как отправлять запросы без знаний программирования, а в третьей – как получить данные из Директа с помощью языка R. Но это все – цветочки. Самое интересное впереди!

Сегодня мы научимся выгружать данные в Директе из большого количества аккаунтов одним кликом мыши. Метод, который будет представлен, подойдет как для специалистов, работающих с одним агентским аккаунтом, так и для обычных рекламодателей, у кого есть несколько клиентских кабинетов. Данный метод реализован с применением цикла “for”.

Немного теории

Начнем с того, что циклы служат базовыми строительными блоками, которые используются для любых повторяющихся задач. То есть, когда необходимо повторять блоки кода определенное количество раз, используются циклы. Это избавляет нас от добавления одного и того же кода многократно.

Цикл состоит из трех частей:

  1. Оператор – тип цикла. Мы будем использовать цикл типа for. Это цикл, который повторяется заранее известное количество раз.

  2. Условие – это определение количества повторений цикла.

  3. Тело – код цикла, который должен сработать при прохождении условия.

Пример:

for(i in 1:10) { print(i) } Где: for - оператор, (i in 1:10) – условие, i - это переменная, которая принимает значение от 1 до 10, print(i) – тело. Конкретно здесь мы просим напечатать в консоли все значения i, начиная с 1, заканчивая 10.

Оператор for будет работать до тех пор, пока не закончатся переменные.

Давайте попробуем применить полученные знания в деле!

Практическая часть

Чтобы приступить к выгрузке данных, нам нужно знать, как получить токен и установить R и среду RStudio.

Теперь приступим к самой практике:

Запишем данные всех аккаунтов, по которым необходимо получить отчет в один объект:

yandexToken <- list( 'ВАШ ТОКЕН' = 'client', 'ВАШ ТОКЕН' = 'agent' )

Вот сюда заполняются данные аккаунтов.

Нужно написать:

«Токен Яндекса» = «Тип аккаунта: client или agent»

Если аккаунт клиентский – просто запросим отчет и запишем в общую таблицу по всем аккаунтам.

Если аккаунт агентский– запросим всех активных клиентов агентства и запросим по каждому активному клиенту отчет.

Если нужно добавить ещё аккаунт – ставим в конце запятую и пишем новую строку.

Было:

yandexToken <- list( 'ВАШ ТОКЕН' = 'client', 'ВАШ ТОКЕН' = 'agent' )

Стало:

yandexToken <- list( 'ВАШ ТОКЕН' = 'client', 'ВАШ ТОКЕН' = 'agent', 'ВАШ ТОКЕН' = 'client' )

Данные аккаунтов понадобятся в цикле для получения статистики по всем клиентам, которые будут в таблице.

В полной версии скрипта мы вынесли все переменные настроек:

  • Токены аккаунтов
  • Поля отчета Яндекс Директ
  • Дата начала отчета Яндекс Директ
  • Дата окончания отчета Яндекс Директ
  • Почта аккаунта Google для загрузки в Google Spreadsheet

После редактирования переменных настроек скрипта нужно авторизоваться в Google Spreadsheet для загрузки таблиц.

Далее нам нужно создать пустую таблицу, в нее мы будем записывать результат из цикла.

generalData <- data.frame() # создаём пустой дата фрейм

В теле цикла используем функцию YDGetReport.

Аргументы функции YDGetReport:

  • ClientLogin — логин клиента в Яндекс.Директ. Если используется для агентского аккаунта, укажите логин клиента. Если ваш аккаунт представительский, логин представительского аккаунта;
  • Fields — поля отчета. Формат данных — массив;
  • StartDate — дата начала отчёта в формате ГГГГ-ММ-ДД;
  • EndDate — дата окончания отчёта в формате ГГГГ-ММ-ДД;
  • Token — токен Яндекса;
  • Goals — ID целей Яндекс Метрики, по которым требуется получить статистику. Необязательное поле. Формат данных — массив.

Без цикла эту функцию также можно использовать, если вам нужно получить статистику с одного аккаунта.

Сам цикл (основной код):

for(t in 1:length(yandexToken)) – здесь мы задаем условие, взять по очереди токены аккаунтов которые мы ввели в самом начале.

Мы проверяем к какому типу относится этот токен. Если это клиентский логин, то просто запрашиваем отчёт и добавляем данные в общую таблицу.

if(as.character(yandexToken[t]) == 'client'){ clientReport <- YDGetReport( ClientLogin = FALSE, Fields = reportFields, StartDate = dateStart, EndDate = dateEnd, Token = names(yandexToken)[t] )

Если логин агентский – запрашиваем список активных клиентов и по каждому клиенту получаем отчёт.

if(as.character(yandexToken[t]) == 'agent'){ my_client <- YDGetClients(names(yandexToken)[t]) # получаем клиентов агентства for(i in my_client) { clientReport <- YDGetReport( ClientLogin = i, Fields = reportFields, StartDate = dateStart, EndDate = dateEnd, Token = names(yandexToken)[t] )

Весь код

generalData <- data.frame() # создаём пустую таблицу куда запишем результат for(t in 1:length(yandexToken)){ if(as.character(yandexToken[t]) == 'client'){ clientReport <- YDGetReport( ClientLogin = FALSE, Fields = reportFields, StartDate = dateStart, EndDate = dateEnd, Token = names(yandexToken)[t] ) if(nrow(clientReport) > 0){ # Если есть данные - то записываем их в общую таблицу clientReport$client <- paste0('Direct client #', t) generalData <- rbind(generalData, clientReport) } } if(as.character(yandexToken[t]) == 'agent'){ my_client <- YDGetClients(names(yandexToken)[t]) # получаем клиентов агентства for(i in my_client) { clientReport <- YDGetReport( ClientLogin = i, Fields = reportFields, StartDate = dateStart, EndDate = dateEnd, Token = names(yandexToken)[t] ) if(nrow(clientReport) > 0){ # Если есть данные - то записываем их в общую таблицу clientReport$client <- as.character(i) generalData <- rbind(generalData, clientReport) } } } }

Запись в Google Таблицы с помощью пакета googlesheets4

Авторизация в Google Таблицах

auth <- sheets_auth(email = googleLogin)

Эту строчку кода нужно выполнить отдельно от всего остального кода, т.к. после выполнения этой функции R будет ждать введения в консоль токена, который вам выдаст приложение Google после подтверждения в браузере.

Запись

Эта функция предназначена для создания Google таблицы в том аккаунте в котором вы авторизовались

sheets_create(fileName, sheets = generalData)

Аргументы функции sheet_create:

  • name— Название Таблицы которая будет создана в Google Таблицах
  • sheets — данные которые будут записаны на лист Google Таблицы

Полный код, по традиции, приводим на сайте.

0
1 комментарий
Павел Погорелов

Очень интересно, жаль прекратили цикл статей.
Расскажите как получать данные об остатке средств на аккаунте и вместо direct client # задать свои произвольные значения

Ответить
Развернуть ветку
-2 комментариев
Раскрывать всегда