Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
У Яндекс.Дзен нет готового API, чтобы агрегировать статистику привычным для аналитиков и маркетологов образом. Чтобы собрать данные, нужно пройти 8 шагов: зайти на zen.yandex.ru, перейти в кабинет, затем в раздел «Статистика», потом на вкладку «Кампании», выбрать период и нажать на «Отчеты». Затем в сформировавшихся отчете Excel перейти на вкладку «Статистика кампаний по дням», выбрать нужную кампанию и создать сводную таблицу.
Стал 1 шаг: заходим по ссылке — несколько строк кода уже зашли в Дзен и выгрузили всю нужную статистику.
Рассказываем на своём примере, как можно оптимизировать процесс.
Проблема
Несмотря на развитость платформы, Яндекс.Дзен не так оптимизирован под рекламодателей, как, например, кабинет Яндекс.Директ — цифры приходится вытаскивать вручную не самым удобным способом. Готовых API тоже нет.
В итоге маркетологу или аналитику приходится тратить лишнее время на сбор отчетов, вместо того, чтобы потратить время более эффективно — например, на анализ и поиск способов оптимизировать показатели.
Мы разработали код, который помог нам упростить этот процесс. Делимся им с вами.
Кодинг
Шаг 1: устанавливаем нужные библиотеки — без них не заработает
import pandas as pd
import json
import requests
from datetime import datetime, timedelta
Шаг 2: вводим необходимые параметры и подключаемся к платформе
# Указать количество дней статистики
N_days = 10
# Session_id — из кук, можно взять из консоли разработчика при входе в личный кабинет как на скрине:
Session_id = '...'
#publisherId — это id кабинета в Zen, можно взять из url как на скрине:
publisherId = '...'
def get_zen_stat(Session_id, publisherId, N_days):
Cookie = {
'Session_id' : Session_id
}
yesterday = (datetime.now() — timedelta(days=N_days)).strftime('%Y-%m-%d')
today = datetime.now().strftime('%Y-%m-%d')
parameters = \
'publisherId='+ publisherId\
+'&from='+yesterday\
+'&to='+today\
+'&filterType='+'by-event'
url = 'https://zen.yandex.ru/editor-api/v2/flights/campaigns/statistics-xls?' + parameters
r = requests.get( url, cookies=Cookie)
return r
r = get_zen_stat(Session_id, publisherId, N_days)
print(r)
Если ответ “<Response [200]>”, то все хорошо
Шаг 3: выбираем лист лист выгружаемого файла
# Листы выгружаемого файла
pd.ExcelFile(r.content).sheet_names
# Указать лист
selected_sheet = 'Статистика\xa0кампаний по дням'
Собрать нужные данные в датафрейм:
df = pd.read_excel(r.content, selected_sheet, skiprows = 2 )[['Срез на дату', 'Кампания', 'Показы в ленте', 'Внешние переходы', 'Расход,\nруб. (без НДС)']].drop(index=0)
df.columns = ['date', 'campaign', 'impressions','clicks','cost_without_NDS']
df['date'] = pd.to_datetime(df['date'], format='%d.%m.%Y')
Шаг 4: выбираем кампанию
# Активные кампании за период
pd.Series(df.campaign.unique())
# Указать кампанию
campaign = 'Mitsu_Asx'
# Отфильтровать датафрейм по выбранной кампании и получить нужные данные
df.query("campaign == @campaign").groupby(['date'], as_index=False).agg({'impressions':'sum','clicks':'sum','cost_without_NDS':'sum'}).set_index('date')
Результат
Для себя мы выгружаем данные пока в таком виде:
Это помогло нам сильно сэкономить время на процессах. В скором будущем мы планируем преобразовывать данные в json и передавать в MyBi — сервис, который мы используем для интеграции данных и разработки онлайн-дашбордов в MS Power Bi. Так мы сможем автоматически смэтчить показатели с данными из других систем, посчитать, например, конверсию в звонок или стоимость лида.
Лайфхак: когда всё настроено и введены нужные параметры, можно нажать на «Среда выполнения» — «Выполнить всё» или Ctrl+F9, это действие запустит выполнение всего кода и выдаст таблицу с данными за последние 30 дней.
В целом, с полученными данными можно сделать, что угодно: например, сделать автоматическую отправку отчета на e-mail или в телеграм-бот.