Загрузка данных из API Яндекс.Метрики в R
Вы можете поддержать проект любой произвольной суммой воспользовавшись кнопкой или перейдя по этой ссылке.
rym
является R интерфейсом для работы с API Яндекс Метрики, его функции позволяют вам взаимодействовать со следующими API:
install.packages('rym')
library(rym)
# переходим в рабочую директорию
setwd("C:\\webinars\\cybermarketing-2018")
# авторизаци под двумя разными аккаунтами
rym_auth(login = "vipman.netpeak", token.path = "metrica_token")
rym_auth(login = "selesnow", token.path = "metrica_token")
# API Управления
# получить список счЄтчиков
selesnow.counters <- rym_get_counters(login = "selesnow",
token.path = "metrica_token")
vipman.counters <- rym_get_counters(login = "vipman.netpeak",
token.path = "metrica_token")
# получить список целей
my_goals <- rym_get_goals(counter = 10595804,
login = "vipman.netpeak",
token.path = "metrica_token")
# получить список фильров
my_filter <- rym_get_filters(counter = 10595804,
login = "vipman.netpeak",
token.path = "metrica_token")
# получить список сегментов
my_segments <- rym_get_segments(counter = 10595804,
login = "vipman.netpeak",
token.path = "metrica_token")
# получить список пользователей счЄтчика
users <- rym_users_grants(counter = 10595804,
login = "vipman.netpeak",
token.path = "metrica_token")
# API отчЄтов
reporting.api.stat <- rym_get_data(counters = "23660530,10595804",
date.from = "2018-08-01",
date.to = "yesterday",
dimensions = "ym:s:date,ym:s:lastTrafficSource",
metrics = "ym:s:visits,ym:s:pageviews,ym:s:users",
sort = "-ym:s:date",
login = "vipman.netpeak",
token.path = "metrica_token",
lang = "en")
# Logs API
logs.api.stat <- rym_get_logs(counter = 23660530,
date.from = "2018-08-01",
date.to = "2018-08-05",
fields = "ym:s:date,
ym:s:lastTrafficSource,
ym:s:referer",
source = "visits",
login = "vipman.netpeak",
token.path = "metrica_token")
# API —овместимый с Core API Google Analytics v3
ga.api.stat <- rym_get_ga(counter = "ga:22584910",
dimensions = "ga:date,ga:source",
metrics = "ga:sessions,ga:users",
start.date = "2018-08-01",
end.date = "2018-08-05",
sort = "-ga:date",
login = "selesnow",
token.path = "metrica_token")
Вопрос безопасности использования разработанных мной пакетов я подробно описал в стать “Насколько безопасно использовать R пакеты для работы с API рекламных систем”, которую опубликовал на Хабре.
Авторизация в API Яндекс.Метрики осуществляется по протоколу OAuth2, если коротко этот протокол позволяет вам использовать сторонние приложения для управления своими рекламными материалами не передавая свои учётные данные, логин и пароль орт входа в аккаунт.
В пакете rym для авторизации предназначена функция rym_auth
. При использовании данной функции процесс авторизации идёт по описанной тут схеме, единственным уязвимым местом в данном случае является период от момента генерация кода подтверждения до ввода его в консоль R.
Объясню почему, вот как отображаются в Google Analytics данные о посещении страницы генерации кода подтверждения.
Т.е. код идёт после знака ‘?’, и считается GET параметром, который фиксирует счётчик Google Analytics, но срок жизни такого кода подтверждения заканчивается сразу после его использования, т.е. сразу после того, как вы ввели его в консоль R. Максимальный срок жизни такого кода - 10 минут.
При этом сам токен генерируется не на сайте, а запрашивается непосредственно из R у сервера oauth.yandex.ru в обмен на авторизационный код, и через данный сайт он вообще не проходит.
ВАЖНО никому не передавайте полученные с помощью пакета rym авторизационные токены, т.к. передав токен вы предоставите доступ к управлению вашими счётчиками Яндекс.Метрики, при этом доступ к ним вы не потеряете в любом случае.
Сами токены храняться на стороне сервера oauth.yandex.ru и они недоступны человеку зарегистрировшему приложение, подробно о том как проходит авторизация на стороне Яндекса можно узнать из официальной документации в разделе “Авторизация”.
Пакет rym был опубликован в основной, официальный репозиторий хранения пакетов для языка R - CRAN. Перед публикацией на этом репозитории пакеты проходят модерацию командой специалистов, что так же гарантирует вам безопасность его использования.
Весь код пакета rym открыт, и перед его использованием вы можете ознакомиться с ним на GitHub.
Для удобства работы, и быстрого поиска функций, все функция пакета rym
начинаются с префикса rym
.
Имена функций заданы в змеином_регистре (snake_case), т.е. название пишутся в нижнем регистре, и разделяются нижним подчёркиванием, (прим. rym_get_data).
Имана аргументов, так же пишутся в нижнем регистре, но разделяются точкой (прим. token.path).
Пакет rym
можно установить как из основного репозитория для хранения R пакетов CRAN, так и dev версию из GitHub.
Установка с CRAN осуществляется стандартноой командой: install.packages("rym")
.
Для установки rym
из GitHub вам потребуется пакет devtools
.
install.packages("devtools")
devtools::install_github("selesnow/rym")
Виньетки это набор статей, которые состовляют документацию к пакету написанную в произвольной форме. На данный момент к пакету rym
написанны следующие виньетки:
Для работы с API Яндекс.Метрики изначально вам необходимо пройти авторизацию, в rym
для этого существует отдельная функция rym_auth
. Но в целом нет необходимоси проходить авторизацию с помощью данной функции т.к. при любом обращении к API, с помощью любой из достпных в пакете функций будет запущен процесс авторизации, который в rym
происходит по следующей схеме.
При этом, для возможности работать в одной R сессии с различными аккаунтами Яндекс.Метрики, во всех функциях пакета вам доступны следующие аргументы:
Используя данные аргументы вы можете организовать работу сразу с несколькими пользовательскими аккаунтами в рамках одного R скрипта.
library(rym)
rym_auth(login = "ваш логин",
token.path = "C:/my_tokens/")
Перед использованием данного кода замените “ваш логин”, на логин пользователя Яндекс.Метрики под которым достпен нужный вам счёчик.
Для работы с API управления в rym
вам доступны следующие функции:
rym_get_counters
— список доступных счётчиков Яндекс.Метрики;rym_get_filters
— список настроенных фильтров в счётчике;rym_get_segments
— список настроенных сегмнтов в счётчике Яндекс.Метрики;rym_get_goals
— список настроенных целей в Яндекс.Метрике;rym_users_grants
— список пользователей, у которых есть доступ к счётчику Яндекс.Метрики, с указанием уровня доступа;rym_add_goal()
- создать цель в Яндекс Метрике;rym_add_segment()
- создать сегмент в API Яндекс Метрики.Набор аргументов для всех перечисленных выше функций одинаков:
rym_get_counters
rym_get_filters
rym_get_segments
rym_get_goals
rym_users_grants
При использовании приведённого нже примера замените *“ваш логин” на логин пользователя Яндекса, под которым есть доступ к нужному вам счётчику Яндекс.Метрики, вместо 000000000 введите номер нужного вам счётчика.*
library(rym)
# список доступных счётчиков
my_counters <- rym_get_counters(login = "ваш логин",
token.path = "metrica_token")
# список целей
my_goals <- rym_get_goals(counter = 000000000,
login = "ваш логин",
token.path = "metrica_token")
# список фильтров
my_filter <- rym_get_filters(counter = 000000000,
login = "ваш логин",
token.path = "metrica_token")
# список сегментов
my_segments <- rym_get_segments(counter = 000000000,
login = "ваш логин",
token.path = "metrica_token")
# список пользователей
users <- rym_users_grants(counter = 000000000,
login = "ваш логин",
token.path = "metrica_token")
Для работы с API отчётов в rym
предназначена функция rym_get_data
. На данный момент rym_get_data
принимает следующие аргументы:
,
ym:s:regionCityName==’Москва’ OR ym:s:regionCityName==’Санкт-Петербург’,
(ym:s:regionCityName==’Москва’ OR ym:s:regionCityName==’Санкт-Петербург’) AND ym:s:lastTrafficSource==’Переходы по рекламе’`.reporting.api.stat <- rym_get_data(counters = "00000000,111111111",
date.from = "2018-08-01",
date.to = "yesterday",
dimensions = "ym:s:date,ym:s:lastTrafficSource",
metrics = "ym:s:visits,ym:s:pageviews,ym:s:users",
filters = "ym:s:trafficSourceName=='Переходы из поисковых систем' AND ym:s:isNewUser=='Yes'",
sort = "-ym:s:date",
accuracy = "full",
login = "ваш логин",
token.path = "metrica_token",
lang = "ru")
Как и в прошлом примере вам необходимо указать номера своиз счётчиков, логин и путь к папке для хранения файла с учётными данными.
Если вы ранее работали с Core Reporting API Google Analytics, то именно данный API будет для вас наиболее удобен, т.к. он позволяет запрашивать данные используя такие же имена полей. Для работы с этим API в rym
существует функция rym_get_ga
.
Аргументы функции rym_get_ga
:
ga.api.stat <- rym_get_ga(counter = "ga:00000000",
dimensions = "ga:date,ga:source",
metrics = "ga:sessions,ga:users",
start.date = "2018-08-01",
end.date = "20daysAgo",
filters = "ga:source==google.ru",
sort = "-ga:date",
login = "ваш логин",
token.path = "metrica_token")
Перед использованием данного примера замените значения аргументов *counter и login на ваши.*
Logs API предназначен для получения несгруппированных данных из Яндекс.Метрики, на самом деле вы можете получить данные в двух группировках:
Для загрузки данных из Logs API можно использовать функцию rym_get_logs
, которая принимает следующий набор аргументов.
logs.api.stat <- rym_get_logs(counter = 00000000,
date.from = "2018-08-01",
date.to = "2018-08-05",
fields = "ym:s:date,
ym:s:lastTrafficSource,
ym:s:referer",
source = "visits",
login = "ваш логин",
token.path = "metrica_token")
Перед использованием данного примера замените значения аргументов counter и login на ваши.
Более подробно о загрузке данных по расходам из рекламных систем в Яндекс.Метрику вы можете узнать из виньетки “rym: Загрузка данных о расходах в Яндекс.Метрику”.
Для загрузки данных о расходах вам понадобятся следующие функции:
rym_upload_expense()
- Загрузка расходов в Яндекс.Метрикуrym_delete_uploaded_expense()
- Удаление данных о расходах из Яндекс.Метрикиrym_get_uploadings_expense()
- Список загрузок расходовАргументы функций для загрузки данных о расходах
# данные для загрузки
expense <- data.frame(Date = c("2020-06-01",
"2020-06-02"),
UTMSource = c("test_s_1",
"test_s_2"),
Expenses = c(88.12,
92.11),
UTMMedium = c("cpc",
"cpm"),
UTMCampaign = c("camp1",
"camp2"),
UTMTerm = c("term1",
"term2"),
UTMContent = c("cont1",
"cont2"),
Currency = c("RUB",
"RUB"),
Clicks = c(11, 15))
# отправка данных в Яндекс.Метрику
rym_upload_expense(counter = 11111,
data = expense,
login = 'yandex_login',
token.path = "D:/packlab/rym")
# Удаление данных из Яндекс.Метрики
rym_delete_uploaded_expense(counter = 11111,
data = expense,
login = 'yandex_login',
token.path = "D:/packlab/rym")
# получение списка загрузок
loaded <- rym_get_uploadings_expense(counter = 11111,
login = 'yandex_login',
token.path = "D:/packlab/rym")
Более подробно о загрузке оффлайн конверсий в Яндекс.Метрику вы можете узнать из виньетки “rym: Загрузка данных о расходах в Яндекс.Метрику”.
Функции для загрузки оффлайн конверсий в метрику:
rym_enable_offline_conversion()
- Включить учёт оффлайн конверсийrym_disable_offline_conversion()
- Выключить учёт оффлайн конверсийrym_allow_offline_conversion()
- Возвращает дату и время, начиная с которого конверсии могут быть привязаны к визитам для указанного счетчика.rym_get_uploadings_offline_conversions()
- Возвращает список загрузок оффлайн конверсийrym_upload_offline_conversion()
- Загрузка оффлайн конверсий в Яндекс.МетрикуПеред загрузкой, данные по оффлайн конверсии необходимо привести к нужной структуре.
Датафрейм должен содержать следующие столбцы:
UserId | ClientId | Yclid - Идентификатор посетителя сайта или рекламной кампании в Директе (пример: 12345). |
library(rym)
# создаём цель для оффлайн конверсий
rym_add_goal(123456789,
name = 'Заказ оплачен',
type = 'action',
conditions = list(type = 'exact',
url = 'order_confirmed'),
login = 'yandex_login')
# включаем учёт оффлайн конверсий
rym_enable_offline_conversion(123456789,
login = 'yandex_login')
# проверка можно ли загружать данные и за какой период
rym_allow_offline_conversion(123456789,
login = 'yandex_login')
# загружаем в метрику данные по оффланй конверсиям
rym_upload_offline_conversion(12345,
data = conv_data,
client.id.type = "CLIENT_ID",
login = 'yandex_login')
# получаем список загрузок оффлайн конверсий
uploads <- rym_get_uploadings_offline_conversions(
counter = 123456789,
login = 'yandex_login')
Более подробно о загрузке оффлайн конверсий в Яндекс.Метрику вы можете узнать из виньетки “rym: Загрузка данных о расходах в Яндекс.Метрику”.
Функции для загрузки данных о звонках в метрику:
rym_enable_calls()
- Включить учёт звонковrym_disable_calls()
- Выключить учёт звонковrym_allow_calls()
- Возвращает дату и время, начиная с которого звонки могут быть привязаны к визитам для указанного счетчика.rym_upload_calls()
- Загрузка информации о звонках в Яндекс.Метрикуrym_get_uploadings_calls()
- Возвращает список загрузок звонковПеред загрузкой, данные о звонках необзодимо привести к нужной структуре:
UserId | ClientId | Yclid - Идентификатор посетителя сайта или рекламной кампании в Директе (пример: 12345). |
library(rym)
# включаем учёт данных о звонках
rym_enable_calls(123456789,
login = 'yandex_login')
# проверка можно ли загружать данные и за какой период
rym_allow_calls(123456789,
login = 'yandex_login')
# загружаем данные о звонках в метрику
rym_upload_calls(12345,
data = conv_data,
client.id.type = "CLIENT_ID",
login = 'yandex_login')
# просмотр списка загрузок
uploads <- rym_get_uploadings_calls(
counter = 123456789,
login = 'yandex_login')