--- title: "Миграция с RAdwords на rgoogleads" author: "Алексей Селезнёв" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Миграция с RAdwords на rgoogleads} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, eval = FALSE, comment = "#>" ) ``` Пакет `RAdwords` работает с Google AdWords API версии 201809. Данный API давно не обновляется и прекратит работу 27 апреля 2022 года. В этой виньетке мы подробно разберёмся с тем, как перейти с `RAdwords` на `rgoogleads`, для того, чтобы с апреля 2022 года ваши скрипты по прежнему корректно собирали необходимые данные из рекламных аккаунтов в Google Ads. # Возможности пакета rgoogleads * авторизация в API Google Ads; * загрузка списка аккаунтов верхнего уровня; * загрузка всей иерархии аккаунтов из управляющих аккаунтов; * загрузка объектов рекламного кабинета: кампании, группы объявлений, объявления и другое; * загрузка статистических данных из рекламных аккаунтов; * загрузка метаданных ресурсов, полей ресурсов, сегментов и метрик; * загрузка прогноза и исторических данных из планировщика ключевых слов. # Преимущества пакета rgoogleads Сначала давайте разберёмся, какие преимущества дает переход на новый пакет `rgoogleads`: * `rgoogleads` работает с Google Ads API v8 (релиз от 09.06.2021), `RAdwords` работает с Google AdWords API v201809. Google AdWords API прекратит работу 27.04.2022; * для авторизации rgoogleads использует пакет gargle, что даёт гораздо больше гибкости по сравнению с тем, как устроен процесс авторизации в RAdwords; * в `rgoogleads` есть вшитый токен разработчика Google Ads и OAuth клиент для авторизации. Это избавит большинство пользователей от необходимости запрашивать у поддержки Google базовый доступ к API Google Ads и тратить время на создание проекта и OAuth клиента в Google Cloud Console; * у большинства функций rgoogleads аргумент cl, который позволяет осуществлять загрузку данных в многопоточном режиме; * в отличие от `RAdwords`, у `rgoogleads` есть функции для загрузки списков и иерархии аккаунтов; * у `rgoogleads` есть отдельные функции для загрузки основных объектов рекламных кабинетов, таких как рекламные кампании, группы объявлений, ключевые слова и объявления; * за счёт того, что запрос данных не разделён на отдельные функции, синтаксис rgoogleads более понятный и лаконичный. В RAdwords вам необходимо было изначально создать запрос функцией statement(), после чего использовать его для запроса данных в функции getData(); * у `rgoogleads` нет проблем при загрузке названий, содержащих кириллицу; * если запрос к API столкнулся со сбоем на сервере (статус ответа 429 или выше), пакет `rgoogleads` автоматически выждет паузу в 100 секунд и повторит попытку запросить данные. За счёт этого работа данного пакета более стабильна и устойчива к сбоям на сервере Google Ads API; * `rgoogleads` выводит подробное сообщение об ошибке. Для сравнения, если пользователь допустил ошибку в составлении запроса, `RAdwords` не выводит никакие сообщения; * `rgoogleads` позволяет запрашивать данные из планировщика ключевых слов. * используя `rgoogleads` вы можете запрашивать статистику по объектам, которые появились в Google Ads после сентября 2018 года. # Основные различия между Google AdWords API и Google AdsAPI К счастью, ключевых различий между устаревшим и новым API не так много, и процесс миграции не должен вызвать у вас особых сложностей. Ниже я перечислю ключевые моменты миграции. * нет необходимости менять автоионизационные данные, токен разработчика, id и secret OAuth клиента будут работать также и с новым Google Ads API; * в AdWords API отчёты были выделены в отдельную службу, в Google Ads API отчёты являются частью одного сервиса. Вам достаточно включить в отчёты необходимые поля с метриками, которые нужно получить; * В AdWords API существовали типы отчётов, например, CAMPAINGN_PERFORMANCE_REPORT. В Google Ads API их нет, вместо типов отчётов представлен огромный набор ресурсов; * у AdWords API и Google Ads API разный формат ответа от API; * в Google Ads API отсутствует параметр includeZeroImpressions, вместо него вы можете использовать фильтр metrics.impressions > 0. # Миграция с RAdwords на rgoogleads ```{r, eval = TRUE, results = "asis", echo=FALSE} migrate_table <- data.frame( operation = c("Авторизация", "Запрос метаданных", "Запрос отчётов"), radwords = c("doAuth()", "reports(), metrics()", "statement() + getData()"), rgoogleads = c("gads_auth_configure() + gads_auth()", "gads_get_metadata(), gads_get_fields()", "gads_get_report()") ) DT::datatable( migrate_table, colnames = c("Операция", "RAdwords", "rgoogleads"), options = list(pageLength = 5, dom = 'tip')) ``` Бывшие в Google AdWords типы отчётов, в Google Ads стали ресурсами. Ниже — таблица сопоставления из официальной справки: ```{r, eval = TRUE, results = "asis", echo=FALSE} library(dplyr) library(rvest) reports_table <- data.frame( adwords = c("ACCOUNT_PERFORMANCE_REPORT", "AD_PERFORMANCE_REPORT", "ADGROUP_PERFORMANCE_REPORT", "AGE_RANGE_PERFORMANCE_REPORT", "AUDIENCE_PERFORMANCE_REPORT", "AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT", "BID_GOAL_PERFORMANCE_REPORT", "BUDGET_PERFORMANCE_REPORT", "CALL_METRICS_CALL_DETAILS_REPORT", "CAMPAIGN_AD_SCHEDULE_TARGET_REPORT", "CAMPAIGN_CRITERIA_REPORT", "CAMPAIGN_PERFORMANCE_REPORT", "CAMPAIGN_SHARED_SET_REPORT", "CAMPAIGN_LOCATION_TARGET_REPORT", "CLICK_PERFORMANCE_REPORT", "DISPLAY_KEYWORD_PERFORMANCE_REPORT"), ads = c("customer", "ad_group_ad", "ad_group", "age_range_view", "campaign_audience_view, ad_group_audience_view", "group_placement_view", "bidding_strategy", "campaign_budget", "call_view", "ad_schedule_view", "campaign_criterion", "campaign", "campaign_shared_set", "location_view", "click_view", "display_keyword_view")) # reports <- read_html("https://developers.google.com/google-ads/api/docs/migration/mapping") %>% # html_element(css = ".responsive") %>% # html_table(header = TRUE) DT::datatable( reports_table, colnames = c("Тип отчёта в Google AdWords API", "Ресурс в Google Ads API"), options = list(pageLength = 20) ) ``` Соответствие полей «Отчёт» и полей ресурсов можно найти в официальной справке. Таблица очень большая, поэтому не вижу смысла дублировать её здесь. Ниже приведу пример запроса отчёта по эффективности рекламных кампаний с одним и тем же набором полей, с помощью пакета `RAdwords` и `rgoogleads`. ## Запрос отчёта по эффективности рекламных кампаний с помощью RAdwords ```{r} library(RAdwords) # авторизация adwords_auth <- doAuth() # составляем запрос query <- statement( select = c('CampaignName', 'Date', 'Clicks'), report = 'CAMPAIGN_PERFORMANCE_REPORT', start = '2021-06-01', end = '2021-06-30' ) # загрузка данных data1 <- getData( clientCustomerId = 'xxx-xxx-xxxx', statement = query, google_auth = adwords_auth ) ``` ## Запрос отчёта по эффективности рекламных кампаний с помощью rgoogleads ```{r} library(rgoogleads) # авторизация gads_auth_configure(path = 'D:/ga_auth/app.json') gads_auth(email = 'me@gmail.com') # загрузка данных data2 <- gads_get_report( resource = 'campaign', fields = c('campaign.name', 'segments.date', 'metrics.clicks'), date_from = '2021-06-01', date_to = '2021-06-30', customer_id = 'xxx-xxx-xxxx', login_customer_id = 'xxx-xxx-xxxx' ) ```