Маркетинг, аналитика и управление проектами

Свежие записи


Свежие комментарии


Архивы


Рубрики


Мета


Получаем статистику Яндекс.Директ в Excel и Power BI

Эльдар ЗабитовЭльдар Забитов

Я сделал коннектор на Power Query.

С помощью него можно забирать данные по API Яндекс.Директ напрямую в Excel или PowerBi.

Ссылка на GitHub → там всегда актуальная версия.

Забирать данные мы будем из сервиса Reports, он предназначен для получения статистики по аккаунту рекламодателя.
Коннекторы к остальным сервисам будут позже. Всю статистику для анализа показателей можно забрать из Reports.

Ниже пошаговая инструкция по получению статистики кабинета со скриншотами.

Как пользоваться

Создаем функцию в редакторе запросов

Первым делом создаем пустой запрос.
создаем пустой запрос в power bi

Открываем расширенный редактор, копируем содержимое функции и жмем «Ок».
Вставляем код функции в расширенный редактор

Запускаем функцию

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

Получаем токен (поле Token)

Авторизационный токен, или OAuth-токен, ― это специальный код, разрешающий доступ к данным конкретного пользователя. Для каждого пользователя Директа, от имени которого осуществляются запросы к API, необходимо получить отдельный токен.

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

Заполняем логин клиента (Поле ClientLogin)

Если хотим получить статистику из аккаунта агентства → пишем аккаунт клиента.
Если хотим получить статистику из обычного кабинета → пропускаем.

Выбираем список полей в отчете

Ориентируемся на список доступных полей в документации API Директа.
В качестве примера будем ориентироваться на следующие поля:

Все поля пишем через запятую.

Выбираем тип отчета

По ссылке список возможных отчетов. Выбираем нужный.
В примере будем рассматривать «CAMPAIGN_PERFORMANCE_REPORT»

Даты начала и конца

Пишем в формате yyyy-mm-dd. В примере будем рассматривать с 2017-05-01 по 2017-05-10.
Доступны динамические параметры Yesterday и Today.

После того как все поля будут заполнены — вызываем функцию.
1496830152435
Power query попросит разрешения идти в яндекс апи за данными → разрешаем.
1) Видим такую картину и не можем достать ничего :)
1496831968222

2) Жмем «Обновить предварительный просмотр» → после обновления двойной клик на документ.
14968319056483) Разделяем столбец по разделителю «Табуляция», удаляем первую строку, повышаем первую строку до заголовка. Profit.
1496832274994

Код функции

 

  • Евгений Захаров

    Круто! Спасибо большое! :)

    • Eldar Zabitov

      Пожалуйста :)

  • Denis Sobolev

    Не заработало почему-то:
    https://yadi.sk/i/mPO_Vx9X3JxxFw

    • Denis Sobolev

      Этот же токен в API метрики работает

    • Денис, приветствую.

      Эта версия не поддерживает написание YESTERDAY в дате.
      Нужно указывать конкретные даты в формате 2017-01-13

    • Роман Брандуков

      поле KeyWord не совместимо с этим типом отчёта

  • Александр Южанин

    Добрый день!Вопрос наверное тупой, но я новичок, так что извините. У меня кодировка кампаний отображается абракадаброй и стоимость потом в число не преобразуется. Я конечно ее через функцию замены точки на запятую конвертнул, но может можно как то проще все поправить. Подскажите, пожалуйста.

    • Eldar Zabitov

      Это у вас Power Query не в ту кодировку преобразовывает отчет.
      Уже на шаге когда достали отчет, откройте Расширенный редактор. Найдите там «1251» и замените на «65001» :)

  • odinaev94

    Здравствуйте, Эльдар!

    Вот такую ошибку выдает http://joxi.ru/D2PGvLgtdj0yVm?d=1 , хотя все делал по инструкциям… В чем может быть проблема?

    • Роман Брандуков

      у вас пробелы после запятой в названиях полей. Названи полей вводите через запятую без пробелов.

      • Eldar Zabitov

        Спасибо :)

        • Ввел без запятых, но все равно та же ошибка :( что делать? http://joxi.ru/82QEvKjs14Xk72?d=1

          • Eldar Zabitov

            Заменить тут: http://joxi.ru/nAyo7DjiXkpE7m
            на 65001

          • помогло, спасибо!

            а подскажите еще вопрос) есть такой замечательный сервис mybi.ru — у них получается вытаскивать и объединять все расходы (разные кампании) по домену, очень удобно. http://joxi.ru/a2XEvXlsypnQ6A?d=1

            Ваш функционал такое не позволяет сделать? И если нет, то как думаете сколько будет стоить написать такое?

  • Роман Брандуков

    Аналогичная ошибка, как у Дениса Соболева и odivaev94

  • Александр

    Добрый день! Спасибо за подробную инструкцию. Подскажите пожалуйста, можно ли получить данные об остатке бюджета? Необходимых полей в документации не удалось найти.

    • Eldar Zabitov

      Видел такое в API 4. В пятом видел только для агентств :(

  • Артем Володарский

    Добрый день!
    А зачем таким способом загружать данные? Можно же просто из директа выгрузить в ексель, а потом из екселя загрузить в power bi. Не совсем понял какие преимущества дает ваш способ?

    • Eldar Zabitov

      В первом случае вы выгружаете в эксель, потом загружаете в PBI, а еще скорее всего хотите провести какие-то манипуляции с цифрами.
      Во втором, вы можете выгружать, например, данные с начала года по вчерашний день. И просто нажать на кнопку «Обновить».

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

    • Yaroslav Solntsev

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

      • Артем Володарский

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

        • Yaroslav Solntsev

          Разумеется, в этом и суть. Настраиваете, проверяете, и если структура отчёта и модель данных настроена и нет необходимости их менять — просто обновляетесь и получаете счастье. ) Даже можно в облаке настроить обновление по расписанию, — вообще делать ничего не надо :)

          • Артем Володарский

            Оо, это круто! А где в уже готовом отчете ввести даты которые мне нужны, чтобы обновить отчет? Если я возвращаюсь на тот шаг где я вводил даты, то там снова нужно заполнять все поля http://take.ms/K1PVO

          • Yaroslav Solntsev

            Не нужно всё заполнять заново. Можно изначально ввести период, к примеру, самый большой, который возможен по сегодняшний день, используя «Today», т.е. дата начала — 2016-01-01 и дата окончания — today, а далее просто обновлять эту вызванную функцию. Таким образом данные будут считываться все, за весь период. А затем, уже в Отчете(который будет создан на основе вызванной функции), используя визуализацию фильтр(срез) по датам формировать отчет за нужный вам период.

          • Артем Володарский

            ого! спасибо большое!

  • Yaroslav Solntsev

    Эльдар, вместо сложного фрагмента кода, где вы получаете набор полей-метрик с спец тегами, можно оптимально написать одной строкой:
    fieldnamestext = «» & Text.Replace( FieldNames, «,», «» ) & «»

    • Eldar Zabitov

      Спасибо :)

  • Daria Shul

    Добрый день. У меня не получается использовать TargetingLocationId, выскакивает ошибка. ввожу в поле CampaignId,CampaignName,Clicks,Conversions,Cost,Date,TargetingLocationId
    в чем может быть ошибка?
    Спасибо

  • Артем Володарский

    Почему-то стала появляться такая ошибка http://take.ms/zkW0g Раньше ее не было. Подскажите пожалуйста из-за чего это может быть?

    • Yaroslav Solntsev

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

      • Артем Володарский

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

    • Eldar Zabitov

      Скорее всего связано с именем отчета. Яндекс иногда глючит при отдаче уже имеющегося имени. Так что попробуйте его изменить,

      А лучше еще и возьмите новый код с гитхаба) Там необязательно ставить пробел в клиентлогине и нет больше поля названия отчета)

      • Артем Володарский

        Большое спасибо! Похоже дело было действительно в названии отчета. Новый код помог. Только почему-то все работает с таким набором полей как у вас в примере. Если я еще добавляю, например поле Gender, то вижу пустую таблицу http://take.ms/1aqbP . Почему так?

        • Eldar Zabitov

          Далеко не все поля можно смотреть с другими. Почитайте в хелпе.
          Бывают ограничения.

  • Daria Shul

    можно ли как-то фильтровать по номеру конверсии?

  • Артем Володарский

    Почему-то все работает с таким набором полей как у вас в примере. Если я
    еще добавляю, например поле Gender, то вижу пустую таблицу http://take.ms/1aqbP . Почему так?

    • Eldar Zabitov

      попробуйте другой список метрик и тип отчета? :)
      В соответствии с тем, что есть в таблице от яндекса.

  • Vitaly Bakhvalov

    Эльдар, спасибо!
    Когда ждать коннектор для сервиса Bids?

    • Eldar Zabitov

      Виталий, приветствую.
      А давайте попробуем конкретнее? Что он должен уметь делать? :)
      Просто получить мин ставки для списка ключей?

  • Alexey Sporykhin

    Эльдар, привет.
    Подскажи, а для чего строчка кода в Headers
    #»Content-Type»=»application/x-www-form-urlencoded» ?
    Я пробовал ее убрать, ничего не меняется, все также работает.

    И еще вопрос: почему именно в xml данные, а на в json-запросе?
    Есть какие преимущества и недостатки между двумя методами?
    https://api.direct.yandex.com/json/v5/reports
    Спасибо.

    • Eldar Zabitov

      Просто был опыт подготовки XML :)

    • Eldar Zabitov

      #»Content-Type»=»application/x-www-form-urlencoded»
      на всякий случай

  • Alex Reznikov

    Эльдар, спасибо за такую прекрасную вещь!

    Подскажи пожалуйста как сделать эту табуляцию, не могу понять как и где нажать

    • Alex Reznikov

      Разобрался, спасибо

      • Eldar Zabitov

        :)

  • Лена Зубарева

    Эльдар, всё супер, но почему-то у меня выскакивает ошибка, если в DateTo я ставлю today(( с чем это может быть связано?

    • Eldar Zabitov

      Я обязательно поправлю этот момент :)
      TODAY надо писать большими буквами

  • Serg Motor

    Приветствую.
    Подскажите пожалуйста, возможно ли получать данные из разных аккаунтов директа одним запросом? Пробовал указать аккаунты через запятую не получилось :(

    • Eldar Zabitov

      Увы, никак. Апи яндекса так не умеет

    • Alexey Sporykhin

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

      • Eldar Zabitov

        Ну это же прям излишне.
        Они все встанут в очередь на создание отчета.

        Намного проще сделать несколько запросов и объединить их.

  • Alex Reznikov

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

    • Eldar Zabitov

      А что не работает? ПОпробуйте обновить, подождать и обновить повторно через минуту.
      Если даты стоят динамические — то отчету необходимо сформироваться на сервере яндекса.

      • Роман Брандуков

        Я тоже загрузил отчет в облако, но обновить его там не получается. Показывает, что ошибка в учетных данных. Пробовал разные варианты (и Windows, и Basic). Но еще дело в том, что для типа источника WebContents можно использовать только Anonymous. Так написано в самом PBI Desktop

        • Eldar Zabitov

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

  • Denis Or

    Спасибо! А можно пример использования для «самых умных», как я… Чувствую,что нужна аналитика — первое, что попалось на глаза — http://www.cossa.ru/155/87417/ и ваша ссылка — начал с вашей — все сделал — и теперь смотрю горящими глазами на табличку с компаниями и кликами… иии пустота) я до этого копировал статистику по каждой кампании копи пасте в ексель каждый день и заполнял по ним количество звонков и заявок на сайт… (ну собственно я до сих пор так делаю) и видел конверсию в завки и их заявок в продажи, но это не может долго продолжаться — я уже с ума схожу ручками все заполнять. Понимаю, что аналитику нужно изучать и программу и языки и все такое — но есть ли надежда, что как то можно без изучения — какой то малой кровью отделаться — на ваших примерах, например. Потому что времени на все катастрофически не хватает, а аналитика нужна… думается, что аналитика это краеугольный камень. Делегировать пока нет возможности — надо заработать. Примеры применения были бы очень очень! И спасибо еще раз — думается полезнейшая штука, только понять бы как использовать) Обезьян с гранатой никто не отменял)

    • Eldar Zabitov

      Денис, я не совсем понял вопрос :)
      Напишите в FB. Попробую помочь. Ссылка в подвале)

  • Алексей Михайлов

    Эльдар, спасибо, все работает!
    Сейчас пробую получать данные о расходах через API в PBI. Пока безуспешно (Web.Contents failed to get contents from ‘https://api.direct.yandex.com/v5/reports’ (400): Bad Request). Подскажете, куда копать?

    • Eldar Zabitov

      Алексей, выкатил свежую версию. Теперь обновление из облака работает.

  • Рома Брандуков

    Спасибо за обновление 1.4, теперь обновление в облаке работает!

    • Eldar Zabitov

      Рад :)

  • Альберт Шайхутдинов

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

    • Eldar Zabitov

      Если вы про автомат. обновление — уже сделал.
      Актуальная версия на гитхабе

  • Ольга Смердова

    Большое спасибо!
    Скажите, можно ли сделать так, чтобы не вводить FieldNames каждый раз?
    Убрала из pqyd все, кроме даты. Получается почти все. Кроме параметров. Работает только если указываю один:
    CampaignName
    Пытаюсь перечислить другие, директ не понимает.

    • Ольга Смердова

      получилось)

      • Eldar Zabitov

        Ура :)

  • Ольга Смердова

    Из за имени отчета бывают проблемы. Возможно поможет решить — если в него добавлять текущую дату и время?

    • Eldar Zabitov

      Оно и так длинное :)
      Обязательно добавлю, когда-нибудь

  • Артем Володарский

    Есть агентский аккаунт. Статистику по одному клиенту
    нормально удается получить. А по другому клиенту не получается. На выходе все
    время пустая таблица http://take.ms/G4egW

    Подскажите, куда копать чтобы найти причину этого косяка?

    • Eldar Zabitov

      Может кириллический домен?

      • Артем Володарский

        Нет, оба домена на латинице. Еще странная вещь. На том аккаунте который не срабатывал, нормально срабатывает такой набор полей: Date,CampaignName,Impressions,Clicks,Cost
        А вот такой нет: Date,Placement,Impressions,Clicks,Cost
        Разница с тем аккаунтом на котором все получается в том, что на нем нет графических объявлений директа. А на том аккаунте где НЕ получается, есть графические объявления.
        Может ли в этом быть причина?