Данные YouTube Analytics через API в ClickHouse, Postgres и MySQL на Python

Данные YouTube Analytics через API в ClickHouse, Postgres и MySQL на Python

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

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

Зачем выгружать данные из YouTube Analytics

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

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

Решение: забрать данные из YouTube Analytics через API в свою базу данных и работать уже там. А замем сводить все данные в собственный отчёт и считать любые нужные метрики:

Что такое API YouTube Analytics

YouTube предоставляет два API: Data API (справочные данные - список видео, каналы) и Analytics API (статистика - просмотры, время просмотра, аудитория). Через youtube api можно вытянуть список видео канала и метрики по каждому из них в разрезе дней.

Работает всё так: вы авторизуетесь по протоколу OAuth, отправляете запрос, а в ответ получаете данные. Библиотека morin прячет получение токенов, постраничную выгрузку и разбор ответов внутри.

Получаем доступ к API: refresh-токен

Доступ к YouTube Analytics устроен через OAuth Google. Для работы коннектора нужен refresh-токен - долгоживущий ключ, который morin обменивает на рабочий токен доступа автоматически. Refresh-токен получают, авторизовавшись в своём аккаунте Google через OAuth (приложение уже встроено в библиотеку).

Refresh-токен даёт доступ к данным канала, поэтому храните его в секрете.

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

pip install morin

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

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

Бесплатный старт: получаем данные YouTube на Python

Вытащим данные канала в Python. База и Docker пока не нужны, всё запускается локально и бесплатно.

from morin import YOUTUBEbyDate

yt = YOUTUBEbyDate(
    refresh_token='ВАШ_REFRESH_ТОКЕН',
    add_name='channel1',
    start='2025-01-01',
)

Список видео. Проверим доступ, получив видео канала:

videos = yt.get_videos()
for v in videos[:5]:
    print(v.get('id'), v.get('title'))

Аналитика за день. Метрики по видео за конкретную дату:

analytics = yt.get_analytics('2025-06-01')
print(f'Строк аналитики: {len(analytics)}')

На выходе - списки словарей, готовые к анализу. Уже на этом этапе morin работает как обычный клиент youtube api.

Загрузка данных YouTube Analytics в ClickHouse

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

Добавляем параметры подключения и указываем отчёты через запятую:

from morin import YOUTUBEbyDate

yt = YOUTUBEbyDate(
    subd='clickhouse',
    host='localhost', port='8123',
    username='default', password='',
    database='youtube',
    add_name='channel1',
    refresh_token='ВАШ_REFRESH_ТОКЕН',
    start='2025-01-01',
    backfill_days=3,
    reports='videos,analytics',
)

yt.collecting_manager()

Что делает collecting_manager:

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

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

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

Для PostgreSQL:

yt = YOUTUBEbyDate(
    subd='postgresql',
    host='localhost', port='5432',
    username='postgres', password='postgres',
    database='youtube',
    add_name='channel1',
    refresh_token='ВАШ_REFRESH_ТОКЕН',
    start='2025-01-01', backfill_days=3,
    reports='videos,analytics',
)
yt.collecting_manager()

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

Какие отчёты умеет коннектор YouTube

Отчёты задаются параметром reports (через запятую). Полный список - с функцией, которая вызывает каждый отчёт:

  • videos - список видео канала со справочной информацией, функция get_videos()
  • analytics - метрики по видео и дням (просмотры, время просмотра), функция get_analytics()
  • analytics_full - расширенная аналитика, функция get_analytics_full()
  • reach - охваты, функция get_reach()
  • reach_by_date - охваты по датам, функция get_reach_by_date()

Обычно собирают videos вместе с analytics, чтобы к цифрам подтянуть названия видео. Для регулярного сбора запускают ежедневно.

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

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

FAQ

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

Установите библиотеку morin (pip install morin), создайте объект YOUTUBEbyDate с refresh-токеном и вызовите методы get_videos, get_analytics. Данные вернутся списком словарей.

Что нужно для доступа к YouTube API?

Refresh-токен Google OAuth. Его получают, авторизовавшись в своём аккаунте Google; приложение для авторизации уже встроено в библиотеку.

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

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

Заключение

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

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