Наткнулся на YouTube на топ-20 общественно-политических ютуб-каналов, результат за месяц. Подумал, такое легко сделать самому, заодно изучу API YT и проверю результаты. А готовый алгоритм можно применить и на другие тематические каналы.

Почитал статью на Хабр, посмотрел ролик на YouTube, полистал документацию и приступил писать код на коленке в jupyter notebook.

Первая проблема - как выбрать каналы, которые будут участвовать в рейтинге? Поиск по каналам по ключевым словам "новости, политика" дало много мусора. Ок, взял готовый список каналов из оригинального обзора, добавил немного своих для интереса.

Скрытый текст

id

title

UCdubelOloxR3wzwJG9x8YqQ

Телеканал Дождь

UCBzDAjLfvBUBVMMP6-K-y0w

Ходорковский LIVE

UCgpSieplNxXxLXYAzJLLpng

Майкл Наки

UCrp2It0yWUC7XcrWyBIQeKw

NEXTA Live

UCSqO8lV-ric7ow5G5q9roWw

ВОТ ТАК

UCUGfDbfRIx51kJGGHIFo8Rw

Максим Кац

UC101o-vQ2iOj9vr00JUlyKw

varlamov

UC7Elc-kLydl-NAV4g204pDQ

Популярная политика

UC2CwLS7djYymder2K3UpbJg

Антон Хардин

UCb64k6yqn3s4DlayVkbJ2qw

Обманутый Россиянин

UCXoAjrdHFa2hEL3Ug8REC1w

DW на русском

UCiWMFQCGvwGSc8QWHOqcQhw

Радио Свобода

UCSK57JMV0OJL1C7V-YOEVkQ

Комсомольская Правда

UCBG57608Hukev3d0d-gvLhQ

Настоящее Время

UCeKCxQDv6lWDSzuqUXGtMRA

МИНАЕВ LIVE

UC1eFXmJNkjITxPFWTy6RsWg

Редакция

UCVPYbobPRzz0SjinWekjUBw

Анатолий Шарий

UCS-cgYslpMpH5FkxJ2e0Vpg

Newsader

UCvQXaJTjA3jRucTKN4CGiwg

Осторожно: Собчак

UCb2oej0JtxlnywlqoSiHHVQ

Юрий Швец -- официальный канал

UCHQT00AqYAG-D8HDJ3pgLdw

Мир в Огне

UCO1lJlI3gjuOMrKppvPlDww

Новая газета Европа

UCFLgZndaFe5JZTkq6d-W-Cw

Радио Свобода. Новости

UCkp0Tc7ll67bChomTyB1ezQ

Om TV

UCTVk323gzizpujtn2T_BL7w

The Breakfast Show

UCjWy2g76QZf7QLEwx4cB46g

Alexey Arestovych

UCjj5_jGA15A3IHMS3ml28yA

БОЛЬШОЙ КУШ

UCcO762BN2bx6tyw_VlsDagw

Дед Архимед

UCI4hEQc8mkuK2eMsew_MwTw

Любовь Соболь

UCnbuCp4py12SNWCc5TI1RHA

Denis Kazanskyi

Далее проходимся по каналам, собираем все видео, которые были опубликованы в прошлом месяце. Затем по каждому видео собираем статистику просмотров. В оригинальном обзоре shorts учитываются с коэффициентом 1/5. В API нет признака видео shorts или нет. ChatGPT любезно подсказал определять по длине видео: меньше минуты - shorts. Ок, вытаскиваем еще длину видео, определяем тип, коэффициент и взвешенное количество просмотров. Сортируем и получаем список. Сверяем с оригиналом.

Таблица рейтинг каналов в сравнении с оригиналом
Таблица рейтинг каналов в сравнении с оригиналом

В целом неплохо, место каналов более менее похоже. Но представьте, какого участникам рейтинга, если из-за ошибки кто-то попадет на 4, вместо 3 места. Нужен более однозначный алгоритм. Сравниваю количество просмотров - отклонения местами гигантские, например, 11 млн просмотров по varlamov.

Время сделать шаг назад и вспомнить предположения. Я считал, что раз это новостные каналы, то интерес к видео будет не более недели. Кто будет смотреть вчерашние новости. Поэтому собрать статистику на 5й день следующего месяца будет вполне хорошим приближением. Но на каналах из списка есть не только новостные видео. Эти могут смотреть и через год.

Возвращаемся к решению. На ум приходит два варианта:

  1. брать общее количество просмотров канала на начало месяца и брать разницу между месяцами. То есть инкрементное увеличение общего количества просмотров и есть количество просмотров канала за месяц.
    Проблема - как вычленить shorts?

  1. проходиться дополнительно по всем старым видео на канале и фиксировать их количество просмотров, а потом по каждому видео высчитывать увеличение.
    Проблема - объемы и лимиты. На YT API есть лимит обращений в сутки в 10К. Причем поиск стоит 100 очков. По 25 каналам за последний месяц у меня набралось порядка 3 тысяч видео. Смотреть во всю глубину канала и собирать статистику выглядит дорого.

Можно использовать комбинацию решений. Смотреть общее изменение просмотров канала, сравнить с суммой просмотров по видео и копать вглубь, пока эти величины не будут в рамках желаемой погрешности. Но такое решение кажется сложноватым для такой "простой" изначальной задачи.

Для чего я описал этот случай. Мне он показался наглядным примером частых случаев, когда заказчик дает "простую" задачу, которая из-за каких-то деталей может иметь сложное техническое решение. Вспомнилось

Любая сложная задача имеет простое, легкое для понимания неправильное решение.

Хотя может я не до конца разобрался с API YouTube и есть элегантное решение? Или может оригинальный обзор тоже делает какие-то упрощения? Если есть идеи, пишите в комментариях. Интересно ваше мнение.

P.S. код писал на коленке, он некрасивый и непонятный, поэтому прикладывать не буду. Базовые функции обращения к API YT есть в репозитории в статье на Хабре в начале поста.

Комментарии (0)