Для начала работы с Facebook Marketing API предварительно требуется
пройти процесс авторизации. В пакете rfacebookstat есть
несколько вариантов авторизации:
Наиболее быстрый и простой способ пройти авторизацию и получить
маркер для работы с API Facebook - использовать приложение вшитое в
пакет 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.
 Facebook access token
 Access token:  EAACg7dbg.................... 
 App id:        176943372709235 
 App name:      rfbstat 
 User id:       1246563312029308 
 User name:     Алексей Селезнёв 
 Expires at:    neverТеперь можно выполнить первый вызов к Facebook Marketing API.
Например вы можете запросить список рекламным аккаунтам к которым у вас
есть доступ с помощью функции 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, и позволяет вам задавать переменные среды.
Для начала необходимо найти домашний каталог:
[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().
Если вы правильно определили переменные среды при подключении пакета в приветственном сообщении вы увидите отметку ‘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() вы можете запрашивать
список логинов, под которыми вы уже успешно прошли авторизацию, и
переключаться между ними.