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

Преимущества автоматической отправки отчетов:


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

1. Установите язык R и необходимые библиотеки


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

1.2. В R-Studio создаем новый файл и вставляем код:

install.packages("xlsx")
install.packages("mailR")
install.packages("taskscheduleR")

1.3. Чтобы запустить процесс установки пакетов, выделите весь текст и нажмите «Run»

image

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


2.1. Создаем приложение oauth.yandex.ru/client/new

  • Права -> Яндекс.Метрика, выше выбираем «Получение статистики» и «создание счетчиков»;
  • Callback URL -> выбираем “подставить URL для разработки»;
  • Сохраняем

image

Получаем следующее:

image

2.2. Идем по ссылке: oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>, где вместо <идентификатора> подставляем свое значение ID.

2.3. Даем разрешение:

image

2.4. Копируем и сохраняем токен:

image

3. Настраиваем автоматическую отправку отчета


3.1. Вставляем код в R-Studio:

Меняем: setwd, appToken, counterID, почту получателя, свою почту и пароль

library(xlsx) 
library(mailR)

setwd("D:/R") 

appToken <-"здесь должен быть токен" 

date1 <-format(Sys.Date()-1, "%Y-%m-%d") 
date2 <-format(Sys.Date()-1, "%Y-%m-%d")

counterID <-"здесь номер счетчика" 
metrics <-"ym:s:visits,ym:s:robotPercentage"
dimensions <-"ym:s:UTMSource"

api_request <-paste("https://api-metrika.yandex.ru/stat/v1/data.csv?id=",counterID,"&date1=",date1,"&date2=",date2,"&metrics=",metrics,"&dimensions=",dimensions,"&oauth_token=",appToken,sep="")
chem <-read.csv(file=api_request, encoding = "UTF-8")

filename <-paste("yandexbots_",date1,".xlsx",sep="")  

write.xlsx(chem, file=filename) 


textofbody <-paste ("Добрый день! Направляю отчетность по роботности за ", date1, sep="")
send.mail(from = "your_email@gmail.com",
          to = "здесь почта получателя",
          subject = "Роботность",
          body = textofbody,
          encoding = "utf-8",
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "your_email@gmail.com", passwd = "здесь пароль", ssl = T),
          authenticate = TRUE,
          send = TRUE,
          attach.files = filename,
          file.names = filename, 
          debug = TRUE)

* Если R-Studio ругается на xlsx, то идем по ссылке и скачиваем соответствующую версию java www.java.com/en/download/manual.jsp
** доступные метрики и группировки — можно посмотреть здесь

3.2. Идем в свой аккаунт Gmail и даем разрешение на взаимодействие с «ненадежными приложениями» (иначе письмо не отправится)
myaccount.google.com/u/4/security?hl=ru&pageId=none#connectedapps

image

3.3. Настраиваем расписание отправки:

image

image

3.4 Проверяем планировщик заданий (Панель управления ->Расписание выполнения задач)

Если задание есть, но письмо не отправляется — открываем свойства задания, вкладку «Действия» -> Изменить -> ставим 1 в конце строки

image

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


  1. dmitry_ch
    09.09.2017 22:44

    Скажите, а зачем указывать, что «на R»? Если я правильно понял, язык тут особой роли не играет, то же хоть на Бейсике, хоть на Ruby написать можно, логика не поменяется.

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


    1. OMD_Annalect Автор
      09.09.2017 23:04

      указано «на R», потому что написано на R)

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


      1. dmitry_ch
        09.09.2017 23:09

        Ну это все логично, и R — язык как язык. Но от R все же ждешь не простого написания скриптов, правда же?

        Тогда второй (сложный) вопрос — а почему написали именно на R? Алгоритм, как мы с вами понимаем, никак фичи R по обработке данных не использует, а язык не самый распространенный (и уж точно ни разу не предустановлен на каждой машине), чтобы брать его как самый распростаненный инструмент — это же не sh или bash, скажем, не perl, не даже python?


        1. OMD_Annalect Автор
          09.09.2017 23:48

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

          Потому что предыдущий опыт работы связан с R, а не с каким-то другим языком. Опять же, нигде не написано, что R взят «как самый распространенный инструмент».

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


          1. dmitry_ch
            09.09.2017 23:59

            Да какой упрек. Т.е. R потому, что на другом не получилось написать.

            Просто пост уровня «скрипт на три строки без ветвления на языке, который я умею» (howto обычное, причем простое, не уровня Хабра, как мне кажется), и R там совсем не при чем.

            Ничего личного. Открывал пост, чтобы узнать что-то новое, как на R что-то умно делается. А тут все равно что «как кандидат наук подметает улицу» — при этом «кандидат наук» вообще никак функционально не используется больше чем метлу держать.


            1. OMD_Annalect Автор
              10.09.2017 00:27

              Можно было с этого сразу и начинать. Судя по вашим выводам, мои ответы вам были не нужны.


  1. Nesovsemenot
    09.09.2017 23:04

    Библиотека mailR также хорошо работает с другими почтами, не только gmail?


    1. OMD_Annalect Автор
      09.09.2017 23:08

      в качестве отправителя другие не тестировались, к сожалению. а отправляются на любую почту


    1. atikhonov
      09.09.2017 23:43

      Да, только параметры SMTP-сервера надо указать.
      Помимо почты, сейчас может быть удобнее присылать результаты в телеграм (telegram) или слак (slackR).


      1. Nesovsemenot
        11.09.2017 15:19

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


        1. atikhonov
          11.09.2017 16:00

          в скобках их и написал: telegram