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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

Источник: https://habr.com/ru/post/574224/


Интересные статьи

Интересные статьи

Успешный современный коворкинг должен быть гибким и ориентированным на клиента. Люди хотят чтобы сервис соответствовал ожиданиям. Им нужен доступ к рабочему месту в любое время, когда это необходимо, ...
В данной пошаговой инструкции мы подробно опишем весь процесс получения доступа к WhatsApp Business API через официального партнера Facebook — сервис Gupshup и подключени...
Сравнивать CRM системы – дело неблагодарное. Очень уж сильно они отличаются в целях создания, реализации, в деталях.
В 1С-Битрикс: Управление сайтом (как и в Битрикс24) десятки, если не сотни настраиваемых типов данных (или сущностей): инфоблоки, пользователи, заказы, склады, форумы, блоги и т.д. Стр...
Пост посвящен дню защиты детей. Любые совпадения – не совпадения. В 10 лет у меня появились первый компьютер и диск с Visual Studio 6. С тех пор я придумываю себе задачки — автоматизировать де...