Часть скрипта, которая отвечает за импорт данных в GA, а также способ автоматизации с помощью Pythonanywhere, инструкции по его настройке, были взяты из статьи Дмитрия Осиюка о настройке автоматического импорта расходов из Facebook Ads в Google Analytics.
В этой статье будет подробно разобран Python скрипт для импорта расходов из Яндекс Директ в Google Analytics.
Данный скрипт обладает кое-какими преимуществами по сравнению со известными системами импорта данных OWOX, Garpun
Плюсы:
- Бесплатно
- Скрипт позволяет полностью матчить данные в GA, а не задваивает строки.
Минусы:
- Сильно зависим от UTM метки (работает только с UTM определенного типа, но можно перестроить под свою. Об этом в конце)
- Не актуализирует данные
Для того, чтобы данный скрипт работал, необходимо иметь UTM метку вида, представленного ниже:
utm_source=yandex&utm_medium=cpc&utm_campaign=cid_{campaign_id}|cname_{campaign_name}|srct_{source_type}&utm_content=gid_{gbid}|ad_{ad_id}|ret_{retargeting_id}|tgt_{adtarget_id}|src_{source}|dt_{device_type}|gname_{region_name}&utm_term=key_{keyword}|ph_{phrase_id}
Код можно перенастроить и под другую метку, но его нужно будет «ковырять». Но для этого хватит базовых навыков работы с кодом. Об этом в конце.
Этапы настройки
- Подготовка/получение полного доступа в API Яндекс Директа
- Подготовка API Google Analytics
- Предварительная настройка в сервисе Pythonanywhere
- Замена значений переменных своими
- Установка расписания на выполнение скрипта
Проверка наличия доступа в API Яндекс Директа
Скрипт выполняет запрос в API Яндекс Директа и вытягивает данные. Для того, чтобы выполнить этот запрос, для начала, нужно получить ПОЛНЫЙ доступ для работы с API.
Наличие доступа вы можете проверить на вкладке "Мои заявки" внутри раздела "API" в рекламном кабинете Яндекс Директа.
Если доступ есть, то выглядеть это будет вот так
Если доступа нет, то нужно его получить. Процесс получения доступа рассмотрим в пункте 1. Подготовка/получение полного доступа в API Яндекс Директа
1.Подготовка/получение полного доступа в API Яндекс Директа
1. Заходим по ссылке https://oauth.yandex.ru/client/new, создаём приложение. Заполняем поля :
- Название = произвольно
- Описание = пропускаем
- Иконка = пропускаем
- Ссылка на сайт = пропускаем
- Платформы = ставим чекбокс на «Веб-сервисы», нажимаем «подставить URL для разработки»
- Доступы = находим Яндекс.Директ, ставим чекбокс «Использование API Яндекс.Директа»
- Кликаем на кнопку «Cоздать приложение»
2. Затем у вас высветится вот такое окно. Закрываем его
3. Далее заходим в рекламный кабинет, листаем вниз, кликаем по кнопке API
4. Затем нажимаем "Получить доступ к API"
5. Принимаем условия пользовательского соглашения
6. Заходим в меню в "Мои заявки", создаём новую заявку "Полный доступ"
7. Заполняем поля заявки:
- Введите application_id или выберите из списка = ID приложения, который вы зарегестрировали
- Укажите один или несколько контактов, по которым с вами быстро сможет связаться служба поддержки = Ваши контакты
- Название компании = название
- Сайт = сайт
- Язык программирования = Python
- Протокол = JSON
- Пример логинов, для которых используется = remobuv35
- Для чего предназначено = Синхронизировать рекламные материалы с данными внутренних систем (товары, деньги, отчетность)
- Основные функции = Получение статистики и отчётов
- Какие новые возможности работы с Директом дает ваше приложение пользователям?* = Ежедневно выгружает статистику
- Опишите схему взаимодействия вашего приложения с Директом = https://yandex.ru/dev/direct/doc/examples-v5/python3_requests_stat1-docpage/. Раз в день отправляется запрос в reports, тянется статистика по кампании/группе/объявлению/ключу/id фразы
- Прикрепляем любую рандомную картинку
Отправляем форму
8. Отправляем письмо на почту api-direct@support.yandex.ru саппорта API Директа для того чтобы быстрее получить одобрение
Добрый день.
Оформите заявку на полный доступ для приложения ID "номер приложения"
Приложение будет использоваться в рамках работы ежедневной выгрузки статистики из кабинета для дальнейшего импорта в Google Analytics
По идее заявку должны одобрить. Пока она находится на рассмотрении идём готовить к работе API Google Analytics'a
2. Подготовка API Google Analytics
1. Создаём проект в Google Cloud. Для этого нужно перейти по ссылке: https://console.cloud.google.com/projectcreate
2. В боковом меню переходим на вкладку "API и сервисы", нажимаем кнопку "Библиотека"
3. В строке поиске находим блок Google Analytics API, переходим в него, и нажимаем кнопку "ВКЛЮЧИТЬ".
4. Создаём сервисный аккаунт. Для этого в боковом переходим в пункт "API и сервисы" -> "Учётные данные"
5. Потом нажимаем вверху кнопку "+ Создать учётные данные" -> Выбираем "Сервисный аккаунт"
6. На первом шаге указаваем имя (например "Yandex_direct_cost_to_ga") и нажимаем кнопку "Создать"
7. На втором шаге указываем роль "Проект" -> "Наблюдатель" и нажимаем "Продолжить"
8. Нажимаем "+ СОЗДАТЬ КЛЮЧ"
9. Выбираем "Тип ключа: JSON" и нажимаем "Создать". Скачается файл ключа сервисного аккаунта
10. Копируем Email только что созданного сервисного аккаунта и добавляем этот Email в качестве пользователя с правами на изменение на уровне ресурса Google Analytics, в который нужно импортировать расходы
На этом всё. Теперь переходим к настройке сервиса Pythonanywhere
3. Предварительная настройка в сервисе Pythonanywhere
1. Регистрируемся в сервисе Pythonanywhere и входим в него.
2. Скачанный ключ JSON с предыдущего шага загружаем в PythonAnywhere. Для этого переходим на вкладку "Files", и нажамаем на кнопку "Upload file". Находим скачанный ранее файл и загружаем его.
3. Затем, в поле возле кнопки "New file" ввести название «Yandex_direct_cost_to_ga.py» и нажимаем саму кнопку для создания нового файла.
4.В открывшемся окне вставляем этот код и нажимаем "Save".
5. Возвращаемся в главное меню. Открываем вкладку "Consoles", нажимаем на ссылку "Bash"
В открывшемся окне нужно переустановить пакет для исправной работы кода. Вводим:
pip3.8 install --user --force-reinstall PySocks
На этом работа с подготовкой API и сервисов закончена. Начинаем перестраивать код под себя.
4. Замена значений переменных своими
1. 41 строка
token = '##############################'
Внутри кавычек введите Auth токен вашего приложения
Получить его можно пройдя по ссылке, заменив "ИДЕНТИФИКАТОР_ПРИЛОЖЕНИЯ" на ID вашего приложения.
https://oauth.yandex.ru/authorize?response_type=token&client_id=ИДЕНТИФИКАТОР_ПРИЛОЖЕНИЯ
Получить ID = Зайти в кабинет Директа -> Внизу в меню кликнуть "API" –> Выбрать "Мои заявки". Справа от названия приложения будет указан ID
2. 45 строка
# clientLogin = “####################”
Если вы получали доступ к API на агентском аккаунте, то вам нужно убрать решетки в начале строки. Если делали на обычном аккаунте, то пропустите этот шаг.
Также, если аккаунт агентский, то вам нужно убрать решетку в начале 53 строки
# "Client-Login": clientLogin,
3. 184 строка
PATH_TO_SERVICE_ACCOUNT_KEY = '##################'
Нужно указать ИМЯ файла (ключа JSON), который вы сохранили на Pythonanywhere
4. 185 строка
GA_PROPERTY_ID = '###########'
Указываем ID представления в Google Analytics
5. 186 строка
GA_DATA_SET_ID = '#############'
Указываем datasetid, его можно посмотреть тут
6. Заменив все значения на свои, нужно сохранить и выполнить код, чтобы убедиться что он работает и в нем нет ошибок
Если скрипт сработал без ошибок — вы увидите результат загрузки файла в GA.
Осталось поставить скрипт на автоматическое выполнение
5. Установка расписания на выполнение скрипта
Открываем вкладку Tasks, указываем время запуска скрипта (обратите внимание, строчкой выше отображается часовой пояс сервера, именно по этому времени будет запускаться скрипт) и путь к файлу вашего скрипта. Если вы создавали его в корневой папке, путь будет таким: /home/<ВАШ_ЛОГИН>/Yandex_direct_cost_to_ga.py. После этого остается только нажать кнопку "Create"
Всё готово. Результат загрузки файлов можно будет наблюдать здесь, перейдя по кнопке Manage Uploads, в списке наборов данных GA:
Важные замечания
- Pythonanywhere в бесплатной версии имеет много ограничений. Например, можно выполнять код максимум 100 секунд и хранить файлов не более чем на 500 мб. Этих ограничений достаточно, чтобы любому маленькому и среднему бизнесу решать задачу по импорту своих расходов. Если все таки ограничения этого сервиса не позволяют решить эту задачу — можно сделать аналогичное решение на базе Google Cloud.
- Tasks в Pythonanywhere работают три месяца, с момента их создания. Для продливания этого времени нужно хотя бы раз в 3 месяца заходить на эту вкладку и нажимать кнопку Extend Expiry.
- Код в его текущем виде работает только с UTM меткой, которую была указана в начале презентации. Данная метка не имеет параметров, которые передавали бы позицию размещения (от 1 до 8) , а также расположение объявления в поисковой выдаче (спец/другой блок)
Если вы решили использовать свою UTM
Тогда вам нужно будет внести еще ряд изменений в код. Проясним кое-какие моменты:
Из-за того, что используется UTM метка вида
?utm_source=yandex&utm_medium=cpc&utm_campaign=cid_{campaign_id}|cname_{campaign_name}|srct_{source_type}&utm_content=gid_{gbid}|ad_{ad_id}|ret_{retargeting_id}|tgt_{adtarget_id}|src_{source}|dt_{device_type}|gname_{region_name}&utm_term=key_{keyword}|ph_{phrase_id}
При переходе по объявлению, в Аналитикс передадутся следующие данные
Источник: yandex
Канал: cpc
Кампания: cid_ID рекламной кампании|cname_Название кампании|srct_Место размещения
Содержание объявления: gid_ID группы объявлений|ad_ID объявления|ret_Имя таргетинга|tgt_ID таргетинга для дин. Поисковых объявлений|src_Площадка показа|dt_Устройство|gname_Название географии показа
Ключевое слово: key_Ключевое слово|ph_ID ключевого слова или условия показа
Соответственно, если ваша UTM отличается от текущей, то вам нужно менять код под свою. Попробую подробно разобрать замену
Вот столбцы, значения которых мы передаём в Аналитикс, формирование которых вам нужно менять.
ga:medium,ga:source,ga:campaign,ga:keyword,ga:adContent
1. Строка 266, 265 - ga:medium, ga:source.
По умолчанию задано
data_from_direct["ga:medium"] = "cpc"
data_from_direct["ga:source"] = "yandex"
Т.е, если ваш канал не равняется "cpc" или источник не равняется "yandex", вы можете вписать любое другое значение внутри кавычек. Например, для канала "cpm" и источника "yandex_direct", это будет выглядеть вот так:
data_from_direct["ga:medium"] = "cpm"
data_from_direct["ga:source"] = "yandex_direct"
2. Строки с 219 по 225 - ga:campaign
Содержат внутри себя несколько переменных:
campaign_id = ID кампании (например 1342141)
campaign_name = Имя кампании (например Нижнее белье)
source_type = место размещения Сети/Поиск (например search)
Тут нас больше всего интересует 225 строка:
return "cid_" + campaign_id + "|cname_" + campaign_name + "|srct_" + source_type
В Google Analytics'е при выводе параметра "Кампании" строка выглядела бы вот так:
cid_1342141|cname_Нижнее белье|srct_search
Соответственно, если изначально у вас отсутствовали какие-либо параметры, или обозначения параметров в UTM метке имеют иные значения, то вам просто нужно внести корректировки в 225 строку
Например, для utm_campaign вида:
utm_campaign=cid|{campaign_id}|{source_type}
Из-за того, что поле {campaign_name} в метке отсутствует, нужно будет привести 225 строку вот к такому виду
return "cid|" + campaign_id + "|" + source_type
3. Строки с 227 по 244 - ga:adContent
Содержат внутри себя несколько переменных:
phrase_id = ID ключевого слова (например 3215421521)
gbid = ID группы объявлений (например 421421421)
ad_id = ID объявления (например 452195219)
retargeting_id = Названия условия нацеливания (например Майки)
adtarget_id = ID таргетинга для дин. Поисковых объявлений (например 48219421)
source = Площадка (например none)
device = Устройство (например desktop)
region_name = География показа (например Санкт-Петербург)
Тут нас интересует 244 строка:
return "gid_" + gbid + "|ad_" + ad_id + "|ret_" + retargeting_id + "|tgt_" + adtarget_id + "|src_" + source + "|dt_" + device + "|gname_" + region_name
В Google Analytics'е при выводе параметра "Содержание объявления" строка выглядела бы вот так:
gid_421421421|ad_452195219|ret_Майки|tgt_48219421|src_none|dt_desktop|gname_Санкт-Петербург
Соответственно, если изначально у вас отсутствовали какие-либо параметры, или обозначения параметров в UTM метке имеют иные значения, то вам просто нужно внести корректировки в 244 строку
Например, для utm_content вида:
utm_content=gid|{gbid}|aid|{ad_id}|{phrase_id}_{retargeting_id}
244 строку нужно будет отредактировать так:
return "gid|" + gbid + "|aid|" + ad_id + "|" + phrase_id + "_" + retargeting_id
4. Строки с 248 по 255 - ga:keyword
Содержат внутри себя несколько переменных:
keyword = Ключевое слово
phrase_id = ID условия показа/ключевого слова
Тут нас интересуют строки 253 и 255
return "key_" + keyword + "|ph_" + phrase_id
return "key_|ph_" + phrase_id
Значение 252 строки применяется тогда, когда показ происходит не по дин. поисковому объявлению или ретаргетингу, т.е когда есть ключевое слово. Значение 254 строки применяется тогда, когда показ происходит по дин. поисковому объявлению или ретаргетингу, тогда параметр {keyword} всегда возвращает пустоту.
Например, для utm_keyword вида:
utm_term={keyword}
Нужно изменить 253 и 255 строки вот так
return keyword
return ""
Надеюсь вам понятен принцип изменений, которые нужно вносить, если вы хотите использовать свою UTM метку.