Блог про интернет-маркетинг для бизнеса

Аналитика

Как связать Яндекс.Директ с Microsoft Power BI

401
2
9
46

Яндекс.Директ собирает много данных, но, к сожалению, в веб-интерфейсе доступно очень мало информации для анализа. В этой статье я подробно опишу, как получить статистику о рекламных кампаниях c помощью языка R для визуализации в Power BI.

Microsoft Power BI — один из лидеров BI-индустрии. Бесплатной базовой версии вполне достаточно для решения большинства задач, благодаря этому инструмент довольно быстро стал очень популярным среди аналитиков и маркетологов.

1. Установите язык R и необходимые пакеты функций

1.1. Скачайте и установите актуальную версию R, а также интегрированную среду разработки R Studio, в которой вам будет удобнее работать.

1.2. В R Studio откройте все доступные панели с помощью сочетания клавиш Ctrl+Alt+Shift+0. В область Source вставьте код.

if(!"devtools" %in% installed.packages()[,1]){install.packages("devtools")}
library(devtools)
install_github('selesnow/ryandexdirect')

Чтобы запустить процесс установки пакетов, выделите код с помощью мыши и запустите его нажатием Ctrl+Enter.

Установите язык R и необходимые пакеты функций

2. Получите токен доступа к API Яндекс.Директ

2.1. Для получения токена доступа к API Директа воспользуйтесь кодом:

library(ryandexdirect)
ya_token <- ya_token <- yadirGetToken()

Для запуска также необходимо вставить код в область «Source» в R Studio, выделить с помощью мыши и запустить сочетанием клавиш Ctrl+Enter.

2.2. В открывшемся окне браузера предоставьте пакету «ryandexdirect» доступ к данным — нажмите кнопку «Разрешить». После этого откроется страница со сгенерированным токеном доступа к API.

Получите токен доступа к API Яндекс.Директ

Токен доступа еще понадобится, поэтому скопируйте его в любой текстовый документ и смело можете закрывать R Studio.

3. Загрузите данные в Microsoft Power BI

Чтобы обрабатывать данные из Яндекс.Директ в Power BI, необходимо настроить импорт. Рассмотрим два способа настройки: с помощью сценария на языке R и готового документа Power BI .

3.1. С помощью сценария на языке R

3.1.1. Откройте Power BI, нажмите «Получить данные» и выберите коннектор R-скрипт.

В диалоговое окно «Выполнить сценарий R» вставьте следующий код:

#Подключаем пакет
library(ryandexdirect)

#Получаем список кампаний
campList <- yadirGetCampaignList(logins = "<ВАШ ЛОГИН НА ЯНДЕКСЕ>", token = "<ВАШ ТОКЕН В ВИДЕ СТОКИ>")

#Получаем статистику по кампаниям
Stat <- yadirGetSummaryStat(campaignIDS = campList$Id,
                           dateStart = Sys.Date() - 90,
                           dateEnd = Sys.Date(),
                           token = "<ВАШ ТОКЕН В ВИДЕ СТОКИ>")

В код подставьте ваш логин Яндекс.Директ и токен доступа к API, полученный на втором шаге. Значения необходимо в кавычках.

С помощью сценария на языке R

3.1.2. Нажмите «ОК», и начнется процесс загрузки данных.

начнется процесс загрузки данных

В результате получите в Power BI две таблицы:

  • campList — со списком рекламных кампаний;
  • Stat — со статистикой по кампаниям.

Все денежные данные будут возвращены в условных единицах Яндекса. Текущий курс всегда можете найти в справке.

денежные данные будут возвращены в условных единицах

3.1.3. Связь между таблицами можете настроить непосредственно в Power BI по полям Id из таблицы campList и CampaignID из таблицы Stat.

По полям Id из таблицы campList

3.2. С помощью файла Power BI с коннектором к Яндекс.Директ

Второй способ более простой, потому что я уже создал документ Power BI и настроил отправку запроса к Яндекс.Директ через пользовательские параметры.

3.2.1. Скачайте файл с коннектором. В интерфейсе Power BI откройте выпадающее меню «Изменить запросы» и выберите команду «Изменить параметры».

выбираем команду «Изменить параметры»

3.2.2. Введите свой логин в Яндексе и API-токен, полученный на втором шаге. Нажмите «ОК».

Введите полученный логин

Выводы

На основе данных, импортированных из Яндекс.Директ в Microsoft Power BI, вы сможете создавать понятные отчеты и обновлять их в режиме реального времени. Подытожим основные шаги: 

  1. Установите актуальную версию языка R и R Studio. Инсталлируйте пакет «devtools» и «ryandexdirect».
  2. Получите токен доступа к API Яндекс.Директ и сохраните его.
  3. Загрузите данные в Power BI: 
    • с помощью сценария на языке R;
    • с помощью документа Power BI с коннектором к Яндекс.Директ.

На этом все. Если у вас что-либо не получится — пишите комментарии, постараюсь помочь.

Обнаружили ошибку? Выделите ее и нажмите Ctrl + Enter.

Комментарии (106)

  1. 0
    22 дня назад

    Алексей, здравствуйте.

    Еще раз спасибо за статью, все подробно и понятно.

    Сейчас столкнулся с проблемой. 

    В кабинете яндекс.директ есть несколько аккаунтов, пытаюсь выгрузить данные по всем аккаунтам в одном скрипте: 

    library(ryandexdirect)
    clientList <- yadirGetClientList(myToken)
    campaignList <- yadirGetCampaignList(logins = clientList$Login, token = myToken)
    stat <- yadirGetSummaryStat(campaignIDS = campaignList$Id,
                                dateStart = "2017-01-01",
                                dateEnd = Sys.Date(),
                                token = myToken)

    Выгрузка занимает большой промежуток времени, плюс в значениях выгружается много не нужных полей.

    Подскажите, есть ли способ выгрузить данные по всем логинам из кабинета используя параметр: yadirGetReport или как то уменьшить кол-во значений в параметре yadirGetSummaryStat ?

    В итоге что хотим получить следующие данные:

    Дата - Логин - Клики - Показы - Затраты


    Заранее, спасибо!

    • 0
      Денис Кулешов
      9 дней назад

      Как и обещал немного доработал пакет ryandexdirect.


      Для начала обновить пакет до версии 2.4.1. с помощью кода

      devtools::install_github('selesnow/ryandexdirect')


      После чего функция yadirGetReport станет векторизирована, т.е. аргумент Login на вход будет принимать вектор логинов, и функция будет по очереди загружать данные по каждому, на выходе вы получите большую таблицу с данными по всем аккаунтам по которым получилось вытянуть данные. 

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


      library(ryandexdirect)

      myToken <- yadirGetToken()

      clientList <- yadirGetClientList(myToken)


      stat      <- yadirGetReport(ReportType = "ACCOUNT_PERFORMANCE_REPORT", 

                                      DateRangeType = "CUSTOM_DATE", 

                                      DateFrom = "2017-01-01", 

                                      DateTo = Sys.Date(), 

                                      FieldNames = c("Date","Impressions","Clicks","Cost"), 

                                      Login = clientList$Login, 

                                      Token = myToken)

    • 0
      Денис Кулешов
      8 дней назад

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


      Для того, что бы с помощью yadirGetReport получить данные из множества аккаунтов надо воспользоваться циклом, пример кода ниже:

      library(ryandexdirect)

      myToken <-  yadirGetToken()

      clientList <- yadirGetClientList(myToken)

      #Формируем результирующий дата фрейм

      result <- data.frame()

      #Проходим циклом по всем логинам

      for(log in clientList$Login){

      stat      <- yadirGetReport(ReportType = "ACCOUNT_PERFORMANCE_REPORT", 

                                      DateRangeType = "CUSTOM_DATE", 

                                      DateFrom = "2017-01-01", 

                                      DateTo = Sys.Date(), 

                                      FieldNames = c("Date","Impressions","Clicks","Cost"), 

                                      #FilterList = c("Clicks GREATER_THAN 49","Impressions LESS_THAN 1001"), 

                                      #IncludeVAT = "YES", 

                                      #IncludeDiscount = "NO",

                                      Login = log, 

                                      Token = myToken)


      #Добавляем поле логин 

      stat$login <- log

      #Присоединяем данные к результирующей таблице

      result <- rbind(result, stat)

      }


      В ближайшее время я перепишу функцию yadirGetReport таким образом что бы она была векторизирована и на вход принимала вектор из логинов.
  2. 0
    месяц назад

    Алексей помогите! Пытаюсь установить ryandexdirect на R server (виртуальная машина Linux Ubuntu в сервисе Microsft Azure). Выскакивает ошибка при установке:

    https://s.mail.ru/89dv/c7GjNnL2u

    Как решить проблему? Спасибо!

    • 0
      Alexandr Pipko
      месяц назад

      Добрый день, ругается на киррилицу, т.к. в функциях есть сообщения об ошибках и ходе выполнения операций на русском языке, поэтому он и ругается. 

      Вы можете сделать следующее, в папке R, на репозитоиии ryandexdirect в открытом доступе есть код каждой из функций пакета, поэтому вы можете просто скопировать код нужной функции, запустить его в RStudio и в вашем рабочем окружении появится нужная вам функция, только для их работы ещё предварительно надо установить пакет httr.


      В планах у меня есть написать дополнительную версия пакета без киррилицы для Linux, но сейчас на этой нет времени.

  3. 0
    2 месяца назад

    Алексей, добрый день.

    Также заинтересовал ответ на вопрос предыдущего комментатора: "Подскажите, как можно дописать скрипт, что-бы он ежедневно подгружал данные за предыдущие день и добавлял их в массив данных. Сейчас скрипт обновляет весь массив это занимает значительное время."

    • 0
      Владимир Руденко
      2 месяца назад
      К сожалению просто догрузить 1 день к уж загруженному массиву данных в Power BI нельзя, в данном случае для ускорения процесса загрузки данных вы можете сделать следующее: 1. Написать R скрипт который будет ежедневно запускаться по рассписанию, как это сделать подробно описано тут. 2. Этот скрипт будет обращаться к API Директа, забирать данные за вчерашний день и записывать их в какую нибудь базу данных, для записи в MySQL например можно использовать пакет RMySQL, для PostgreSQL - RPostgreSQL, для BigQuery - bigrquery. 3. Power BI подключить именно к базе данных а не тянуть инфу напрямую из API за весь период.
  4. 0
    2 месяца назад

    Здравствуйте.

    Подскажите, как можно дописать скрипт, что-бы он ежедневно подгружал данные за предыдущие день и добавлял их в массив данных. Сейчас скрипт обновляет весь массив это занимает значительное время. 

    В данный момент скрипт выглядит следующим образом:

    #Подключаем пакет

    library(ryandexdirect)

    #Получаем список кампаний

    campList <- yadirGetCampaignList(logins = "Значение", token = "Значение")

    #Параметры

    Stat1 <- yadirGetReport(ReportType = "CAMPAIGN_PERFORMANCE_REPORT", 

    DateRangeType = "CUSTOM_DATE", 

                                DateFrom = "1.01.2017", 

                                DateTo = Sys.Date(), 

    FieldNames = c("Date", "CampaignId", "Device", "LocationOfPresenceId", "AdNetworkType", 

    "AvgCpc"), 

     

    FilterList = NULL, IncludeVAT = "NO", IncludeDiscount = "NO", 

    Login = "значение", Token = "Значение")


    • 0
      Денис Кулешов
      8 дней назад

      К сожалению просто догрузить 1 день к уж загруженному массиву данных в Power BI нельзя, в данном случае для ускорения процесса загрузки данных вы можете сделать следующее:


      1. Написать R скрипт который будет ежедневно запускаться по рассписанию, как это сделать подробно описано тут.

      2. Этот скрипт будет обращаться к API Директа, забирать данные за вчерашний день и записывать их в какую нибудь базу данных, для записи в MySQL например можно использовать пакет RMySQL, для PostgreSQL - RPostgreSQL, для BigQuery - bigrquery.

      3. Power BI подключить именно к базе данных а не тянуть инфу напрямую из API за весь период.

    • 0
      Денис Кулешов
      8 дней назад

      К сожалению просто догрузить 1 день к уж загруженному массиву данных в Power BI нельзя, в данном случае для ускорения процесса загрузки данных вы можете сделать следующее:


      1. Написать R скрипт который будет ежедневно запускаться по рассписанию, как это сделать подробно описано тут.

      2. Этот скрипт будет обращаться к API Директа, забирать данные за вчерашний день и записывать их в какую нибудь базу данных, для записи в MySQL например можно использовать пакет RMySQL, для PostgreSQL - RPostgreSQL, для BigQuery - bigrquery.

      3. Power BI подключить именно к базе данных а не тянуть инфу напрямую из API за весь период.

  5. 0
    2 месяца назад
    С временным интервалом разобрался. Теперь еще сложнее задача для меня. Можно ли вытащить из Директа метки объявлений. У меня есть РСЯ кампания и там группы объявлений по всем направлениям (медицина), но стоят метки. Также с объявами в кампаниях на поиске И я свожу отчеты именно по меткам ежемесячно.  Хочется сделать статистику в Power BI именно по направлениям а для этого нужно группировать по меткам всё. Можете подсказать как это сделать? Заранее спасибо
  6. 0
    2 месяца назад
    Добрый день, Алексей. Спасибо. Всё работает. Один вопрос. Статистика подгрузилась от 26.05.2017 по сегодняшний день. Как подгрузить более широкий диапазон времени? Например за год?
  7. 0
    2 месяца назад
    Добрый день, Алексей. Спасибо. Всё работает. Один вопрос. Статистика подгрузилась от 27.05.2017 по сегодняшний день. Как подгрузить более широкий диапазон времени? Например за год?
  8. 0
    4 месяца назад

    Алексей, а по какому признаку связать метрику и лиды из системы коллтрекинга? Есть опыт в такой связке?

    У меня есть каллибри и есть метрика. Как их связать, если значений уникальных нет не пойму..  Может где почитать про это есть..?

    • 0
      naarende
      4 месяца назад
      По поводу такой связки хорошо если есть возможность передавать в систему коллтрекинга ClientID из Google Analytics, в таком случае его можно будет использовать как идентификатор, возможно вам по этому поводу лучше обратиться в поддержку вашей системы коллтрекинга, наверняка у ребят уже есть какие то готовые решения под неё.
  9. 0
    4 месяца назад

    кстати, в tableau есть web data connector

    попробую его прикрутить 

  10. 0
    4 месяца назад

    Ладно, сменой пользователя на английские буквы всё решилось!

    Подключаю уже R в BI - очень долго загружает данные.

    • 0
      naarende
      4 месяца назад
      Да к сожалению в плане скорости загрузки данных R коннектор довольно медленный, и я так понимаю у вас в аккаунте много кампаний, собственно в этом причина долгой загрузки. Когда я писал эту статью ещё не было сервиса Reports в API Директа, советую вам попробовать переписать R код с использованием функции yadirGetReport - https://github.com/selesnow/ryandexdirect/blob/master/README.md#yadirgetreportreporttype--campaign_performance_report-daterangetype--last_month-datefrom--null-dateto--null-fieldnames--ccampaignnameimpressionsclickscost-filterlist--null-includevat--no-includediscount--no-login--null-token--null Пример кода: library(ryandexdirect) Stat <- yadirGetReport(ReportType = "CAMPAIGN_PERFORMANCE_REPORT", DateRangeType = "CUSTOM_DATE", DateFrom = '2017-01-01', DateTo = '2017-01-31', FieldNames = c("CampaignName","Impressions","Clicks"), FilterList = c("Clicks GREATER_THAN 49","Impressions LESS_THAN 1001"), Login = "<ВАШ ЛОГИН В ЯНДЕКСЕ>", Token = "<ВАШ ТОКЕН В ВИДЕ СТОКИ>") Этот вариант кода будет работать значительно быстрее, и у вас будет возможность создавать запрос к API с различными полями, почитайте справку по этой функции по ссылке которую я дал выше.
      • 0
        Алексей Селезнёв
        4 месяца назад

        Ещё раз пример кода, прошлый комментарий 

        library(ryandexdirect)
        My_report <- yadirGetReport(ReportType = "CAMPAIGN_PERFORMANCE_REPORT", 
                                    DateRangeType = "CUSTOM_DATE", 
                                    DateFrom = '2017-01-01', 
                                    DateTo = '2017-01-31', 
                                    FieldNames = c("CampaignName","Impressions","Clicks"), 
                                    FilterList = c("Clicks GREATER_THAN 10","Impressions LESS_THAN 5001"), 
                                    Login = <ВАШ ЛОГИН В ЯНДЕКСЕ>, 
                                    Token = <ВАШ ТОКЕН В ВИДЕ СТОКИ>)
  11. 0
    4 месяца назад

    эх)) моя бы воля.. нажал бы delete для всей винды по всему миру и закончились бы мучения у людей)

    Warning in install.packages("bitops") :

      'lib = "C:/Program Files/R/R-3.4.1/library"' is not writable

    Error in install.packages("bitops") : 

      unable to create ‘C:\Users\<U+0410><U+0434><U+043C><U+0438><U+043D>\Documents/R/win-library/3.4’

    In addition: Warning message:

    In dir.create(userdir, recursive = TRUE) :

      cannot create dir 'C:\Users\<U+0410><U+0434><U+043C><U+0438><U+043D>', reason 'Invalid argument'

    >


    ну вот что ему надо, а?)) ну что не создать ему и почему это моя блин проблема?)) 

    не прошу разбираться в моём случае, так, для статистики и для SEO по этой проблеме. 

    Сейчас меняю юзера и права редактирую. Всё позабывал уже в винде. Сложно.

  12. 0
    4 месяца назад

    could not find function "install_github"


    ох, потратил 2 часа на борьбу с виндой.. Как же на макос всё летает, а на винде любой тупит.

    Не завелось.


    Алексей, а как тоже самое сделать на MACoS с Tableau? Не нашел я в табло коннектора с R 

    • 0
      naarende
      4 месяца назад

      Добрый день.

      1. could not find function "install_github", сначала надо установить пакет devtools, т.е. install.packages("devtools") , т.к. функция install_github принадлежит именно этому пакету.


      2. А как тоже самое сделать на MACoS с Tableau? Не нашел я в табло коннектора с R, совершенно верно в Tableau сделать так нельзя, разве что с помощью R скриптов по которые будут запускаться по расписанию собирать в какую нибудь базу данных всю инфу, и Tableau подключить уже именно к базе данных. Всё что умеет Tableau с R делать, это читать данные из RData файлов.

  13. 0
    4 месяца назад
    Алексей, добрый день! спасибо за статью, все очень подробно описано и работает. А есть ли подобна статья для связи adwords и power bi ?
  14. 1
    4 месяца назад

    Добрый день!

    Алексей подскажите сколько будет стоить разработка коннектора power bi с crm bitrix24?

  15. 0
    4 месяца назад

    Попробовал с помощью сценария на языке R, та же самая проблема.

  16. 0
    4 месяца назад

    Алексей спасибо за статью.

    Подключался через Ваш коннектор. 

    Вопрос в следующем, если сравнивать дату в статистике Яндекс Директ и через коннектор Power bi, то они не бьются, различия с разницей в 1 день.

    То есть например, 21.06.17 - 108 показов и 9 кликов согласно статистике Яндекс Директ.

    Берем ту же Дату в системе Power Bi, то там другие цифры, но если поставить дату на день раньше, то данные совпадают.

    Подскажите как решить данную проблему?

    Спасибо!

    • 0
      Максим Чубаров
      4 месяца назад

      Здравствуйте, видимо проблема возникает в том то формат даты разный, самый простой способ исправить проблему это создать дополнительный столбец true_date, на DAX написать формулу true_date = Stat[Date] - 1.


      По идее должно сработать.

  17. 0
    7 месяцев назад

    Вопрос по бюджету? Не нашёл поля бюджет аккаунта. Как его получить?
    Также не нашёл конверсии(
    Буду благодарен за информацию!




  18. 0
    7 месяцев назад

    Друзья, как организовать цикл на Языке R?
    Допустим у меня есть 5 аккаунтов Яндекса, с которых мне нужно собрать и проанализировать статистику. Аккаунты Яндекса, а именно логин и пароль я ввожу в отдельную таблицу в Power BL, далее нужно перебрать по циклу логин и токен и запросить все данные с аккаунтов. Как это сделать? Как именно перебрать таблицу? 

    Спасибо!) 

    • 0
      Ruslan Nutfullov
      7 месяцев назад

      Добрый день, можно конечно и в Power BI руками ввести нужные данные и потом с помощью R и цикла их перебрать ну я вам советую создать csv файл в котором буде храниться логины и ТОКЕНЫ (пароли не нужны).


      Далее тоже самое что я вам описывал без цикла в виде цикла будет в принципе выглядеть примерно так:


      #Подключаем пакет

      library(ryandexdirect)


      #Формируем Data Frame со списком логинов и токенов

      dictionary <- data.frame(login = c("LOGIN1","LOGIN2"),

                                               token = c("TOKEN1","TOKEN2"))


      #Результирующий DataFrame

      Stat <- data.frame()


      #Запускаем цикл

      for(i in 1:nrow(dictionary)){

      #Получаем список кампаний первого аккаунта

      campList <- yadirGetCampaignList(logins = dictionary$login[i], token = dictionary$token[i])


      #Получаем статистику по кампаниям первого аккаунта

      StatTemp <- yadirGetSummaryStat(campaignIDS = campList$Id,

                                 dateStart = Sys.Date() - 90,

                                 dateEnd = Sys.Date(),

                                 token = dictionary$login[i])

      #Соединяем в одну таблицу

      Stat <- rbind(StatStatTemp)}



      В объект dictionary впишите все логины и токены, каждый логин при этом по порядку должен соответствовать своему токену.


      dictionary <- data.frame(login = c("LOGIN1","LOGIN2"),

                                               token = c("TOKEN1","TOKEN2"))



      Если вы всё таки решили эти данные хранить в csv таблице то вмесо команды выше напишите:


      dictionary <- read.table(file = "C:/Users/UserName/MyDictionary.csv", sep = ";", dec = "," , header = T)



      В аргументе file пропишите правильный путь к вашему csv файлу, файл должен состоять из двух колонок login и token, поля должны быть разделены точкой запятой (в противном случае измените аргумент sep).

      • 0
        Алексей Селезнёв
        7 месяцев назад
        По варианту с ручным вводом логинов и токено не коннектиться, та же самая ошибка. Хотя все данные верны
      • 0
        Алексей Селезнёв
        7 месяцев назад

        Всё сделал как по инструкции и тут ошибка

        Подробности: "ADO.NET: Ошибка сценария R.

        Ошибка в yadirGetCampaignList(logins = dictionary$login[i], token = dictionary$token[i]) :

          Ошибка авторизации - Client-Login не соответствует авторизационному токену

        Выполнение остановлено


        Если авторизовываться отдельно, то всё работает, логин и токен верный. 

        Авторизовываюсь через файл

        • 0
          Ruslan Nutfullov
          7 месяцев назад

          можете ваш код прикрепить просто вмест ологинов подставьте логин1 логин2 и т.д. и вместо токенов токен1, токен2 и т.д.


          Так мне будет проще воспроизвести вашу ошибку и помочь.

          • 0
            Алексей Селезнёв
            7 месяцев назад

            #Подключаем пакет


            library(ryandexdirect)



            #Формируем Data Frame со списком логинов и токенов


            dictionary <- read.table(file = "C:/Users/Polina/Desktop/BDKuhni/bd.csv", sep = ";", dec = "," , header = T)



            #Результирующий DataFrame


            Stat <- data.frame()




            #Запускаем цикл


            for(i in 1:nrow(dictionary)){


            #Получаем список кампаний первого аккаунта


            campList <- yadirGetCampaignList(logins = dictionary$login[i], token = dictionary$token[i])



            #Получаем статистику по кампаниям первого аккаунта


            StatTemp <- yadirGetSummaryStat(campaignIDS = campList$Id,


                                       dateStart = Sys.Date() - 90,


                                       dateEnd = Sys.Date(),


                                       token = dictionary$login[i])


            #Соединяем в одну таблицу


            Stat <- rbind(Stat, StatTemp)}


            Файл с аккаунтами: https://yadi.sk/d/xCx4kJDa3GsFSq
            Огромное спасибо! 

      • 0
        Алексей Селезнёв
        7 месяцев назад
        Огромное спасибо!))))) 
  19. 0
    7 месяцев назад

    Александр, огромное спасибо за полезную статью!) А есть ли возможность подключить сразу несколько аккаунтов Яндекс Директ и получать данные с каждого аккаунта? Спасибо! 


    • 0
      Ruslan Nutfullov
      7 месяцев назад

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


      Просто скопируйте код столько раз сколько у вас аккаунтов, и для каждого укажите его логин и пароль.

      #Подключаем пакет

      library(ryandexdirect)


      #Получаем список кампаний первого аккаунта

      campList1 <- yadirGetCampaignList(logins = "<ВАШ ЛОГИН НА ЯНДЕКСЕ1>", token = "<ВАШ ТОКЕН1 В ВИДЕ СТОКИ>")


      #Получаем статистику по кампаниям первого аккаунта

      Stat1 <- yadirGetSummaryStat(campaignIDS = campList1$Id,

                                 dateStart = Sys.Date() - 90,

                                 dateEnd = Sys.Date(),

                                 token = "<ВАШ ТОКЕН1 В ВИДЕ СТОКИ>")


      #Получаем список кампаний второго аккаунта

      campList2 <- yadirGetCampaignList(logins = "<ВАШ ЛОГИН НА ЯНДЕКСЕ2>", token = "<ВАШ ТОКЕН2 В ВИДЕ СТОКИ>")


      #Получаем статистику по кампаниям первого аккаунта

      Stat2 <- yadirGetSummaryStat(campaignIDS = campList2$Id,

                                 dateStart = Sys.Date() - 90,

                                 dateEnd = Sys.Date(),

                                 token = "<ВАШ ТОКЕН2 В ВИДЕ СТОКИ>")


      #Соединяем в одну таблицу

      Stat <- rbind(Stat1, Stat2)



      Примерно так это выглядит без цикла, если будут вопросы обращайтесь.
      • 0
        Алексей Селезнёв
        7 месяцев назад
        И ещё вопрос, реально ли собирать также данные по бюджету каждого аккаунта? Спасибо!))) 
      • 0
        Алексей Селезнёв
        7 месяцев назад
        У меня просто несколько разных кампаний и нужно оперативно отслеживать данные по всем кампаниям, Ваше решение просто гениальное!) 
      • 0
        Алексей Селезнёв
        7 месяцев назад
        Огромнейшее спасибо! А как написать в цикле?))) И было бы круто сделать через форму, как в файле коннектора))) 
  20. 0
    7 месяцев назад

    подкл
    Здравствуйте.
    Пытаюсь загрузить статистику по кампаниям, выдает ошибку

    "Подробности: "ADO.NET: Ошибка сценария R.

    Ошибка: не могу найти функцию "yadirGetSummaryStat"

    Выполнение остановлено"

    Как его исправить? Подскажите.

  21. 0
    7 месяцев назад

    При загрузке возникает ошибка, подскажите, пожалуйста, как её решить:

    ------------------------------------------------------------------------

    DataSource.Error: ADO.NET: Ошибка сценария R.

    Предупреждение:

    В strptime(x, f) :

      unable to identify current timezone 'AB@0E0=A:>5 ':

    please set environment variable 'TZ'

    Ошибка в curl::curl_fetch_memory(url, handle = handle) :

      Timeout was reached

    Вызовы: yadirGetSummaryStat ... request_fetch -> request_fetch.write_memory -> <Anonymous> -> .Call

    Выполнение остановлено

    --------------------------------------------------------------------------

    • 0
      Aleksandr
      7 месяцев назад

      Возможно вы найдёте ответ тут - http://stackoverflow.com/questions/17783686/solution-how-to-install-github-when-there-is-a-proxy


      У вас установлен пакет 'devtools'?

      • 0
        Алексей Селезнёв
        7 месяцев назад

        Да, пакет установлен. Пробую и через файл и через r-скрипт. Результат одинаковый.

        Команда "Sys.timezone()" Выдает следущее:

        ------------------------------------------------------------------------

        [1] "unknown"

        Warning message:

        In Sys.timezone() :

          unable to identify current timezone 'AB@0E0=A:>5 ':

        please set environment variable 'TZ'

        ------------------------------------------------------------------------

        Я так понимаю нужно как-то установить системную timezone.

    • 0
      Aleksandr
      7 месяцев назад

      Честно говоря у меня не получилось воспроизвести вашу ошибку.

      Вы пользуетесь готовым скачанным Power BI файлом который можно скачать в конце статьи, или пробуете самостоятельно ввести R скрипт в Power BI?


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

  22. 0
    8 месяцев назад

    Добрый день, поймал такой баг, вдруг кто знает

    Заранее благодарю.
    > install_github('selesnow/ryandexdirect')
    Downloading GitHub repo selesnow/ryandexdirect@master
    from URL https://api.github.com/repos/selesnow/ryandexdirect/zipball/master
    Installing ryandexdirect
    "C:/PROGRA~1/R/R-33~1.3/bin/x64/R" --no-site-file --no-environ --no-save  \
      --no-restore --quiet CMD INSTALL  \
      "C:/Users/1/AppData/Local/Temp/Rtmp8SiLVO/devtools148c232d62ec/selesnow-ryandexdirect-036cf69"  \
      --library="C:/Program Files/R/R-3.3.3/library" --install-tests 
    
    * installing *source* package 'ryandexdirect' ...
    ** R
    ** preparing package for lazy loading
    Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) : 
      there is no package called 'bitops'
    ERROR: lazy loading failed for package 'ryandexdirect'
    * removing 'C:/Program Files/R/R-3.3.3/library/ryandexdirect'
    Error: Command failed (1)
  23. 0
    8 месяцев назад

    Алексей, спасибо большое за статьи и библиотеку.


    1) Сбилось на гитлабе http://joxi.ru/MAj1PaLu48LR02


    2) При вызове функции 

    stat <- yadirGetSummaryStat(campaignIDS = campList$Id, dateStart = Sys.Date()-1, dateEnd = Sys.Date()-1, currency = "RUB", token = ya_token)

    Расход возвращается в у.е , а не в рублях.


    3) При вызове функции campList <- yadirGetCampaignList(logins = NULL, token = ya_token)

    показывается Warning message:

    In ifelse(is.null(dataRaw$result$Campaigns[[i]]$DailyBudget$Amount),  :  NAs introduced by coercion to integer range

    При том, дейсвительно в этих полях возвращается не цифровое значение: http://joxi.ru/l2ZNJoPIwaN8v2


  24. 1
    8 месяцев назад

    Алексей Селезнёв, большое спасибо за Ваш труд, ему цены нет!!!!

    еще хотел спросить, будет ли информация у Вас по коннекторам из срм систем, самых популярных таких как битрикс24, ретейлсрм, или амо? или это очень трудоемкий процесс, и коннектор очень не просто делается? 

    и если трудно то можно ли создать его за деньги? например создать счет на который могли б скинуться несколько человек, и если наберется сумма то Ваш программист сделает этот коннектор

    • 0
      Ярослав Качур
      8 месяцев назад
      Можно еще создать счет, на который бы скинулись несколько читателей, чтобы я опубликовал об этом пост ;)
    • 0
      Ярослав Качур
      8 месяцев назад
      Добрый день, пока что у меня в работе не было задачи для написания коннектора к этим системам, процесс написания коннектора в самом деле достаточно трудоёмкий потому что для этого необходимо изучить документацию по работ с API конкретной системы, но такой коннектор можно заказать в рамках услуги разработка веб аналитического инструмента, и я посмотрю что можно придумать.
  25. 0
    8 месяцев назад
    Добрый день! коннектор не грузится( поправьте плз ссылку
  26. 0
    8 месяцев назад

    Сервис - суть - визуализации, поэтому там нет смысла работать просто с данными.


    Вопрос - найдёте ли с десяток пользователей Power BI Pro - чтобы добавить ваш package в каталог и хотя бы иметь возможность "поиграться" там?

    • 0
      Дмитрий Кучеров
      8 месяцев назад

      Я думаю с этим пока лучше подождать, у меня есть идеи как улучшить пакет, и я жду выхода 5 версии API Директа, надеюсь на то что там возможность запроса данных будет пошире.


      Сейчас другие разрезы данных можно получить только отправив по API запрос в мастер отчётов, но проблема в том что мастер отчётов в таком случае отдаёт ответ в xml формате, который в R парсить сплошная боль.

    • 0
      Дмитрий Кучеров
      8 месяцев назад
      Прошу, прощения, Алексей, но с мобильного - ответ на самый нижний коммент появляется тут :-(
  27. 0
    8 месяцев назад

    Здравствуйте! У меня происходит ошибка. 

    installing *source* package 'ryandexdirect' ...

    Предупреждение в file(file, if (append) "a" else "w") :

      РЅРµ РјРѕРіСѓ открыть файл 'C:/Users/Qepcei/Documents/R/win-library/3.3/ryandexdirect/DESCRIPTION': No such file or directory

    Error in file(file, if (append) "a" else "w") :

      РЅРµ РјРѕРіСѓ открыть соединение

    ERROR: installing package DESCRIPTION failed for package 'ryandexdirect'

    * removing 'C:/Users/Сергей/Documents/R/win-library/3.3/ryandexdirect'

    Ошибка: Command failed (1)

    • 0
      Sergey Gamarko
      8 месяцев назад

      У вас в пути к библиотеке пакетов R, есть папка которая названа киррилицей, это папка с именем пользователя. 'C:/Users/Сергей/Documents/R/win-library/3.3/ryandexdirect'


      1. Сощдайте в ОС другого пользователя, что бы название учётной записи писалось только английскими буквами.

      2. Зайдите в Windows под новой учётной записью и попробуйте повторно установить пакет.
  28. 0
    8 месяцев назад

    Спасибо за отличную статью.

    Есть один вопрос: это конечный список показателей, которые можно выгрузить из Директа? Просто я не нашёл среди них ни CPC, ни общий расход на РК

    • 0
      Захар Костицын
      8 месяцев назад

      Уже сам разобрался и нашёл как минимум общий расход =)

      Единственная проблема - данные совпадают не полностью. Количество кликов и расход иногда существенно расходятся с данными из интерфейса. А в таком случае зачем тогда использовать этот сервис?

      • 0
        Захар Костицын
        8 месяцев назад

        1. Я собираю данные по сотням аккаунтов и ни в одном не было расхождений по кликам и показам, данные по расходу будут сходиться но вы их получаете в условных единицах яндекса. Ищите ошибку у себя.

        2. Никакого смысла в том что бы тянуть расчитанный cpc нет, т.к. вы его толком использорвать не сможете, у вас есть все данные для расчёта, создайте пользовательскую меру с элементарной формулой:

        cpc = iferror((sum(stat[SumSearch]) + sum(stat[SumSearch])) / sum(stat[ClickSearch]) + sum(stat[ClicksContext]) ; 0)

        И в вашей модели данных появится поле cpc которое будет отображать стоимость клика.



         
        • 0
          Алексей Селезнёв
          8 месяцев назад

          Алексей, тоже заметила у себя расхождения в данных - долго не могла понять, в чём дело. Оказалось, что в выгруженных данных смещается дата на 1 день. Думаю тут дело в Sys.Date()

          • 0
            Alena Agapova
            8 месяцев назад

            А вот такая ситуация может быть из-за разного формата дат, я проверю всё и отпишусь.

            Временным решением может быть пользовательское поле в котором будет от даты в текущей строке отниматься 1.

            • 0
              Алексей Селезнёв
              8 месяцев назад

              "Вы пользуетесь готовым файлом который можно скачать в конце статьи, или сами писали R скрипт с помощью этой статьи?"


              Сама писала R script
            • 0
              Алексей Селезнёв
              8 месяцев назад

              Алексей, ещё вопрос. У меня возникают проблемы с переименованием/перемещение столбцов. Как только переименовываю столбец или перемещаю его или изменяю его тип (например campaign id), возникает ошибка "Expression.Error: Столбец CampaignID таблицы не найден".

              Ошибка возникает даже, если это является моим первым действием после выгрузки данных (т.е. это вряд ли конфликт с предыдущими шагами)..

            • 0
              Алексей Селезнёв
              8 месяцев назад

              Спасибо!


  29. 0
    8 месяцев назад

    Алексей, а пробовали реализовать вывод данных для всех клиентов в агентском аккаунте  ? То есть чтобы несколько акков прогружать в Power BI. 

    • 0
      Konstantin Podyakov
      8 месяцев назад

      Пробовал, решение ниже, дублирую сюда.

      R скрипт который надо вставить в Power BI будет выглядеть следующим образом:

      library(ryandexdirect)

      clientList <- yadirGetClientList(<Token>)

      campaignList <- yadirGetCampaignList(logins = clientList$Login[clientList$Login %in% c(<Login1>,<Login2>)], token = <Token>)

      stat <- yadirGetSummaryStat(campaignIDS = campaignList$Id,

                                  dateStart = "2016-01-01",

                                  dateEnd = "2016-06-30",

                                  token = <Token>)


      В код подставьте в кавычках вместо:

      <Token> - "свой токен"

      <Login1> - "логин 1го клиента"

      <Login2> - "логин 2го клиента"

      Далее в Power PI будет загружено 3 таблицы:


      clientList - список клиентов агентсткого аккаунта

      campaignList - список всех рекламных кампаний по всем клиентам

      stat - статистика по всем рекламным кампаниям по клиентам чьи логины вы указале в строке campaignList <- yadirGetCampaignList(logins = clientList$Login[clientList$Login %in% c(<Login1>,<Login2>)], token = <Token>)


      Связи между таблицами можно настроить следующим образом:

      1. Поле CampaignID из таблицы stat служит ключём к таблице campaignList по полю Id.

      2. Поле login из таблицы campaignList служит ключём к таблице clientList по полю Login.

      • 0
        Алексей Селезнёв
        7 месяцев назад

        Добрый день, Алексей! 

        Попробовал выполнить код для агентского аккаунта и получил ошибку 








        • 0
          Антон
          7 месяцев назад

          Добрый день, Алексей! 

          Попробовал выполнить код для агентского аккаунта и получил ошибку :



          Подробности: "ADO.NET: Ошибка сценария R.

          Ошибка в yadirGetCampaignList(logins = clientList$Login[clientList$Login %in%  :

            Нет прав - Нет прав на указанного клиента

          Выполнение остановлено

          Помогите!











          • 0
            Антон
            7 месяцев назад
            Добрый день, возможно вы токен получили для какого то другого аккаунта, или в логине допустили ошибку, например указываете его с LOGIN@yandex.ru.
  30. 0
    8 месяцев назад

    Алексей, спасибо за статью.

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

    • 0
      Альберт Шайхутдинов
      8 месяцев назад

      Добрый день, R скрипт который надо вставить в Power BI будет выглядеть следующим образом:

      library(ryandexdirect)

      clientList <- yadirGetClientList(<Token>)

      campaignList <- yadirGetCampaignList(logins = clientList$Login[clientList$Login %in% c(<Login1>,<Login2>)], token = <Token>)

      stat <- yadirGetSummaryStat(campaignIDS = campaignList$Id,

                                  dateStart = "2016-01-01",

                                  dateEnd = "2016-06-30",

                                  token = <Token>)


      В код подставьте в кавычках вместо:

      <Token> - "свой токен"

      <Login1> - "логин 1го клиента"

      <Login2> - "логин 2го клиента"

      Далее в Power PI будет загружено 3 таблицы:


      clientList - список клиентов агентсткого аккаунта

      campaignList - список всех рекламных кампаний по всем клиентам

      stat - статистика по всем рекламным кампаниям по клиентам чьи логины вы указале в строке campaignList <- yadirGetCampaignList(logins = clientList$Login[clientList$Login %in% c(<Login1>,<Login2>)], token = <Token>)


      Связи между таблицами можно настроить следующим образом:

      1. Поле CampaignID из таблицы stat служит ключём к таблице campaignList по полю Id.

      2. Поле login из таблицы campaignList служит ключём к таблице clientList по полю Login.

      • 0
        Алексей Селезнёв
        8 месяцев назад

        Добрый день. Возникает ошибка:

        Подробности: "ADO.NET: Ошибка сценария R.

        Ошибка в dataRaw$data[[i]][c("FIO", "Login", "DateCreate", "Phone", "Email",  :

          неправильный тип подгруппы 'list'

        Вызовы: yadirGetClientList

        Выполнение остановлено

        "



        • 0
          Alena Agapova
          8 месяцев назад

          Эта ошибка возникает в случае если вы пытаетесь вытянуть список клиентов не из агентского аккаунта.


          Т.е. вы сгенерировали токен для обычного аккаунта, в котором списка клиентов быть не может, а функция yadirGetClientList работает только с агентским аккаунтом.


          Либо залогиньтесь под агентским аккаунтом и повторно сгенерируйте токен, либо вам просто нет смысла загружать список клиентов т.к. в обычном аккаунте его просто не существует.
      • 0
        Алексей Селезнёв
        8 месяцев назад

        Алексей, почему-то при загрузке каких-то отдельных логинов выдает ошибку:

        Произошла ошибка при попытке подключения:

        Подробности: "ADO.NET: Ошибка сценария R.

        Ошибка в curl::curl_fetch_memory(url, handle = handle) :

          Timeout was reached

        Вызовы: yadirGetSummaryStat ... request_fetch -> request_fetch.write_memory -> <Anonymous> -> .Call

        Выполнение остановлено

        "

        • 0
          Альберт Шайхутдинов
          8 месяцев назад
          Честно говоря сейчас затрудняюсь ответить в чём может быть ошибка, возможно какие то проблемы с доступами к этим аккаунтам?
  31. 0
    8 месяцев назад

    При подключении пакета ryandexdirect в R-studio вот такая ошибка, что делать?

    * installing *source* package 'ryandexdirect' ...

    ** R

    ** preparing package for lazy loading

    Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) : 

      there is no package called 'bitops'

    ERROR: lazy loading failed for package 'ryandexdirect'

    * removing 'C:/Users/Motor/Documents/R/win-library/3.3/ryandexdirect'

    Ошибка: Command failed (1)

    • 0
      Serg Motor
      8 месяцев назад

      Здравствуйте!

      Перед установкой пакета ryandexdirect установите пакет bitops с помощью следующего кода.


      install.packages("bitops")

      • 0
        Алексей Селезнёв
        8 месяцев назад

        Благодарю, все заработало!!!

        Но, если получать данные из агентского аккаунта, то данные пустые. Так и должно быть?
        • 0
          Serg Motor
          8 месяцев назад
          По идее такой проблемы быть не должно, функция работает и с агентским аккаунтом и с обычным,  в случае если запрашиваете данные из агентского аккаунта логин необходимо задавать всё равно клиентский, возможно в этом ошибка?
  32. 0
    8 месяцев назад

    Приветствую, при установке пакета ryandexdirect в R-studio вот такая ошибка, что делать?

    * installing *source* package 'ryandexdirect' ...

    ** R

    ** preparing package for lazy loading

    Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) : 

      there is no package called 'bitops'

    ERROR: lazy loading failed for package 'ryandexdirect'

    * removing 'C:/Users/Motor/Documents/R/win-library/3.3/ryandexdirect'

    Ошибка: Command failed (1)

  33. 1
    8 месяцев назад

    Добрый день. Спасибо за статью

    Вопрос от новичка:

    Если я сделаю отчет по данным метода 3,1 и опубликую в Power BI онлайн. То там данные также автоматически будут по датам обновлятся? Например как с ГА

    Или отчет нужно будет каждый раз обновлять через Десктоп?

    Заранее спасибо за ответ



Чтобы оставить комментарий, необходимо авторизироваться

Подписаться

на самую полезную рассылку по интернет-маркетингу

Самое

обсуждаемое популярное читаемое