Как автоматизировать сбор статистики из Яндекс.Дзен при помощи кода

Kate

Administrator
Команда форума
У Яндекс.Дзен нет готового 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 как на скрине:

Где взять ID кабинета в Яндекс.Дзен
Где взять ID кабинета в Яндекс.Дзен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 или в телеграм-бот.

 
Сверху