Как автоматизировать создание объявлений Google Ads с помощью PHP- и XML-фида

Мануалы
15Нравится
2Комментарии
Поделиться
Как автоматизировать создание объявлений Google Ads с помощью PHP- и XML-фида

Абсолютно в каждой работе есть рутинные процессы, которые отбирают много сил и времени. К счастью, в большинстве IT-специальностей их можно автоматизировать, чтобы работать продуктивнее. Контекстная реклама — не исключение.

В этом посте я рассмотрю процесс реальной автоматизации создания кампаний, групп, объявлений и ключевых слов для аккаунта Google Ads.

Дисклеймер: Этот пост — пособие по решению узких задач при работе преимущественно с большими интернет-магазинами, чей ассортимент насчитывает десятки тысяч товаров. Пост даст решение РРС-специалистам, в остальном его стоит дать программисту проекта как инструкцию по автоматизации.

1. Какая автоматизация бывает

У Google Ads есть 2 способа автоматизации процессов при помощи языков программирования:

  • Google Ads Script;
  • Google Ads API.

Скрипты и правда позволяют удобно автоматизировать часть процессов и заметно помочь в работе, но сами по себе они недостаточно мощное средство, особенно в техническом плане. И вот почему:

  • Сценарии Google Ads для аккаунтов рекламодателей могут выполняться не более 30 минут, после чего они будут отменены. Все изменения, сделанные до отмены скрипта, будут применены.
  • Сценарии Ads Manager обычно могут выполняться не более 30 минут, после чего они будут отменены. Однако если сценарий Ads Manager использует метод executeInParallel для параллельной обработки учётных записей и указания метода обратного вызова, он может выполняться не более 60 минут, после чего отменяется. Это показано на иллюстрации ниже, где processAccount — это параллельная функция, а allFinished — метод обратного вызова при вызове executeInParallel.
Сценарий Ads Manager

1.1. Скрипты аккаунтов Google Ads

  • Один итератор вернёт не более 50 000 объектов (ключевые слова, объявления, группы объявлений или кампании). После этого iterator.hasNext () вернёт false, и будет записано предупреждение.
  • Один селектор может обрабатывать не более 10 000 идентификаторов в selector.withIds (). Если указано 10 000 или более идентификаторов, selector.get () выдаст ошибку времени выполнения. Аналогично, указание условия Id IN [LIST] со списком идентификаторов от 10 000 штук и больше приведёт к ошибке во время выполнения.
  • Один скрипт может обрабатывать не более 250 000 объектов всех типов. Iterator.hasNext () впоследствии вернёт false для любого итератора, и будет записано предупреждение.
  • Один скрипт может создать не более 250 000 ключевых слов и рекламы. Последующие попытки создания сущностей потерпят неудачу, и будет записано предупреждение.

1.2. Скрипты управляющих аккаунтов

  • Каждая учётная запись, обработанная сценарием Менеджера объявлений, получает свою собственную квоту, как указано выше.
  • При использовании метода executeInParallel скрипт может обрабатывать до 50 учётных записей.

Проще говоря, как бы вы или ваш программист ни старался, у вас будет всего 30 минут на работу скрипта. Уже после первой минуты скрипт может прервать работу, и вы об этом не узнаете.

Сам язык Javascript, который используется в Google Script, не готов к определённым нагрузкам в силу своих технических особенностей.

1.3. Работа с Google API

API (application programming interface) — это программный интерфейс приложения, интерфейс прикладного программирования. То есть это описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой.

Автоматизация через Google API дает гораздо больше возможностей:

  • При работе с API лимиты намного выше.
  • Отсутствует 30-минутное ограничение на работу. При правильном подходе скрипт может работать круглосуточно.
  • Есть возможность максимально гибко настраивать программные решения под себя и работать с намного большими объёмами данных. Например, при чтении фида размером в 50 000 строк Google Script сделает это медленнее, так как сам Javascript используется для других задач. А вот серверные языки (PHP, Java) обработают эти же данные быстрее — это связано с техническими особенностями и назначением языка программирования.
  • Большее количество операций при работе с API: 10 000 операций в сутки или даже больше, в зависимости от уровня доступа.
  • Возможность работы с разного рода базами данных: MySQL, Postgresql, NoSQL.
  • Возможность мультизадачности: один и тот же скрипт будет выполнять сразу несколько задач.
  • Возможность взаимодействовать с несколькими API в одном месте: например, можно подключить Google Ads и Google Analytics — и сразу получать данные из двух мест одновременно.

1.4. Как автоматизировать процессы

Первый вариант оптимизации: использовать программный код, который сразу создаёт/изменяет данные в аккаунте. Важно, что все данные в этом случае записываются прямо в код. Это затрудняет его чтение, изменение и снижает скорость работы.

Второй вариант: использовать в качестве данных такие хранилища, как .csv, .txt-файл или базу данных. Также можно использовать парсинг XML-фида с сайта и даже парсинг странички сайта (HTML-код). Это позволяет максимально гибко настроить код, чтобы использовать данные из разных источников и сохранять любые промежуточные результаты в удобном для вас формате.

2. Парсинг и его применение

На вопрос, что такое парсинг, интернет отвечает так:

Парсинг — это синтаксический анализ сайтов, который производится парсером — специальной программой или скриптом. Собранная информация представляется в определённом виде, по определённым правилам, алгоритмам и проводится на одном из языков программирования. Объектом парсинга может быть справочник, интернет-магазин, форум, блог и абсолютно любой интернет-ресурс.

Мы можем сказать проще:

Парсинг (чего либо) — это разбор, структурирование (распределение) данных по определённым параметрам и выборка только нужной вам информации.

Так-то лучше, правда? Осталось понять, что можно парсить, а что нет.

Парсить можно:

  • CSV, XLS (XLSX) файлы;
  • TXT-файлы
  • HTML-код***;
  • XML-код (текст), знакомые вам товарные фиды;
  • даже изображения (не наша тема, но если вам интересно, читайте на habr.com про стеганографию 1 и 2).

Почему же 3 звёздочки возле HTML кода? Потому что далеко не весь html-код можно так просто спарсить. Для этого нужен знающий разработчик, ведь сейчас существует много способов сделать сайт. Это может быть:

  • обычный статический html-код;
  • динамический код, который формируется «на лету» любой CMS-системой;
  • сайт, который написан при помощи технологий Angular, React, Vue.js. Там совершенно другая логика построения кода, поэтому обычные инструменты парсинга не сработают.

Подробнее об использовании парсинга для автоматизации работы PPC-специалистове читайте в посте «Как создать фид динамического ремаркетинга Adwords с помощью Netpeak Spider».

В рамках этого поста мы будем работать с XML-файлами.

XML — это документ, в котором есть только требования к основным понятиям внутри и набор рекомендаций для данных, которые в нём размещаются. По этой причине у таких сервисов, как Google Ads или Google Merchant, своя структура документа.

Парсинг такого документа — это и есть ключик к автоматизации некоторых задач. XML содержит, к примеру, все товары с сайта. Их может быть и 10 000, и больше. А теперь внимание, вопрос: сколько времени нужно человеку, чтобы создать 10 000 объявлений по фиду? То-то же.

Как же можно сделать парсинг XML-документа, и кто в этом может помочь? Лучший вариант, конечно, если у вас есть друг разработчик (что может быть очень полезно и дёшево), который знает любой язык из PHP, Java, C#, Ruby, Python. Помочь в этом деле может любой серверный язык.

На любом языке данная задача будет звучать примерно так: открываем файл, считываем все данные (или в память или в базу данных), далее работаем с Google Ads API и «запихиваем» свои данные в Google, чтобы получить пользу.

3. Как правильно автоматизировать: подготовка

Теперь давайте составим чёткие цели и задачи, которые можно автоматизировать абсолютно в каждой команде РРС-специалистов. Чтобы не обсуждать абстрактные вещи, возьмём реальную задачу Penguin-team, которая была решена программным способом. В реальности, конечно, некоторые пункты у вас могут отличаться.

3.1. Цель

Автоматическое создание кампаний, групп объявлений и ключевых слов к ним, а также объявлений на основе XML-фида сайта.

3.2. Задачи

  • Парсить XML-файлы размером в 10-20 тыс. товаров в каждом.
  • Создавать кампании на основе категорий товаров.
  • Создавать группы объявлений на основе торговых предложений у товара (при этом у товара на сайте есть несколько вариантов, отличающихся по цвету, размеру).
  • Создавать ключевые слова для этих групп на основе артикула, бренда, модели и цвета продукта.
  • Создавать и обновлять объявления на основе товара*, куда нужно поставлять данные из товара (цена, название, бренд).

*Объявление на основе товара — это может быть и товарное объявление, и простое поисковое объявление, главное, что товар тут выступает источником данных.

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

Бизнес-логика у каждого может быть своя. К примеру, вы можете делить аккаунт на кампании не по категориям товаров, а по брендам или моделям. Эти нюансы отличаются у каждого РРС-специалиста и особо не влияют на специфику автоматизации.

Также хочу привести некоторые технические комментарии, чтобы, будучи заказчиком, вы знали, с чем можете столкнуться.

Если рассмотреть с технической стороны эти задачи, то сразу видно два основных пункта, которые могут влиять на способ разработки в принципе: это парсинг больших фидов и изменение уже созданных объявлений.

  • Первая задача — парсинг. Файлы на 10-20 тыс. товаров достаточно большие, чтобы их можно было быстро отправить по сети и читать «на лету». Как быть? Можно, к примеру, разделить операции чтения файла и записи данных в аккаунт Google Ads, потому что иначе вы можете выйти за технические временные рамки самого языка программирования, или же подобные операции могут привести к неоправданно большим затратам оперативной памяти на вашем сервере.
  • Вторая задача — изменение уже имеющихся объявлений в аккаунте. Звучит достаточно просто, даже технически, но на деле есть нюанс. В отличие от групп и кампаний (у которых есть не только порядковый номер ID, но и имя), у объявления имени нет. Это значит, что получить его вы можете только при помощи порядкового номера ID. Но вот беда — если ваш скрипт будет работать раз в месяц, то как на второй раз он будет знать ID каждого объявления в системе? Значит, его нужно где-то сохранять. Это поможет нам в будущем разделить все задачи на отдельные и иметь доступ к любому объявлению в любое время суток.

На основе таких технических особенностей становится понятно, что нужно использовать базу данных.

База данных даёт огромные преимущества в работе:

  • вы можете хранить в ней все товары из фида;
  • контролировать товары, по которым не было создано объявлений;
  • видеть список созданных кампаний, групп и самих объявлений;
  • делать точечные обновления некоторых объявлений, если это необходимо.

Схематически можно представить это так:

База данных

Эта схема показывает, как структурировать и хранить данные. В итоге в нашем примере появляется более чёткая цепочка действий для разработчика:

Парсим товары из фида → на их основе создаём кампании и группы → создаём объявления → закрепляем за группами

Вот это и есть короткий план работы, с которым можно дальше развивать нужную вам задачу и начинать её реализовывать.

4. Практическая часть автоматизации

Если вы готовы к продуктивной работе, давайте перейдём к практической части нашей работы.

В этой части я покажу, как использовать на практике средства для взаимодействия в Google Ads API при помощи языка PHP, стандартной библиотеки от Google и гипоталамуса программиста.

4.1. Выбор инструментария

Google API предоставляет вам доступ в свои библиотеки, которые есть на developers.google.com и свободно распространяются через Github. Мой совет — не изобретайте велосипед и ищите готовые решения от экспертов. Это сэкономит вам время и более вероятно принесёт отличный результат, который был проверен массой специалистов.

Мы будем использовать библиотеку языка PHP.

Общий стек технологий выглядит следующим образом:

  • PHP v7.0,
  • Apache 2.4,
  • MySQL v5.7,
  • PHP Slim framework 3,
  • Google Ads API PHP Library.

После этого вам нужно настроить приложение под себя.

Делается это в двух файлах:

  1. Core/Config.php — здесь прописываем доступы к базе данных.
  2. App/models/google/v1/GoogleAuth.php — где указываем токены для работы с самим API, а также customer ID аккаунта, в котором будет выполняться задача.
const CLIENT_ID = 'xxx'; const CLIENT_SECRET = 'xxx'; const DEVELOPER_TOKEN = 'xxx'; const REFRESH_TOKEN = 'xxx'; const CUSTOMER_ID = 'xxx';

После этого приложение готово к выполнению запросов и получению данных. Осталось разобрать основную логику и разделить функционально приложение на модули.

Ниже — UML-диаграмма классов.

UML-диаграмма классов

Для разработчика самым важным будет класс Account.php: в нём заключена вся основная логика.

Приведу краткое описание методов класса:

  1. public function prepareFile(Request $request, Response $response, $args) — метод отвечает за парсинг XML-файла по указанной ссылке. Производит добавления новых товаров в БД и обновления существующих при условии, что в фиде была изменена цена.
  2. public function checkProducts(Request $request, Response $response) — метод выбирает из базы все товары, по которым ещё не было создано объявлений, и начинает проверку. Если кампании для товара нет, система создаёт её. Далее выполняет проверку группы, если её нет — создаёт. Третий шаг — это создание объявления и прикрепление его к ранее созданной группе. После успешного выполнения система помечает товар как отработанный, чтобы в следующей итерации не использовать его.
  3. public function createCampaign($session, $campaignName, $budgetService, $adWordsServices)создаёт кампании на основе указанного вами параметра.
  4. public function createAdGroup($adGroupService, $adwordsItem, $CampaignID) — создаёт группы объявлений по указанным вами параметрам.
  5. public function createAd($session, $adWordsServices, $adGroupAdService, $adwordsItems, $GroupID)создаёт объявления с настраиваемыми параметрами.
  6. public function createKeywords($adGroupCriterionService, $adGroupId, $productsGroup) — выполняет пакетное добавление ключевых слов в группу объявлений.

Полезные материалы

  • Репозиторий приложения. Распространяется бесплатно.
  • Лимиты по использованию google API: 1 и 2.
  • Скриптология Penguin-team. Главное про JavaScript, как научиться читать скрипты не-программисту и как ими пользоваться.

Подводим итоги

Этот вариант — только один из возможных процессов автоматизации. Он подойдёт для магазинов с больших ассортиментом, но его всё равно нужно менять под себя, опираясь на бизнес-логику вашего случая.

  • Пост комплексный, он поможет разобраться в основных понятиях РРС-специалисту и более чётко поставить задачу программисту.
  • Вся практическая часть — это подробная инструкция, которую вы можете выдать программисту — и дальше дело за ним.

Автоматизируйте свой труд, заставляйте технологии работать на вас, и тогда ваша продуктивность вырастет, а вместе с ней и экспертность.

Если у вас есть вопросы по работе скрипта, пишите в комментарии — я с радостью отвечу и подскажу, как лучше организовать процесс в том или ином случае ;)