--- 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' ) ```