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

Newser

Moderator
Команда форума
Регистрация
5 Фев 2019
Сообщения
269
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
    • со списком идентификаторов от 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. Там совершенно другая логика построения кода, поэтому обычные инструменты парсинга не сработают.
    В рамках этого поста мы будем работать с 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 и гипоталамуса программиста.

    .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 аккаунта, в котором будет выполняться задача.
    1. const CLIENT_ID = 'xxx';
    2. const CLIENT_SECRET = 'xxx';
    3. const DEVELOPER_TOKEN = 'xxx';
    4. const REFRESH_TOKEN = 'xxx';

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

    Ниже — 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) — выполня
    Важно: этот инструмент — не универсальное готовое решение. Его нужно настраивать под каждый сайт индивидуально. Но для его работы вам достаточно указать минимальный набор параметров.

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

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

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

    Источник
 
Сверху