Как автоматизировать создание объявлений 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.
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. Практическая часть автоматизации
Если вы готовы к продуктивной работе, давайте перейдём к практической части нашей работы.
Внимание! Дальше в тексте содержится инструкция по применению технического инструмента для автоматизации труда. Без знаний PHP читать не рекомендуется — это плохо влияет на карму и самочувствие.
В этой части я покажу, как использовать на практике средства для взаимодействия в 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.
Важно: для работы инструмента вам нужно создать токен разработчика. Читайте об этом подробнее в постах «Obtain Your Developer Token» и «Obtain Your Developer Token». Без этого дальше двигаться нельзя, поэтому внимательно изучите документацию и создайте себе токен для будущего приложения. Получением токена нужно заняться вместе с программистом, самостоятельно делать это не стоит, так как там есть очень много технических нюансов.
После этого вам нужно настроить приложение под себя.
Делается это в двух файлах:
- Core/Config.php — здесь прописываем доступы к базе данных.
- App/models/google/v1/GoogleAuth.php — где указываем токены для работы с самим API, а также customer ID аккаунта, в котором будет выполняться задача.
После этого приложение готово к выполнению запросов и получению данных. Осталось разобрать основную логику и разделить функционально приложение на модули.
Ниже — UML-диаграмма классов.
Для разработчика самым важным будет класс Account.php: в нём заключена вся основная логика.
Приведу краткое описание методов класса:
- public function prepareFile(Request $request, Response $response, $args) — метод отвечает за парсинг XML-файла по указанной ссылке. Производит добавления новых товаров в БД и обновления существующих при условии, что в фиде была изменена цена.
- public function checkProducts(Request $request, Response $response) — метод выбирает из базы все товары, по которым ещё не было создано объявлений, и начинает проверку. Если кампании для товара нет, система создаёт её. Далее выполняет проверку группы, если её нет — создаёт. Третий шаг — это создание объявления и прикрепление его к ранее созданной группе. После успешного выполнения система помечает товар как отработанный, чтобы в следующей итерации не использовать его.
- public function createCampaign($session, $campaignName, $budgetService, $adWordsServices) —создаёт кампании на основе указанного вами параметра.
- public function createAdGroup($adGroupService, $adwordsItem, $CampaignID) — создаёт группы объявлений по указанным вами параметрам.
- public function createAd($session, $adWordsServices, $adGroupAdService, $adwordsItems, $GroupID) —создаёт объявления с настраиваемыми параметрами.
- public function createKeywords($adGroupCriterionService, $adGroupId, $productsGroup) — выполняет пакетное добавление ключевых слов в группу объявлений.
Важно: этот инструмент — не универсальное готовое решение. Его нужно настраивать под каждый сайт индивидуально. Но для его работы вам достаточно указать минимальный набор параметров.
Полезные материалы
- Репозиторий приложения. Распространяется бесплатно.
- Лимиты по использованию google API: 1 и 2.
- Скриптология Penguin-team. Главное про JavaScript, как научиться читать скрипты не-программисту и как ими пользоваться.
Подводим итоги
Этот вариант — только один из возможных процессов автоматизации. Он подойдёт для магазинов с больших ассортиментом, но его всё равно нужно менять под себя, опираясь на бизнес-логику вашего случая.
- Пост комплексный, он поможет разобраться в основных понятиях РРС-специалисту и более чётко поставить задачу программисту.
- Вся практическая часть — это подробная инструкция, которую вы можете выдать программисту — и дальше дело за ним.
Автоматизируйте свой труд, заставляйте технологии работать на вас, и тогда ваша продуктивность вырастет, а вместе с ней и экспертность.
Если у вас есть вопросы по работе скрипта, пишите в комментарии — я с радостью отвечу и подскажу, как лучше организовать процесс в том или ином случае ;)