knitr::opts_chunk$set( eval=FALSE, collapse = TRUE, comment = "#>" )
library(rfacebookstat)
Для начала работы с Facebook Marketing API предварительно требуется пройти процесс авторизации. В пакете rfacebookstat
есть несколько вариантов авторизации:
Наиболее быстрый и простой способ пройти авторизацию и получить маркер для работы с API Facebook - использовать приложение вшитое в пакет rfacebookstat
. Для этого вам достаточно использовать функцию fbAuth()
.
library(rfacebookstat) fbAuth()
После запуска функции fbAuth()
вы будете перенаправлены в браузер для подтверждения разрешения пакету rfacebookstat доступа к вашим рекламным кабинетам. Далее вы будете перенаправлены на другую страницу, где для вас будет сгенерирован краткосрочный маркер доступа к API. Его необходимо скопировать и вставить в консоль RStudio в качестве ответа на запрос "Enter your token:".
Полученный ранее краткосрочный токен будет изменён на долгосрочный, о чём вы узнаете из сообщения "Token changed to long time successfully" в консоли RStudio.
У вас есть возможно сохранить полученные данные в файл, для того, что бы в следующий раз не было необходимости проходить авторизации через браузер. Для этого ответьте y или yes на вопрос "Do you want save your access token into rds file C:/my_develop_workshop/ppc_report_2/selesnow.rfb_auth.rds for use it between R sessions ?", который вы увидите в консоли RStudio.
Если вы сделали всё согласно инструкции, то вы увидите сообщение "Token saved in C:/facebook/credentials/.rfb_auth.rds", которое говорит о том, что вы успешно получили и сохранили учётные данные необходимые для работы с Facebook Narketing API.
Также в консоль будет выведена некоторая информация о ваших учётных данных.
Facebook access token Access token: <hidden> App id: 176943372709235 App name: rfbstat User id: 1246563312029308 User name: Алексей Селезнёв Expires at: never
Из этого сообщения вы можете узнать id и название приложения которому вы предоставили разрешение на доступ к данным, id и имя пользователя под которым вы прошли авторизацию, а также дату до которой будет действителен полученный вами маркер доступа, never означает что вы получили бессрочный токен.
В поле Access token должен отображаться ваш маркер, но по умолчанию он не выводится в консоль, если вы работаете под Windows, то каждый раз когда вы будете выводить на печать объект полученный с помощью функции fbAuth()
ваш маркер доступа автоматически будет передан в буфер обмена.
Если вам необходимо вывести в консоль полученный маркер, то это можно сделать с помощью функции print()
с использованием аргумента show_token.
print(fbAuth(), show_token = T)
Facebook access token Access token: EAACg7dbg.................... App id: 176943372709235 App name: rfbstat User id: 1246563312029308 User name: Алексей Селезнёв Expires at: never
Теперь можно выполнить первый вызов к Facebook Marketing API. Например вы можете запросить список рекламным аккаунтам к которым у вас есть доступ с помощью функции fbGetAdAccounts()
.
fbGetAdAccounts()
Token load from C:/facebook/credentials/.rfb_auth.rds # A tibble: 420 x 10 id name account_id account_status amount_spent balance business_name currency owner <chr> <chr> <chr> <int> <chr> <chr> <chr> <chr> <chr> 1 act_~ 4772~ 47725506 1 9177567 2272 DEMOBAZA Ltd. EUR 7445~ 2 act_~ capp~ 14794670 1 2787098 0 "" AED 2642~ 3 act_~ Rual~ 67398193 1 3681338 4825 Rual Travel ~ USD 2357~ 4 act_~ Plas~ 66869331 1 6355231 3069 Plasico Comp~ USD 8519~ 5 act_~ Maxi~ 77890760 1 2101480 426 Maxi.az USD 1910~ 6 act_~ heal~ 171226248 1 3653879 0 Нетпик ЕООД USD 3689~ 7 act_~ Tric~ 363293104 1 81285 0 "" USD 5031~ 8 act_~ Spor~ 361373151 1 1424069 2053 Соларшоп ЕООД EUR 2201~ 9 act_~ Netp~ 262115113 1 7393426 2615 Netpeak USD 9055~ 10 act_~ Nata~ 362381897 1 6207085 6290 "" USD 1950~ # ... with 410 more rows, and 1 more variable: user_role <chr>
Это действительно самый простой способ авторизации, но у API Facebook очень быстро меняются требования к приложениям в связи с чем, приложение которое вшито в rfacebookstat
может быть недоступно для авторизации пользователям, если вы столкнулись с такой ошибкой то вы можете создать собственное приложение и пройти авторизацию через него.
Функция fbAuth()
по умолчанию использует встроенное приложение, но при необходимости вы можете создать собственное приложение и пройти процесс авторизации через него.
Подробно о приложениях, их регистрации и настройке можно узнать в официальной справке.
Для создания своего приложения необходимо выполнить следующие действия:
Важно! Не выводите своё приложение из статуса "в разработке", т.к. для этого требуется проверка приложения со стороны поддержки API Facebook, процесс проверки длительный и сложный. Но вы можете работать со своими рекламными кампаниями даже если ваше приложение имеет статус "в разработке"
fbAuth()
Соответственно авторизоваться с помощью собственного приложения можно передав в аргументы app_id и app_secret идентификатор и секрет созданного вами приложения.
fbAuth(app_id = 556970798471513, app_secret = "10fbc64e0c426feb4e774395c97237fa", username = "seleznev_a", skip_option = TRUE, reauth = FALSE, token_path = "D:/fb_auth_store")
Facebook access token Access token: <hidden> App id: 556970798471513 App name: MyAPP User id: 2834875706531386 User name: Алексей Селезнёв Expires at: 2019-12-31 09:32:15
При авторизации через собственное приложение с минимальным уровнем доступа к API срок действия вашего токена будет ограничен. В сообщение приведённом выше видно, что полученный токен действителен до 31 декабря 2019 года 09:32:15.
На самом деле пакет rfacebookstat
сам автоматически будет продлевать ваш токен по мере необходимости в случае если до завершена срока действия остаётся менее 10 дней.
Полученные вами учётные данные будут использоваться в каждом запросе к API Facebook. Поэтому после того, как вы один раз получили учётные данные, и сохранили их в файл, наиболее удобным вариантом их использования являются переменные среды или опции.
Это наиболее удобный способ работы с учётными данными в rfacebookstat
, к тому же его преимущество заключается в том, что не будет необходимости хранить ваш токен в виде текстовой строки в скрипте.
Создать переменные среды можно несколькими способами:
Sys.setenv()
.Файл .Renviron в домашнем каталоге R, и позволяет вам задавать переменные среды.
Для начала необходимо найти домашний каталог:
path.expand("~")
[1] "C:/Users/username/Documents"
Обычно это папка с вашими документами, как и в моём примере. Далее вам необходимо создать в этой папке файл .Renviron. И прописать в нём значение некоторых переменных, которые используются в rfacebookstat
:
fbAuth()
.fbAuth()
токен доступа к API.На самом деле указывать все три переменные не имеет смысла, наибольший приоритет имеет переменная RFB_API_TOKEN. Если она указана то остальные две переменные игнорируются. Но использовать эту переменную имеет смысл только если вы получили бессрочный токен доступа, т.к. пакет не может обновить переменную среды, и если токен имеет срок действия по его истечению вы получите ошибку.
В случае если вы прошли авторизацию через собственное приложение, и получили токен с ограниченным сроком действия, следует использовать переменные RFB_TOKEN_PATH и RFB_USER. Указав имя пользователя и путь к папке в которую был сохранён файл с учётными данными в процессе авторизации через функцию fbAuth()
, при авторизации вы можете указать папку с помощью аргумента token_path. По умолчанию файл сохраняется в рабочей директории на момент прохождения авторизации.
Т.е. у вы можете настроить файл .Renviron одним из двух вариантов.
RFB_API_TOKEN="abcdef788dsydsy9dcy"
Где abcdef788dsydsy9dcy
ваш токен для работы с Facebook API.
Либо:
RFB_USER="seleznev_a" RFB_TOKEN_PATH="D:/fb_auth_store"
В Windows можно создать переменные среды следующем способом:
Ещё один способ, до подключения пакета rfacebookstat
в скрипте задать переменные с помощью функции Sys.setenv()
.
Sys.setenv(RFB_USER="seleznev_a", RFB_TOKEN_PATH="D:/fb_auth_store") library(rfacebookstat)
Если вы правильно определили переменные среды при подключении пакета в приветственном сообщении вы увидите отметку 'success' напротив успешно установленных переменных. Например если вы установили имя пользователя и путь к папке то вы увидите следующее сообщение:
rfacebookstat presets: ...Set rfacebookstat token_path: success ...Set rfacebookstat username: success ...Set rfacebookstat access_token: none ...Set Facebook Marketing API Version: v5.0
Ещё один вариант инициализации учётных данных задать их с помощью опций. Также опции позволяют избежать дублирования аргументов без необходимости. Все опции вы можете задать в начале скрипта после подключения пакета. В rfacebookstat доступны следующие опции:
Пример использования опций:
library(rfacebookstat) options(rfacebookstat.username = "seleznev_a", rfacebookstat.token_path = ""D:/fb_auth_store")
После установки опций каждая из функций пакета будет запрашивать значения большинства аргументов именно из опций, что избавит вам от излишнего дублирования этих значений в коде.
Так же для установки опций в пакете реализован набор функций с префиксом fbSet*()
.
fbSetUsername(username)
- установка имя пользователяfbSetAccount(accounts_ids)
- установка идентификатор аккаунтовfbSetBusinessId(business_ids)
- установка идентификаторов бизнес менеджеровfbSetTokenPath(token_path)
- установка пути к папке для работы с токенамиfbSetApiVersion(api_version)
- установка версии APIВ каждом запросе к API необходимо передавать учётные данные, при этом каждая из функций пакета осуществляет поиск учётных данных по следующему пути.
Соответственно аргументы функции имеют максимальный приоритет.
Наиболее простой и правильный способ для работы с пакетом rfacebookstat
использовать переменные среды для хранения имени пользователя и пути к папке с файлами в которых хранятся учётные данные.
С помощью опций устанавливать дефолтные значения для определения нужного бизнес менеджера и списка аккаунтов под каждый конкретный скрипт.
Данный подход избавит вас от избыточности и дублирование в коде.
С помощью функции fbGetLogins()
вы можете запрашивать список логинов, под которыми вы уже успешно прошли авторизацию, и переключаться между ними.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.