yamarketR - пакет для работы 
с Партнёрским API Яндекс.Маркета 
на языке R
 
Краткое описание
Данный пакет предназначен для получения данных из Яндекс.Маркета с помощью языка R.
Оглавление:
- Установка пакета
- Авторизация в API Яндекс Маркет
- Функции пакета:
- Примеры работы с пакетом
На очереди работа над функциями:
- Расход по предложениям
- Параметры кампании
- Точки продаж
- Список предложений для модели (конкурентная аналитика в карточках)
Функции пакета постепенно будут добавляться и расширяться в описании будет указаны статус разработки и планируемые изменения.
Автор пакета
Павел Мрыкин, 
Руководитель отдела автоматизации и аналитики MediaGuru
email: mrykin@mediaguru.ru
skype: mrykin.pavel
facebook: facebook.com/mrykin.pavel
blog: www.mediaguru.ru/blog/
Установка пакета yamarketR
Установка пакета осуществляется из репозитория GitHub, для этого сначала требуется установить и подключить пакет devtools.
install.packages("devtools")
library(devtools)
После чего можно устанавливать пакет yamarketR.
install_github('mrykin/yamarketr')
Авторизация в API Яндекс Маркет
Вы можете в любой момент пройти аутентификацию в API Яндекс Маркет, однако это не обязательно, т.к. при запуске любой функции пакета, которая требует аутентификации будет запущен поиск файла с токеном доступа. Если файл не будет найден, то автоматически будет запущен процесс авторизации и запроса токена.
Перед выполнением аутентификации рекомендую заранее создать папку для сохранения токенов и далее объявлять её рабочей директорией перед запуском функций пакета.
Создание папки
# Задаём адрес директории (папки) для токенов
path <- "C:/Tokens/yamarketR"
# Создаём директорию если её нет
dir.create(path, recursive=TRUE)
Теперь перед началом работы с функциями пакета необходимо объявить созданную папку “рабочей”, это позволит избежать необходимости повторно проходить авторизацию
Задать “рабочую” папку
Чтобы объявить папку “рабочей” - выполните функцию:
# Устанавливаем рабочую директорию
setwd("C:/Tokens/yamarketR")
Пример кода для прохождения авторизации
Если вы всё же хотите заранее пройти аутентификацию - выполните следующую функцию:
yamarketrAuth(Login = "Ваш логин в Яндексе", NewUser = FALSE, TokenPath = "путь к папке для сохранения токена")
Обновление токена
При каждом обращении к API проверяется количество дней до того как используемый токен станет просроченным, если остаётся менее 30 дней токен автоматически будет обновлён, и файл с учётными данными перезаписан.
Аргументы функции yamarketrAuth
- Login - имя пользователя или электронный адрес на Яндексе, с которого есть доступ к нужному вам рекламному аккаунту
- NewUser - логическое выражаение TRUE или FALSE, признак того, что у пользователя обязательно нужно запросить разрешение на доступ к аккаунту (даже если пользователь уже разрешил доступ данному приложению). Получив этот параметр, Яндекс.OAuth предложит пользователю разрешить доступ приложению и выбрать нужный аккаунт Яндекса. Параметр полезен, например, если вы хотите переключиться на другой аккаунт. По умолчанию установлено значение FALSE.
- TokenPath - путь к папке, в которой будут сохраняться учётные данные, по умолчанию это рабочая директория, но можно указывать любой путь, как абсолютный например “C:/Tokens/yamarketR”, так и относительный “tokens”, при использовании относительного пути в рабочей директории будет создана папка с установленным вами названием, и в неё будут сохраняться файлы с расширением .RData в которых хранятся учётные данные.
Аргументы, общие для всех функций
Во всех функции пакета существуют общие аргументы, в дальнейшем эти аргументы рассматриваться в описании функций не будут.
- Campaigns - data.frame, полученный в результате выполнения функции yamarketGetCampaigns со списком всех магазинов аккаунта, ID конкретного магазина или вектор, содержащий ID нескольких магазинов, для которых необходимо получить данные.
- Login - Логин яндекса, под которым есть доступ к нужным магазинам. В этот вектор необходимо указывать логин в случае если необходимо подключаться к разным аккаунтам. В противном случае при каждом запросе к новому аккаунту - токен будет перезатираться. При указании логина в рабочей директории будет создан отдельный файл под каждый логин, в котором будут хранится нужные для работы учётные данные.
- TokenPath - Путь к папке в которой хранятся все файлы с учётными данными, по умолчанию все функции пакета пытаются найти нужный файл с хранящимися учётными данными в текущей рабочей директории, но вы можете указывать абсолютный или условный путь к совершенно любой папке на вашем ПК, в которой вы хотите хранить все учётные данные ваших аккаунтов Яндекс Директ. Пример условного пути TokenPath = “market_token”, в таком случае в рабочей директории будет создана папка market_token в которую и будут сохраняться все учётные данные, указав этот путь во всех функциях пакета вам не понадобится повторно запрашивать токены.
Функции пакета
Загрузка списка кампаний (магазинов)
yamarketrGetCampaigns(Login = NULL, TokenPath = getwd())
Данная функция возвращает data.frame со списком всех кампаний доступных в аккаунте которому был выдан токен для доступа к API.
Структура data.frame, возвращаемого функцией yamarketrGetCampaigns:
| Поле | Тип данных | Описание | 
| id | int | Идентификатор кампании. В интерфейсе он выводится в формате 11-******. В API же используется часть после дефиса. Количество знаков после дефиса может отличаться и зависит от того, как давно вы зарегистрировали кампанию. | 
| domain | chr | URL-адрес кампании | 
| state | factor | Статус магазина Возможные значения: 
 | 
| stateReasons | chr | Список причин, объясняющих статус магазина. Выводится, если параметр state имеет значения: 
 Код причины. Возможные значения: 
 | 
Загрузка текущего баланса магазинов
yamarketrGetBalance(Campaigns = NULL, Login = NULL, TokenPath = getwd())
Ссылка на официальную документацию.
Данная функция возвращает data.frame со списком всех кампаний доступных в аккаунте которому был выдан токен для доступа к API.
Структура data.frame, возвращаемого функцией yamarketrGetCampaigns:
| Поле | Тип данных | Описание | 
| id | int | Идентификатор кампании. В интерфейсе он выводится в формате 11-******. В API же используется часть после дефиса. Количество знаков после дефиса может отличаться и зависит от того, как давно вы зарегистрировали кампанию. | 
| balance | num | Текущий баланс магазина. Все расчеты производятся в условных единицах (у. е.). В Маркете установлен постоянный курс, который составляет: 
 | 
| daysLeft | int | Прогнозируемое количество дней, оставшихся до полного израсходования средств. | 
| recommendedPayment | num | Рекомендованная сумма платежа, в условных единицах. | 
Загрузка расхода магазинов за выбранный период
yamarketrGetCosts(Campaigns, fromDate = format(Sys.Date()-8, "%d-%m-%Y"), toDate = format(Sys.Date()-1, "%d-%m-%Y"), Login = NULL, TokenPath = getwd(), places = 0, model = 0, fetchBy = "daily")
Ссылка на официальную документацию.
Данная функция возвращает data.frame со расходами магазинов, указанных в переменной Campaigns за последние 7 дней.
Структура data.frame, возвращаемого функцией yamarketrGetCosts:
| Поле | Тип данных | Описание | 
| date | int | Дата, за которую был зафиксирован расход | 
| id | int | Идентификатор кампании. В интерфейсе он выводится в формате 11-******. В API же используется часть после дефиса. Количество знаков после дефиса может отличаться и зависит от того, как давно вы зарегистрировали кампанию. | 
| placeGroup | int | Места размещения при заданной в запросе группировке по местам размещения (параметр входных данных places=1). Возможные значения: 
 | 
| clicks | int | Количество кликов. Выводится за день, неделю или месяц (в зависимости от значения параметра fetchBy). | 
| spending | num | Расход по кликам в условных единицах с учетом НДС. Выводится за день, неделю или месяц (в зависимости от значения параметра fetchBy). | 
| shows | int | Количество показов предложения. Выводится за день, неделю или месяц (в зависимости от значения параметра fetchBy). | 
Аргументы:
- 
    fromDate, toDate - начальная и конечная даты отчётного периода, по умолчанию последние 7 дней. Формат: ДД-ММ-ГГГ (“15-03-2018”) 
- 
    places - Признак группировки по местам размещения: 1 — группировать. 0 — не группировать. По умолчанию места размещения не группируются. 
- 
    model - подробная информация о месте размещения предложения на карточке модели. Ограничение. Значение model работает, только если во входных данных задан параметр places со значением: 1 
- 
    fetchBy = “daily” - признак группировки по дням, неделям, месяцам (“daily”, “weekly”, “monthly”) 
Загрузка списка логинов, прикреплённых к кампании (магазину)
yamarketrGetLogins(Campaigns, howmuch = NULL, Login = NULL, TokenPath = getwd())
Ссылка на официальную документацию.
Данная функция возвращает список логинов, которые прикреплены к выбранным магазинам. Может использоваться для группировки магазинов одного клиента.
Структура data.frame, возвращаемого функцией yamarketrGetLogins:
| Поле | Тип данных | Описание | 
| id | int | Идентификатор кампании. В интерфейсе он выводится в формате 11-******. В API же используется часть после дефиса. Количество знаков после дефиса может отличаться и зависит от того, как давно вы зарегистрировали кампанию. | 
| logins | chr | логин или список логинов, можно регулировать кол-во выводимых логинов с помощью параметра howmuch | 
Атрибуты:
- 
    howmuch - атрибут определяет количество логинов, которые нужно вывести. По умолчанию - возвращаются все логины у которых есть доступ к магазину. Ограничение задаётся с помощью чисел 1, 2, 3 и т.д. 
Загрузка информации об ошибках магазинов
yamarketrGetTickets(Campaigns, actualType = NULL, Login = NULL, TokenPath = getwd())
Ссылка на официальную документацию.
Данная функция возвращает данные о текущих ошибках магазина, выявленных службой контроля качества Яндекс.Маркета.
Структура data.frame, возвращаемого функцией yamarketrGetTickets:
| Поле | Тип данных | Описание | 
| id | chr | Идентификатор кампании. В интерфейсе он выводится в формате 11-******. В API же используется часть после дефиса. Количество знаков после дефиса может отличаться и зависит от того, как давно вы зарегистрировали кампанию. | 
| ticketId | int | Идентификатор тикета на ошибку в службе контроля качества. | 
| offerURL | chr | URL-адрес предложения с ошибкой на сайте магазина. | 
| errorText | factor | Текстовое описание ошибки. Возможные значения приведены в описании параметра error-code в официальной справке. | 
| errorCode | factor | Код ошибки магазина. | 
| errorFoundTime | PISIXct | Дата и время выявления ошибки. | 
| feedTime | PISIXct | Дата и время загрузки прайс-листа. | 
| checkMethod | factor | Тип проверки магазина. Возможные значения: 
 | 
| status | factor | Статус ошибки. Возможные значения: 
 | 
| orderId | chr | Идентификатор заказа на сайте магазина. Присутствует в выходных данных, если параметр checkMethod - проверка с помощью добавления товара в корзину на сайте магазина. | 
Атрибуты:
- actualType - Фильтрация актуальных ошибок магазина.
Примеры работы с пакетом
Запрос текущего баланса по магазинам
# Подключаем пакет
library(yamarketr)
# Получаем список магазинов
campaigns <- yamarketrGetCampaigns(Login = "login", NewUser = TRUE)
# Получаем баланс по магазинам
balance <- yamarketrGetBalance(campaigns, Login = "login")
Запрос расхода по магазинам за выбранный период
# Подключаем пакет
library(yamarketr)
# Получаем список магазинов
campaigns <- yamarketrGetCampaigns(Login = "login", # Ваш логин в Яндексе
                                   NewUser = FALSE # Указание типа пользователя для авторизации
				   )
# Получаем расходы по магазинам за последние 7 дней, не включая сегодняшний, по дням, без разбивки по местам размещения
balance7daysAgo <- yamarketrGetCosts(campaigns, # список магазинов, полученный на предыдущем шаге
				     Login = "login" # Ваш логин на Яндексе
				     )
# Получаем расходы по магазинам с 1 января до 30 сентября, по месяцам, с разбивкой по местам размещения
balancePlaces <- yamarketrGetCosts(campaigns, # список магазинов, полученный на предыдущем шаге
				   Login = "login", # Ваш логин на Яндексе
				   dateFrom="01-01-2018", # Начальная дата отчётного периода
				   dateFrom="30-09-2018", # Конечная дата отчётного периода
				   places = 1, # Указание разбивки по местам размещения
				   model = 1, # Указание подробной разбивки размещения в карточке модели
				   fetchBy = "monthly" # Разбивка по месяцам.
				   )