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

Аналитика

Как перенести данные из ВКонтакте в Power BI

37
0
7

Несмотря на недавнюю блокировку соцсети в Индии, ВКонтакте продолжает оставаться огромным источником полезной информации и статистики. В этой статье я расскажу, как с помощью написанного мной программного пакета rvkstat и коннектора  R получить данные из API ВКонтакте в Microsoft Power BI.

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

Установка необходимого программного обеспечения

Скачайте и установите актуальную версию языка R и Power BI. Это, пожалуй, самая простая часть работы, как R так и Power BI при установке не требуют от вас никаких дополнительных манипуляций и настройки — просто кликайте по кнопкам Next и Ok.

Как создать Standalone-приложение ВКонтакте

Для работы с API Вконтакте необходимо создать Standalone-приложение, непосредственно в интерфейсе социальной сети.

Для создания приложения перейдите по этой ссылке и выберите Standalone-приложение.

Для создания приложения перейдите по этой ссылке и выберите Standalone-приложение

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

Адрес сайта: https://selesnow.github.io/rvkstat/getCode/get_code.html
Базовый домен: selesnow.github.io
Доверенные redirect URI: https://selesnow.github.io/rvkstat/getCode/get_code.html
https://selesnow.github.io/rvkstat/getCode/get_token.html

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

Доверенные редирект URL

Устанавливаем пакет rvkstat

Пакет rvkstat является R-клиентом для работы с API ВКонтакте. Его можно установить из моего репозитория на GitHub с помощью приведенного ниже кода в R.

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

Если на данном этапе вы всё сделали правильно, в R-консоли увидите сообщение о том, что пакет rvkstat успешно установлен:

Если на данном этапе вы всё сделали правильно, в R-консоли увидите сообщение о том, что пакет rvkstat успешно установлен

Получаем токен разработчика

Следующий шаг — получение токена доступа к API ВКонтакте. Для этого необходимо подключить пакет rvkstat и с помощью функции vkAuth получить токен разработчика.

Для этого вставьте в R-консоль следующий код:

myCredential <- vkAuth(app_id = <ID Вашего Приложения>, app_secret = <Защищённый Ключ Вашего Приложения>)

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

Нажмите «Разрешить»

Затем откроется окно браузера, в котором будет ваш код доступа. Вам необходимо скопировать его и вставить в R-консоль в ответ на запрос «Enter code from URL:».

После чего откроется окно браузера, в котором будет ваш код доступа

Вам необходимо скопировать его и вставить в R-консоль в ответ на запрос

После этого в вашем рабочем окружении будет создан объект myCredential, именно в нём теперь хранится токен доступа к API.

Посмотреть его можно с помощью кода:

myCredential$access_token

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

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

Как получить данные из рекламного кабинета ВКонтакте в Power BI

На этом шаге можно смело закрывать R-консоль и открывать Power BI. Для загрузки данных жмите на «Get Data».

На этом шаге можно смело закрывать R-консоль и открывать Power BI. Для загрузки данных жмите на «Get Data»

В открывшемся диалоговом окне переходим в группу коннекторов «Other», выбирайте «R script» и нажимайте «Connect».

В открывшемся диалоговом окне переходим в группу коннекторов «Other», выбирайте «R script» и нажимайте «Connect»

Далее в диалоговое окно «R Script» вставьте R-код, подставив в аргументы функций свои значения.

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

##Получаем список рекламных кампаний
camp <- vkGetAdCampaigns(account_id = <id вашего рекламного кабинета>,
                        access_token = <токен разработчика, полученный на прошлом шаге>)

##Получаем статистику по рекламным кампаниям по дням
vk_stat_by_campaign <- vkGetAdStatistics(account_id = <id вашего рекламного кабинета>,
                                        ids_type = "campaign",
                                        ids = camp$id ,
                                        period = "day",
                                        date_from = "2010-01-01",
                                        date_to =Sys.Date(),
                                        access_token = <токен разработчика, полученный на прошлом шаге>)

Далее в диалоговое окно «R Script» вставьте R-код, подставив в аргументы функций свои значения

Если вы верно указали значения для всех аргументов функций, откроется диалоговое окно «Navigator», в котором можно выбрать две таблицы:

  • camp — справочник рекламных кампаний;
  • vk_stat_by_camp — статистика по рекламным кампаниям.

Если вы верно указали значения для всех аргументов функций, откроется диалоговое окно «Navigator», в котором можно выбрать две таблицы

После этого в Power BI будут загружены обе таблицы, и между таблицами будет установлена связь camp.id = vk_stat_by_camp.id.

Чтобы получить статистику в разрезе рекламных объявлений, необходимо в аргументе ids_type указать значение «ad» и в аргумент ids передать номера объявлений.

Например, можете воспользоваться следующим кодом:

##Подключаем пакет
library(rvkstat)
## Получаем список рекламных кампаний
ads <- vkGetAds(account_id = account_id, access_token = my_tok$access_token)
## Получаем статистику по объявлениям
vk_stat_by_ads <- vkGetAdStatistics(account_id = 1,
                                   ids_type = "ad",
                                   ids = ads$id ,
                                   period = "month",
                                   date_from = "2010-01-01",
                                   date_to =Sys.Date(),
                                   access_token = <токен разработчика полученный на прошлом шаге>))

Для загрузки общей статистики по рекламному кабинету необходимо передать в аргумент ids_type значение «office», а в аргумент ids передать номер рекламного кабинета.

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

Ловите список доступных функций для загрузки статистики из рекламного кабинета:

  • vkGetAdCategories — возможные тематики рекламных объявлений и их категорий;
  • vkGetAdAccounts — список доступных рекламных кабинетов;
  • vkGetAdClients — список клиентов из агентского аккаунта;
  • vkGetAds — список объявлений;
  • vkGetAdCampaigns — список рекламных кампаний;
  • vkGetAdStatistics — статистика показателей эффективности по рекламным объявлениям, кампаниям, клиентам или всему кабинету;
  • vkGetAdCityStats — статистика охвата аудитории по рекламным кампаниям или объявления в разрезе городов;
  • vkGetAdGenderStats — статистика охвата аудитории по рекламным кампаниям или объявления в разрезе пола;
  • vkGetAdAgeStats — статистика охвата аудитории по рекламным кампаниям или объявлениям в разрезе возраста;
  • vkGetAdGenderAgeStats — статистика охвата аудитории по рекламным кампаниям или объявлениям в разрезе пола и возраста;
  • vkGetAdBudget — остаток средств из рекламного кабинета;
  • vkGetAdPostsReach — подробная статистика по охвату рекламных записей из объявлений и кампаний для продвижения записей сообщества.

Подробную справку с примерами кода и полным описанием полей, которые будут загружены в результате работы функции в пакете rvkstat, можно получить с помощью команды help в R-консоли:

help("vkGetAdStatistics")

Полный список функций можно получить с помощью команды help(package  = "rvkstat"), либо перейдя в ReadMe репозитория пакета по ссылке.

Как построить визуализацию в Power BI

После загрузки данных в Power BI будет создано две таблицы:

  • camp — справочник рекламных кампаний;
  • vk_stat_by_campaign — статистика по рекламным кампаниям.

Между кампаниями будет автоматически создана связь по полям id.

На данном шаге данные уже загружены в Power BI, вам остаётся только построить нужные графики и таблицы

Остаётся только построить нужные графики и таблицы.

остаётся только построить нужные графики и таблицы

Выводы

ВКонтакте — одна из самых популярных социальных сетей в СНГ, а Power BI одна из самых популярных в мире BI-платформ. Связав эти инструменты, вы легко построите удобные дашборды и проанализируете свои рекламные кампании и объявления.

Что для этого нужно:

  1. Скачать и установить актуальную версию языка R.
  2. Скачать и установить актуальную версию Microsoft Power BI.
  3. Создать Standalone-приложение ВКонтакте.
  4. Установить пакет rvkstat.
  5. Получить токен для доступа к API ВКонтакте.
  6. С помощью функций доступных в пакете rvkstat написать код для загрузки данных в Power BI.
  7. Построить удобный и информативный dashboard.
Обнаружили ошибку? Выделите ее и нажмите Ctrl + Enter.

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

  1. 0
    18 дней назад

    Добрый день! 

    Что-то пошло не так:


    * installing *source* package 'rvkstat' ...

    ** R

    ** preparing package for lazy loading

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

      there is no package called 'tidyr'

    ERROR: lazy loading failed for package 'rvkstat'

    * removing 'C:/Program Files/R/R-3.4.1/library/rvkstat'

    Installation failed: Command failed (1)

    • 0
      Kirill Rakov
      18 дней назад

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

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

      install.packages('Rcpp')

      install.packages('tidyr')

      Далее попробуйте ещё раз установить rvkstat

      devtools::install_github('selesnow/rvkstat')

      • 0
        Алексей Селезнёв
        16 дней назад

        Спасибо! Ушёл пробовать. 

        Очень классные решения у Вас. Активно пользуюсь ryandexdirect, скидываю Ваш блог коллегам. Не планируете ли писать библиотеку для Facebook/Instagram? 

        • 0
          Kirill Rakov
          16 дней назад

          Для Facebook давным давно готово решение и даже есть статья на блоге. Пакет для facebook называется rfacebookstat.

          Статья с примером работы с этим пакет вот тут.


          Т.к. управление рекламными кампаниями в Instagram так же идёт из рекламного кабинета Facebook то и по Instagram вы тоже можете использовать пакет rfacebookstat,

          • 0
            Алексей Селезнёв
            13 дней назад

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

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

            my_vk_campaigns <- vkGetAdCampaigns(account_id = id-центра-клиентов, 

                                                client_id = id-клиента,

                                                access_token = токен)

            А вот получить статистику по кампаниям клиента уже не получается. 

            vk_stat_by_campaign <- vkGetAdStatistics(account_id = x,

                                                                                                                                               и так далее)

            Если на место account_id поставить id центра клиентов, то кампании не снимаются, так как в центре клиентов их и нет, а если туда поставить id клиента, то опять же не снимаются, потому что id клиента не является доступным, доступным является только id центра клиентов.

            У меня получилось снять статистику по клиенту агентства в целом, указав ids_type="client" и указав его id в аргументе ids, но вот углубиться на уровень кампаний уже нет. 
            • 0
              Kirill Rakov
              13 дней назад

              Добрый день, смотрите что в каком аргументе надо указать.

              #Получаем список РК клиента из агентского аккаунта.

              my_vk_campaigns <- vkGetAdCampaigns(account_id = id-центра-клиентов, 

                                                  client_id = id-клиента,

                                                  access_token = токен)

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

              #В   ids_type указываем что  вы хотите  получить статистику по РК, и на вход в  аргумент Ids передаёте нормера рекламных кампаний, в   account_id передаёте id вашего  агентского аккаунта,  в аргумент  ids передаёте вектор  с id рекламных кампаний вашего клиента.


              #Запрашиваем статистику по рекламным кампаниям клиента

              vk_stat_by_campaign <- vkGetAdStatistics(account_id = id-центра-клиентов,

                                                                                                                                                ids_type = "campaign" ,

                                                                                                                                                ids = my_vk_campaigns $id, 

                                                                                                                                               date_from = "2017-11-01",

                                                                                                                                               date_to = "2017-11-30",

                                                                                                                                               access_token = токен)

                  
              Таким образом вы получите статистику по рекламным кампаниям клиента прикреплённого к вашему агентскому аккаунту.
  2. 0
    месяц назад

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

    Я к Вам с новым вопросом. Не планируете ли добавлять в пакет stats.getPostReach (https://vk.com/dev/stats.getPostReach )? 

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

    Добрый день. Заметил расхождение в кликах между используемым в пакете методом ads.getStatistics и статистикой в рекламном кабинете. Написал в поддержку в вк, вот ответ:

    Сейчас метод ads.getStatistics не выгружает клики по промопостам, возвращает "0". Планируется доработать данный метод. Мы передали информацию разработчикам. Спасибо!

    Так что имейте в виду

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

    Алексей, как всегда, всё мега-полезно. Спасибо!

    Но столкнулся с такой ошибкой:

    Error in paste0("https://oauth.vk.com/access_token?client_id=", app_id,  :   object 'tLekc77RAXqe9DjN63cw' not found


    Код подтверждения не подходит. 


    (работаю из Украины, но прокси подключил)

    • 0
      Игорь Мальцев
      2 месяца назад

      Добрый день!

      Рад что материал был вам полезен.

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

      Что бы я мог вам помочь, прикрепите сюда код, который возвращает ошибку.

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

        Алексей, спасибо! Проблема действительно была в отсутствии кавычек.

        Но теперь есть другая проблема:

        Error in curl::curl_fetch_memory(url, handle = handle) : 

          Timeout was reached: Operation timed out after 10000 milliseconds with 0 out of 0 bytes received


        Пользуюсь Вашим прокси. 

        • 0
          Игорь Мальцев
          2 месяца назад

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


          Если такая ошибка появляется пробуйте остановить прокси через getProxy(action = "stop") и опять запустить получив новый IP и порт, используйте следующие фильтры:


          getProxy(port = "3128", country = "RU", supportsHttps = TRUE, action = "start")
  5. 0
    2 месяца назад
    Классный пакет, спасибо!  
  6. 0
    2 месяца назад

    делаю чуть проще. не задаю список ad_id, только id кабинета. запускаю скрипт на Python. получаю сразу детализацию до объявлений (в том числе и боковик со вступлениями, он как раз на скрине)


    jupiter

    выгружаю в csv и уже его подтягиваю в Power Bi. Это если стоит задача скрестить с метрикой и достижением целей. Если такой задачи нет, то csv самодостаточна для анализа и дальнейшего ведения рекламной кампании на стороне Вк. 

    • 1
      Eugeny Vershovsky
      2 месяца назад
      Субъективное "проще". В случае с R скриптом идет прямая загрузка в BI, в вашем случае -  лишний шаг с выгрузкой в csv или БД. В лучшем случае 1 лишний шаг, если настроена выгрузка csv по крону в ондрайв и синхронизация данных в BI из ондрайв. С другой стороны, таким способом(.csv) можно выгружать всё не только в Power BI, но и в Data Studio, для нормальной визуализации данных.
      • 0
        Definitely Not
        2 месяца назад

        Согласен. Решение может не самое простое, и слишком "в лоб". У пакета rvkstat настройка гибче и потенциал больше.

        Я ведь когда писал скрипт год назад, про Power Bi даже не слышал еще. И требовалась подмога конкретно в рамках таргета ВК. 

        Со временем, когда дорос до омниканала весь зоопарк данных стало неудобно скрещивать. Захотелось интеграций. OWOX, Data Studio. Hiconversion для небольших проектов нерационально заводить. Другое дело Power BI. А т.к. уже была готова утилита экспорта в csv, то не стал переписывать, а просто брал более удобные выгрузки из ВК (т.к. стандартный экспорт в csv из ВК кошмарный и неполный). 

    • 0
      Eugeny Vershovsky
      2 месяца назад

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


      По сути, с помощью rvkstat вы тоже можете не задавать список id объявлений, он же автоматом подтянется с помощью функции vkGetAds, и всегда будет актуальным.


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


      Python скрит вы вручную запускаете, или он по расписанию сам обновляет csv?

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

        Можно и в бд. 

        Изначальный смысл был в том чтобы автоматизировать часть вычислений при проведении тестовой рекламной кампании. Тест разбит на этапы. Проверка креативов в боковике. Проверка сегментов. Тест промо постов и прочее. 

        На каждом этапе нужно иметь исчерпывающую инфу по дальнейшим действиям. Поэтому вручную и поэтому csv. Т.е. как только этап завершен, данные в таблицу (копию в отчет) и готовим следующий этап. 

        Цели сразу лить в Power Bi не было. Она позже появилась когда встала необходимость с целями по метрике все это вязать. Пока просто обновляю csv (стата из Вк и из метрики), а в Power Bi уже связями получаю дашборд. 

  7. 1
    2 месяца назад
    Отличная статья, как всегда

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

Подписаться

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

Самое

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