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 и другими источниками.