Данные Яндекс Метрики через API в ClickHouse, Postgres и MySQL на Python

Данные Яндекс Метрики через API в ClickHouse, Postgres и MySQL на Python

Яндекс Метрика собирает массу данных о трафике сайта, но её интерфейс не всегда удобен для глубокой аналитики: хочется свести статистику с рекламой, продажами из CRM и хранить историю без ограничений. Забрать данные к себе в базу помогает API.

В этой статье покажу, как выгружать данные из Яндекс Метрики через API на Python и складывать их в базу данных: ClickHouse, PostgreSQL или MySQL. Использовать будем бесплатную библиотеку morin, а начнём с простой демонстрации, которую можно запустить локально без сервера и без Docker.

Зачем выгружать данные из Яндекс Метрики

Интерфейс Метрики хорош для быстрых отчётов, но упирается в потолок:

  • Сэмплирование на больших объёмах искажает цифры.
  • Свести данные Метрики с другими источниками внутри интерфейса нельзя.
  • Строить свои сложные срезы и метрики неудобно.
  • Автоматизировать ежедневную выгрузку под дашборд руками невозможно.

Решение: забрать данные из Яндекс Метрики через API в свою базу данных и работать уже там.

Что такое API Яндекс Метрики

У Метрики есть API отчётов (Reporting API) - интерфейс, через который программа получает статистику счётчика в нужных разрезах. Через api яндекс метрики можно вытянуть посещения, источники трафика, конверсии и другие метрики по дням.

Работает api метрики так: вы задаёте измерения (dimensions) и метрики (metrics), отправляете запрос с OAuth-токеном и номером счётчика, а в ответ получаете данные. Библиотека morin прячет постраничную выгрузку и разбор ответа внутри.

Получаем доступ к API: токен и номер счётчика

Для работы с API Яндекс Метрики нужны два параметра:

  • OAuth-токен - ключ авторизации.
  • номер счётчика - идентификатор счётчика Метрики, данные которого забираем (тут он будет называться login).

OAuth-токен получают через Яндекс OAuth (можно получить по этой ссылке), номер счётчика виден в настройках Метрики. Токен даёт доступ к данным счётчика, поэтому храните его в секрете.

Устанавливаем библиотеку morin

pip install morin

Драйверы для ClickHouse, PostgreSQL и MySQL ставятся автоматически вместе с morin, отдельно доустанавливать ничего не нужно.

Для первой демонстрации без базы хватит одной morin.

Бесплатный старт: получаем данные Яндекс Метрики на Python

Вытащим статистику счётчика в Python. Указываем измерения и метрики - что и в каком разрезе получить:

from morin import YMbyDate

ym = YMbyDate(
    login='НОМЕР_СЧЁТЧИКА',  # id счётчика Метрики
    token='ВАШ_OAUTH_ТОКЕН',
    add_name='site1',
    start='2025-01-01',
    report='date',
    dimensions='ym:s:date',  # разрез: по дате
    metrics='ym:s:visits,ym:s:users,ym:s:pageviews',  # метрики
)

stats = ym.get_data()
for row in stats[:5]:
    print(row)

На выходе - список словарей со статистикой по дням: визиты, пользователи, просмотры. Уже на этом этапе morin работает как обычный клиент api яндекс метрики. Измерения и метрики указываются через dimensions и metrics - можно выбрать нужный список параметров и показателей.

Загрузка данных Яндекс Метрики в ClickHouse

Давайте загрузим данные в БД. Начнём с ClickHouse - аналитической СУБД, которая отлично подходит под данные Метрики. Нужен запущенный ClickHouse: локально его поднимают одной командой Docker или ставят на сервер.

from morin import YMbyDate

ym = YMbyDate(
    subd='clickhouse',
    host='localhost', port='8123',
    username='default', password='',
    database='metrika',
    add_name='site1',
    login='НОМЕР_СЧЁТЧИКА',
    token='ВАШ_OAUTH_ТОКЕН',
    start='2025-01-01',
    backfill_days=3,
    report='date',
    dimensions='ym:s:date',
    metrics='ym:s:visits,ym:s:users,ym:s:pageviews',
)

ym.collecting_manager()

Что делает collecting_manager:

  • сам создаёт таблицу в ClickHouse и определяет столбцы по данным;
  • работает по принципу Airflow - фиксирует собранные дни в служебной таблице;
  • при повторном запуске догружает только недостающие дни;
  • backfill_days перезабирает несколько последних дней.

То же самое в PostgreSQL и MySQL

Чтобы грузить не в ClickHouse, а в PostgreSQL или MySQL, меняется один параметр - subd.

Для PostgreSQL:

ym = YMbyDate(
    subd='postgresql',
    host='localhost', port='5432',
    username='postgres', password='postgres',
    database='metrika',
    add_name='site1',
    login='НОМЕР_СЧЁТЧИКА', token='ВАШ_OAUTH_ТОКЕН',
    start='2025-01-01', backfill_days=3,
    report='date',
    dimensions='ym:s:date',
    metrics='ym:s:visits,ym:s:users,ym:s:pageviews',
)
ym.collecting_manager()

Для MySQL меняем subd на 'mysql' и порт на 3306. morin сама подберёт типы столбцов под выбранную базу данных.

Режимы отчёта и разрезы

У коннектора Метрики два режима, они задаются параметром report:

  • date - статистика по дням, обновляется инкрементально по датам (основной режим), функция get_stat()
  • nodate - сводная статистика за весь период без разбивки по дням, функция get_data()

Что именно получить оеределяют dimensions (разрезы: дата, источник, страна, устройство, итд) и metrics (визиты, пользователи, просмотры, конверсии). Полный список полей есть в документации API Яндекс Метрики.

Автоматизация через Docker

Чтобы данные Метрики обновлялись сами каждый день, morin разворачивают в Docker - сбор идёт по расписанию, с логами и уведомлениями в Telegram. Подробно этот сценарий разобран в отдельной статье про коннекторы к API в ClickHouse на Docker.

FAQ

Как получить данные из Яндекс Метрики через API на Python?

Установите библиотеку morin (pip install morin), создайте объект YMbyDate с OAuth-токеном, номером счётчика, измерениями и метриками и вызовите метод get_data.

Что нужно для доступа к API Яндекс Метрики?

OAuth-токен и номер счётчика Метрики. Токен получают через Яндекс OAuth, номер счётчика виден в настройках Метрики.

В какую базу данных можно грузить данные Метрики?

Коннектор morin умеет ClickHouse, PostgreSQL и MySQL. База выбирается одним параметром subd.

Заключение

Мы разобрали, как выгружать данные из Яндекс Метрики через API на Python и грузить их в ClickHouse, PostgreSQL или MySQL с помощью бесплатной библиотеки morin. Задаёте измерения и метрики, выбираете базу одним параметром - и статистика счётчика копится в вашей базе данных. По такому же принципу morin работает с Директом, OZON, Wildberries и другими источниками.

Полезные ссылки