Автоматический импорт данных о расходах в Google Analytics 4. Часть II
В предыдущем материале вы выполнили первый этап настройки автоматического импорта данных о расходах в Google Analytics 4, а именно настроили свой SFTP-сервер, создали импорт данных в самом интерфейсе GA4, а также установили соединение с помощью ключа SSH. В этом руководстве завершим процесс автоматизации, а именно выгрузку данных из рекламных кабинетов (Facebook *, VK, Яндекс.Директ и т.д.) с помощью скрипта на Python, который будет обновлять статистику рекламных кампаний по расписанию и загружать все это в файл upload.csv.
* Деятельность американской компании Meta (бывшая Facebook) запрещена в России, организация признана экстремистской.
Рекомендую к прочтению:
- Импорт данных в Google Analytics 4
- Импорт данных о расходах в Google Analytics 4 на примере статистики Яндекс.Директа (ручной способ)
- Статическое значение utm_id и несколько экспериментов импорта данных о расходах в Google Analytics 4
Это руководство основано на материалах Ахмеда Али (Ahmed Ali) и его публикациях на ga4auditor.com с моими комментариями и дополнениями, поэтому большая часть материала будет посвящена автоматическому импорта данных из Facebook (Meta).
Перед тем, как читать и затем повторять нижеописанные шаги, вы в обязательном порядке должны выполнить все настройки из первой части, а именно:
- создать проект в Google Cloud;
- создать виртуальную машину в Compute Engine;
- настроить правило брандмауэра;
- установить SFTP-сервер;
- создать импорт данных по SFTP в интерфейсе Google Analytics 4 и получить открытый SSH-ключ;
- в директорию созданного пользователя в /.ssh/authorized_keys добавить открытый SSH-ключ от GA4;
- в конфиге виртуальной машины открыть доступ к соединению и по паролю, и по ключу;
- проверить соединение.
Только после этого вы можете переходить к загрузке файла upload.csv с рекламными данными на сервер, из которого они затем будут импортироваться в ваш ресурс Google Analytics 4. Давайте приступим к следующим этапам!
Создание приложения Facebook API
Чтобы выгружать статистику из своих рекламных кабинетов, вам необходимо использовать API сервисов. Для Facebook - это Marketing API (Facebook Marketing API).
Перейдите на сайт Facebook для разработчиков и нажмите кнопку Создать приложение:
Выберите Другое в окне использования приложения:
Выберите тип приложения - Компания (Создание и настройка таких объектов компании, как Страницы, мероприятия, группы, реклама, Messenger, WhatsApp и API Graph для Instagram, с помощью доступных разрешений, функций и продуктов компаний):
Нажмите Далее. На заключительном шаге д
Нажмите Создать приложение. После этого перейдите по ссылке в настройки вашего бизнес-менеджера (Meta Business Suite) и нажмите на вкладку Приложения: Проверьте, чтобы с вашим бизнес-менеджером было связано новое приложение:
Если нет, тогда нажмите Добавить - Добавить ID приложения.
Узнать идентификатор приложения можно на странице приложений:
Примечание: если вы не этапе создания приложения вы указали бизнес-менеджер, то подключать приложение к аккаунту через ID не нужно. Оно автоматически появится в вашем списке.
Теперь в списке приложений выберите свое и нажмите на Назначить объекты:
Из списка выберите рекламные аккаунты, из которых вы хотите получать статистику и отправлять ее в Google Analytics 4. Нажмите Добавить:
Получение токена (маркера доступа)
Почти для каждого запроса, который вы делаете к API Facebook, вам нужно передать токен (маркер) доступа, чтобы получить какой-либо результат. Маркер доступа — это строка со сгенерированным значением, которая идентифицирует пользователя, приложение или страницу и может использоваться приложением для вызовов API Graph. Когда человек входит в приложение с помощью входа через Facebook и предоставляет запрошенные разрешения, приложение получает маркер доступа, который обеспечивает временный защищенный доступ к различным API Facebook.
Маркеры доступа пользователей бывают двух видов: краткосрочные и долгосрочные. Краткосрочные маркеры обычно действуют примерно 1–2 часа, а долгосрочные — не менее 60 дней.
Для получения токена перейдите на страницу приложений. Нажмите на свое приложение:
На открывшейся странице прокрути внизу, пока не увидите API Marketing. Нажмите на него:
API Marketing — это подборка конечных точек API Graph, которые можно использовать для эффективной рекламы на Facebook и в Instagram. С его помощью вы сможете запрашивать нужную вам статистику из рекламных кабинетов Facebook.
На открывшейся странице перейдите в раздел Инструменты, напротив разрешений для маркера поставьте три галочки для ads_management, ads_read и read_insights, а затем нажмите Получить маркер:
После этого на экране появится ваш токен. Обязательно сохраните его, так как он понадобится вам на следующих шагах.
Вы можете проверить срок его действия, перейдя на страницу отладчика маркеров доступа. На вкладке Маркер доступа вставьте скопированный токен и нажмите кнопку Отладка:
На скриншоте я выделил три поля со сведениями о токене - когда выдан, когда истекает и когда истекает доступ к данным. Как видите, токен доступа имеет ограничение по сроку службы (~60 дней), поэтому его следует периодически продлевать. Пожалуйста, учтите это при дальнейшей настройке автоматического импорта данных в Google Analytics 4.
Теперь, когда у вас есть токен доступа, пришло время написать функцию на языке программирования Python для взаимодействия с API Facebook.
Написание программы на Python
Чтобы работать с API аналитических систем и выполнять запросы на Python, необходимо использовать специальное программное обеспечение (ПО). Такое ПО называют интегрированной средой разработки (IDE). Наиболее популярным Python IDE является PyCharm. Еще очень распространена IDE Spyder и JupyterLab.
Многие интернет-маркетологи и аналитики данных в своей работе так же используют блокнот Jupyter Notebook, который можно установить с помощью дистрибутива Anaconda, включающий набор популярных библиотек для работы с данными, таких как: NumPy, SciPy, Astropy и др. Еще есть Visual Studio Code и много других продуктов.
Как вы понимаете, выбор тех или иных программ зависит исключительно от ваших предпочтений в изучении или от тех инструментов, которые используются в вашей компании. Однако для работы с API Google Analytics 4 я предлагаю использовать другой сервис - Google Colab.
Colaboratory (или просто Colab) - это бесплатный продукт Google Research. Он позволяет любому человеку писать и выполнять код Python прямо в браузере, без установки каких-либо программ и без дополнительной настройки. По сути, Colab - это размещенная на хостинге служба Jupyter Notebook, которая предоставляет доступ к своим вычислительным ресурсам, включая графические процессоры, благодаря которым можно заниматься не только базовой аналитикой данных, но и более сложными исследованиями в области машинного обучения. Google в Colab поддерживает актуальное состояние библиотек и их взаимную работу. Ваши проекты сохраняются не локально на компьютере, а на Google Диске. Они также могут быть загружены с GitHub. Таким образом, вы можете легко работать над одним проектом с другими людьми и делиться файлами со своей командой. Colab - отличное решение для начинающих пользователей, студентов, специалистов по обработке данных и исследователей в области искусственного интеллекта.
Чтобы создать свой первый проект в Colab, авторизуйтесь в своей учетной записи Gmail и перейдите по ссылке. Вам откроется приветственное окно и ваши проекты:
Если вы никогда раньше не работали с Colaboratory, то никаких проектов, кроме демонстрационного, в списке вы не увидите. Для создания первого проекта нажмите на Создать блокнот:
В новом окне вы увидите только что созданный блокнот, в котором вы будете писать код программы на Python. При желании вы можете переименовать свой проект, задав ему понятное название, например - Facebook Cost Data:
Однако это делать вовсе необязательно, так как в Colab мы просто проверим код выгрузки данных из Facebook, написанный на Python, а сама программу затем перенесем в Google Cloud, где она и будет запускаться с помощью Cloud Functions. Проект в Colab нам впоследствии не пригодится.
Скопируйте эту команду:
1 |
pip install facebook_business |
И вставьте ее в первую ячейку вашего проекта. Нажмите иконку запуска (значок play), чтобы код в ячейке сработал. В Colab это будет выглядеть так:
Напротив строки с кодом должна появится зеленая галочка, свидетельствующая об успешном выполнении кода:
В конце ячейки вы можете увидеть строчки примерно такого содержания:
1 2 3 |
Successfully built curlify Installing collected packages: pycountry, curlify, facebook_business Successfully installed curlify-2.2.1 facebook_business-19.0.2 pycountry-23.12.11 |
Поздравляю! Вы установили библиотеку Python для Facebook Business SDK. Facebook Business SDK — это универсальный сервис, который помогает партнерам Facebook лучше обслуживать свой бизнес. Партнеры используют несколько API Facebook для удовлетворения потребностей своих клиентов. Внедрение всех этих API и поддержание их актуальности на различных платформах может занять много времени и в конечном итоге оказаться непомерно трудным.
По этой причине Facebook разработал Business SDK, объединивший многие из своих API в один SDK, чтобы упростить внедрение и обслуживание. Business SDK — это обновленная версия Marketing API SDK, которая включает в себя Marketing API, а также множество API-интерфейсов Facebook с разных платформ, таких как Pages, Business Manager, Instagram и т. д.
Установив библиотеку, вы можете приступить к написанию функции Python, которая будет вызывать Facebook Marketing API и получать необходимые данные из вашего рекламного кабинета. Скопируйте нижеприведенный код и вставьте его во вторую ячейку Colab:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.api import FacebookAdsApi import pandas as pd access_token = 'YOUR_ACCESS_TOKEN' account_id = 'YOUR_AD_ACCOUNT_ID' def get_fb_ads_data(access_token, account_id): # Инициализация Facebook Ads API FacebookAdsApi.init(access_token=access_token) # Подключение к рекламному аккаунту Facebook my_account = AdAccount('act_'+account_id) # Определение полей данных, которые вы хотите получить fields = ['campaign_name','campaign_id','spend','impressions','clicks'] # Определение параметров данных, которые вы хотите получить params = {'level': 'campaign','date_preset': 'maximum'} # Получение данных из Facebook Ads API data = my_account.get_insights(fields=fields,params=params) # Определение пустого списка для хранения результатов results = [] # Цикл перебора данных, полученных из Facebook Ads API for item in data: # Преобразование данных в словарь data_dict = dict(item) # Добавление каждого элемента в список результатов results.append(data_dict) # Преобразование списка результатов в DataFrame Pandas df = pd.DataFrame(results) # Возврат результатов в виде DataFrame Pandas return df # Вызов функции get_fb_ads_data и печать результата result = get_fb_ads_data(access_token, account_id) print(result) |
Примечание: для добавления новой ячейки в Colab над программой нажмите +КОД
, где для полей access_token и account_id вам необходимо указать свои данные:
- access_token - вместо YOUR_ACCESS_TOKEN токен, который вы получили на предыдущем шаге и сохранили его;
- account_id - вместо YOUR_AD_ACCOUNT_ID идентификатор рекламного аккаунта (отображается в интерфейсе Facebook Ads);
Сам код не является сложным. К каждой строчке я добавил небольшой комментарий. Единственное отличие, которое есть в моем скрипте по сравнению с автором, это то, что в параметре date_preset я указал значение maximum (возвращает данные за период до 37 месяцев), а у него yesterday (вчера). Поскольку на момент написания этого руководства у меня нет активных аккаунтов Facebook, мне пришлось ставить диапазон больший, чем за "вчера". yesterday нам понадобится в итоговой программе импорта данных, которая будет запускаться в облаке, поскольку обновление данных в Google Analytics 4 будет происходить ежедневно за вчерашний день. Подробнее о других параметрах читайте в официальной документации Facebook.
Запустив код в ячейке, вы получите примерно такой результат:
А чтобы таблица с итоговой статистикой выглядела удобочитаемой, вы можете выполнить команду result в следующей ячейке:
Как видите, это простая таблица с данными ваших рекламных кампаний за максимальный диапазон дат. Код на Python работает, и это очень хорошо! Теперь вам нужно отформатировать данные в соответствии со схемой Google Analytics 4, которую вы используете в импорте данных (см. предыдущую статью). Схема GA4 состоит из следующих полей:
- source (источник кампании)
- medium (канал кампании)
- campaign_id (идентификатор кампании)
- campaign_name (название кампании)
- date (дата)
- impressions (показы)
- clicks (клики)
- cost (расходы)
Примечание: для Google Analytics 4 обязательным полем для импорта данных является идентификатор кампании (campaign_id). Его значение извлекается из метки utm_id, о которой я подробно писал в этом материале, в этой публикации и здесь. Поэтому если ваши рекламные объявления Facebook не промечены нужными метками, в числе которых utm_source, utm_medium, utm_campaign и utm_id, то импорт данных в GA4 не получится. Сначала добавьте нужные utm_метки в ваши рекламные объявления, а затем вернитесь к этим настройкам.
Помните про официальный шаблон Google, который мы загружали во время тестирования SFTP-сервера? В нем как раз присутствуют все необходимые для импорта поля.
Данные, которые вы выгрузили с помощью кода Python, уже структурированы как нужно. Остается только переименовать столбцы spend на cost и дату. Кроме того, вам нужно включить два новых столбца для источника и канала кампании в зависимости от используемых вами параметров UTM.
За это отвечает следующая функция:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
def format_ads_data(df): # rename columns df.rename(columns={'spend': 'cost', 'date_start': 'date' }, inplace=True) # drop date_stop column df.drop(columns=['date_stop'], inplace=True) # add source column df['source'] = 'facebook' # add medium column df['medium'] = 'cpc' return df |
Она принимает полученный ранее датафрейм и возвращает его в нужном формате, заменяя название столбца spend на cost, date_start на date, а также добавляет два новых столбца source со значением facebook и medium со значением cpc. Еще функция удаляет столбец date_stop, который в схеме данных Google Analytics 4 не нужен.
Примечание: если в ваших utm_метках передаются другие значения utm_source (не facebook) и utm_medium (не cpc), тогда вам необходимо в коде поменять их на свои.
Итоговый код, который вы можете скопировать и вставить в новую ячейку, выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.api import FacebookAdsApi import pandas as pd access_token = 'YOUR_ACCESS_TOKEN' account_id = 'YOUR_AD_ACCOUNT_ID' def get_fb_ads_data(access_token, account_id): # Инициализация Facebook Ads API FacebookAdsApi.init(access_token=access_token) # Подключение к рекламному аккаунту Facebook my_account = AdAccount('act_'+account_id) # Определение полей данных, которые вы хотите получить fields = ['campaign_name','campaign_id','spend','impressions','clicks'] # Определение параметров данных, которые вы хотите получить params = {'level': 'campaign','date_preset': 'maximum'} # Получение данных из Facebook Ads API data = my_account.get_insights(fields=fields,params=params) # Определение пустого списка для хранения результатов results = [] # Цикл перебора данных, полученных из Facebook Ads API for item in data: # Преобразование данных в словарь data_dict = dict(item) # Добавление каждого элемента в список результатов results.append(data_dict) # Преобразование списка результатов в DataFrame Pandas df = pd.DataFrame(results) return df def format_ads_data(df): # rename columns df.rename(columns={'spend': 'cost', 'date_start': 'date' }, inplace=True) # drop date_stop column df.drop(columns=['date_stop'], inplace=True) # add source column df['source'] = 'facebook' # add medium column df['medium'] = 'cpc' return df # Вызов функции get_fb_ads_data и печать результата result = get_fb_ads_data(access_token, account_id) print(result) # Вызов функции format_ads_data для обработки полученных данных formatted_result = format_ads_data(result) print(formatted_result) |
, где для полей access_token и account_id вам необходимо указать свои данные (не забудьте!).
В Colab результат выполнения кода будет выглядеть так:
И в удобочитаемом виде с использованием команды formatted_result:
Как видите, в итоговых результатах название полей стали точно такими же, как и в схеме данных Google Analytics 4. А еще дополнительно добавился два столбца (source, medium) и был удален date_stop.
Данные к загрузке на сервер подготовлены. Теперь перейдем к следующему шагу и рассмотрим, как подключиться к нашему SFTP-серверу и передать отформатированный файл upload.csv для обработки Google Analytics 4.
Загрузка структурированного файла на SFTP-сервер
Чтобы отправить файл CSV на собственный сервер SFTP, необходимо написать на Python специальную функцию. Для этого можно использовать библиотеку paramiko. Paramiko - это реализация протокола SSHv2 на Python, обеспечивающая как клиентскую, так и серверную функциональность.
Установить эту библиотеку можно с помощью команды:
1 |
pip install paramiko |
А сама функция у Ахмеда Али выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
def upload_dataframe_to_sftp(df, filename, host, port, username, password): # Convert dataframe to csv df.to_csv(filename, index=False) # Create an SSH client ssh = paramiko.SSHClient() # Automatically add server key (needed if you're connecting to a server for the first time) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # Authenticate with the server ssh.connect(host, port, username, password) # Create an SFTP client sftp = ssh.open_sftp() # Upload the file to the server sftp.put(filename, f'/home/{username}/{filename}') # Close the connections sftp.close() ssh.close() print(f'{filename} successfully uploaded to {host}.') |
Эта функция состоит из 6 параметров:
- df - название датафрейма со статистикой, который вы выгрузили из Facebook Ads API;
- filename - имя файла, загружаемое на SFTP-сервер. В нашем примере - это upload.csv (см. первую часть руководства);
- host - IP-адрес вашего SFTP-сервера, который вы получили при настройке (см. первую часть руководства);
- port - 22;
- username - имя пользователя SFTP-сервера, которое вы создали. В моем примере - это ga4import (см. первую часть руководства);
- password - пароль, который вы установили для пользователя SFTP-сервера.
Мы не будем запускать эту функцию в Colab, а сразу же перейдем к следующему этапу настройки - развертыванию в Google Cloud. Саму функцию мы переделаем, а итоговый код я приложу в конце этого руководства. Вы сможете его скопировать и добавить в свой проект.
Настройка ежедневного задания с помощью Cloud Scheduler
Чтобы выполнять автоматический импорт данных в Google Analytics 4 без запуска кода Python в ручном режиме (как мы это делали выше в Colab), нам необходимо перенести его в Google Cloud и там настроить расписание. Это можно реализовать с помощью Cloud Scheduler и Cloud Functions.
Cloud Scheduler - это полностью управляемая бессерверная служба планирования заданий, которая позволяет пользователям планировать, автоматизировать и управлять задачами в различных службах Google Cloud.