Яндекс. Метрика — отличный инструмент для сбора данных о посещениях сайта, но, к сожалению, бывает так, что в веб-интерфейсе не хватает того или иного функционала – например, автоматической отправки отчета. В этой статье я подробно опишу, как получить статистику по роботности c помощью языка R.
1.1. Скачайте и установите актуальную версию R, а также интегрированную среду разработки R Studio, в которой вам будет удобнее работать.
1.2. В R-Studio создаем новый файл и вставляем код:
1.3. Чтобы запустить процесс установки пакетов, выделите весь текст и нажмите «Run»
2.1. Создаем приложение oauth.yandex.ru/client/new
Получаем следующее:
2.2. Идем по ссылке: oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>, где вместо <идентификатора> подставляем свое значение ID.
2.3. Даем разрешение:
2.4. Копируем и сохраняем токен:
3.1. Вставляем код в R-Studio:
Меняем: setwd, appToken, counterID, почту получателя, свою почту и пароль
* Если 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
3.3. Настраиваем расписание отправки:
3.4 Проверяем планировщик заданий (Панель управления ->Расписание выполнения задач)
Если задание есть, но письмо не отправляется — открываем свойства задания, вкладку «Действия» -> Изменить -> ставим 1 в конце строки
Преимущества автоматической отправки отчетов:
- Можно заранее настроить необходимый формат отчетов и не тратить время на выгрузки при приближении дедлайнов;
- Нет ограничений по формату и периодичности выгрузки
1. Установите язык R и необходимые библиотеки
1.1. Скачайте и установите актуальную версию R, а также интегрированную среду разработки R Studio, в которой вам будет удобнее работать.
1.2. В R-Studio создаем новый файл и вставляем код:
install.packages("xlsx")
install.packages("mailR")
install.packages("taskscheduleR")
1.3. Чтобы запустить процесс установки пакетов, выделите весь текст и нажмите «Run»
2. Получите токен доступа к API Яндекс.Метрики
2.1. Создаем приложение oauth.yandex.ru/client/new
- Права -> Яндекс.Метрика, выше выбираем «Получение статистики» и «создание счетчиков»;
- Callback URL -> выбираем “подставить URL для разработки»;
- Сохраняем
Получаем следующее:
2.2. Идем по ссылке: oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>, где вместо <идентификатора> подставляем свое значение ID.
2.3. Даем разрешение:
2.4. Копируем и сохраняем токен:
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
3.3. Настраиваем расписание отправки:
3.4 Проверяем планировщик заданий (Панель управления ->Расписание выполнения задач)
Если задание есть, но письмо не отправляется — открываем свойства задания, вкладку «Действия» -> Изменить -> ставим 1 в конце строки
Комментарии (11)
Nesovsemenot
09.09.2017 23:04Библиотека mailR также хорошо работает с другими почтами, не только gmail?
OMD_Annalect Автор
09.09.2017 23:08в качестве отправителя другие не тестировались, к сожалению. а отправляются на любую почту
atikhonov
09.09.2017 23:43Да, только параметры SMTP-сервера надо указать.
Помимо почты, сейчас может быть удобнее присылать результаты в телеграм (telegram) или слак (slackR).Nesovsemenot
11.09.2017 15:19подскажите, для этого нужны какие-то конкретные библиотеки?
в частности для телеграмма.
Или какие-то унифицированными методами R можно обойтись?
dmitry_ch
Скажите, а зачем указывать, что «на R»? Если я правильно понял, язык тут особой роли не играет, то же хоть на Бейсике, хоть на Ruby написать можно, логика не поменяется.
Често сказать, от такого заголовка ожидал обработку данных от Метрики средствами R.
OMD_Annalect Автор
указано «на R», потому что написано на R)
вроде бы в заголовке ничего не говорится про обработку данных
dmitry_ch
Ну это все логично, и R — язык как язык. Но от R все же ждешь не простого написания скриптов, правда же?
Тогда второй (сложный) вопрос — а почему написали именно на R? Алгоритм, как мы с вами понимаем, никак фичи R по обработке данных не использует, а язык не самый распространенный (и уж точно ни разу не предустановлен на каждой машине), чтобы брать его как самый распростаненный инструмент — это же не sh или bash, скажем, не perl, не даже python?
OMD_Annalect Автор
Для решения поставленной задачи обработка данных не нужна. Не думаю, что её нужно было включать только для того, чтобы вписаться в чьи-то ожидания.
Потому что предыдущий опыт работы связан с R, а не с каким-то другим языком. Опять же, нигде не написано, что R взят «как самый распространенный инструмент».
Что-то вы меня пытаетесь упрекнуть в том, что сами себе додумали.
dmitry_ch
Да какой упрек. Т.е. R потому, что на другом не получилось написать.
Просто пост уровня «скрипт на три строки без ветвления на языке, который я умею» (howto обычное, причем простое, не уровня Хабра, как мне кажется), и R там совсем не при чем.
Ничего личного. Открывал пост, чтобы узнать что-то новое, как на R что-то умно делается. А тут все равно что «как кандидат наук подметает улицу» — при этом «кандидат наук» вообще никак функционально не используется больше чем метлу держать.
OMD_Annalect Автор
Можно было с этого сразу и начинать. Судя по вашим выводам, мои ответы вам были не нужны.