Загрузки статистики из рекламных аккаунтов Facebook

Алексей Селезнёв

2019-06-19

Для загрузки статистических данных из рекламных аккаунтов Facebook в пакете rfacebookstat необходимо использовать функцию fbGetMarketingStat.

Аргументы функции fbGetMarketingStat

Функция имеет множество аргументов с помощью которых вы можете максимально точно обозначить формат получаемых из API Facebook данных.

Пример запроса статистики

library(rfacebookstat)

options(rfacebookstat.access_token = "ваш токен",
        rfacebookstat.accounts_id  = "act_000000000")

fb_data <- fbGetMarketingStat(
                  level              = "campaign",
                  fields             = "campaign_name,
                                        impressions,
                                        clicks,
                                        spend,
                                        actions",
                  date_start         = "2019-05-01",
                  date_stop          = "2019-05-10")

Выше приведён простейший способ загрузки стастистики по показам, кликам, тратам и действиям в разреще дней и рекламных кампаний. Использование опций rfacebookstat.access_token и rfacebookstat.accounts_id не является обязательным, но поможет вам избежать дублирование этих параметров в аргументах всех функций пакета, поэтому я рекомендую именно такой способ установки значений accout_id, access_token, business_id и api_version.

Разбивки (breakdowns)

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

Актульный список группировок всегда можно найти в официальной документации API Facebook по ссылке.

library(rfacebookstat)

options(rfacebookstat.access_token = "ваш токен",
        rfacebookstat.accounts_id  = "act_000000000")

fb_data_breakdowns <- fbGetMarketingStat(
  level              = "campaign",
  fields             = "campaign_name,
                        impressions,
                        clicks,
                        spend,
                        actions",
  breakdowns         = "region",
  date_start         = "2019-05-01",
  date_stop          = "2019-05-10")

Разбивки по действиям (action_breakdowns)

Вы можете сгруппировать результаты в поле actions. Аргумент action_breakdowns позволяет применить указанные ниже разбивки.

library(rfacebookstat)

options(rfacebookstat.access_token = "ваш токен",
        rfacebookstat.accounts_id  = "act_000000000")

fb_data_action_breakdowns <- fbGetMarketingStat(
  level              = "campaign",
  fields             = "campaign_name,
                        impressions,
                        clicks,
                        spend,
                        actions",
  action_breakdowns  = "action_reaction",
  date_start         = "2019-05-01",
  date_stop          = "2019-05-10")

Описание полей возвращаемых в ращбивке action_type

Применить одновременно несколько разбивок

Некоторые разбивки можно применять одновременно. Типы группирования, помеченные звездочкой (*), можно объединить с action_type, action_target_id и action_destination (название action_target_id).

Фильтрация данных

Вы можете применять фильтры к запрашиваемым данным. Использовать для этого необходимо аргумент filtering. Указывать выражение для фильтрации ы можете в упрошённом формате или в виде JSON объектов, ниже я приведу пример использования обоих вариантов.

Для фильтрации вам необходимо указать поле по которому вы будете фильтровать данные, оператор и значение. Допустимые операторы для фильтрации: EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, IN_RANGE, NOT_IN_RANGE, CONTAIN, NOT_CONTAIN, IN, NOT_IN, STARTS_WITH, ANY, ALL, AFTER, BEFORE, NONE

Пример фильтрации в упрощенном формате

В приведённом примере мы указали фильтр impressions LESS_THAN 5000 и таким образом оставили строки в которых поле impressions имеет значение менее 5000.

Если вам необходимо использовать множественный оператор (IN_RANGE, NOT_IN_RANGE, IN, NOT_IN) то в упрошенном формате запись будет выглядеть так: "publisher_platform IN instagram,facebook". Важно не ставить проблемы между списком значений.

Если вы хотите применить несколько фиьтров то вы можете передать в аргумент filtering вектор из выражений, например: c("clicks LESS_THAN 500", "impressions GREATER_THAN 1000").

Пример фильтрации в JSON формате

Как я уже писал выше вы можете описывать фильтры в виде JSON объектов, но такая запись будет более громозка. Давайте приведу вам аналогию с представленными выше фильтрами.

Упрошённый формат: "impressions LESS_THAN 5000"

JSON: "[{"field":"impressions","operator":"LESS_THAN","value":"5000"}]"


Упрошённый формат: "publisher_platform IN instagram,facebook"

JSON: [{"field":"publisher_platform","operator":"IN","value":["instagram","facebook"]}]


Упрошённый формат: c("clicks LESS_THAN 500", "impressions GREATER_THAN 1000")

JSON: [{"field":"clicks","operator":"LESS_THAN","value":"500"},{"field":"impressions","operator":"GREATER_THAN","value":"1000"}]

Лимиты API и аргумент request_speed

По использованию аргумента request_speed есть целая статья, но я всё же немного опишу зачем данный аргумент нужен.

В API Facebook на данный момент существует 2 уровня доступа к API (раздел в справке API Facebook):

По умолчанию все создаваемые вами приложения получают уровень “Разработка”. Данный уровень имеет серьёзные ограничения на количество отправляемых в API запросов. Функция fbGetMarketingStat при использовании аргумента interval равным "day" загружает данные по дням, и на каждый день отправляет отделый запрос в API.

Так же отдельно разделяются запросы если вы загружаете данные сразу по несколько аккаунтам, таким образом если вы планируете загрузить даннеы с 1 января по 21 января по 3ём аккаунтам функция отправит (31 * 3) 93 запроса к API.

В случае если вы имеете стандартный доступ то для вас это не будет проблемой и вы можете установить request_speed = "fast", но для приложений с уровнем доступа “Разработка” такой объём отправляемых запросов может выйти далеко за лимиты API, от части fbGetMarketingStat умеет обходить такие лимиты каждый раз уходя в бан при их привышении, но скорость загрузки данных при попадает в бан будет очень низкий, иногда бан может составлять 5 минут.

Поэтому если ваше приложение имеет уровень доступа “Разработке” при загрузке данных по дням за длительный период рекомендуется использовать request_speed = "slow". Если значениеи “slow” помогает вы можете самостоятельно задавать паузу в секундах между запросами, например request_speed = 4 будет задавать 4 секундую паузу между отправкой запросов.

Для получения стандартного доступа требуется перейти в ваше приложение в раздел настроек API Marketing и отправить заявку на “Ads Management Standart Access”.

Приложение

Приложение

Приложение

Приложение