Наткнулся на 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й день следующего месяца будет вполне хорошим приближением. Но на каналах из списка есть не только новостные видео. Эти могут смотреть и через год.
Возвращаемся к решению. На ум приходит два варианта:
-
брать общее количество просмотров канала на начало месяца и брать разницу между месяцами. То есть инкрементное увеличение общего количества просмотров и есть количество просмотров канала за месяц.
Проблема - как вычленить shorts?
-
проходиться дополнительно по всем старым видео на канале и фиксировать их количество просмотров, а потом по каждому видео высчитывать увеличение.
Проблема - объемы и лимиты. На YT API есть лимит обращений в сутки в 10К. Причем поиск стоит 100 очков. По 25 каналам за последний месяц у меня набралось порядка 3 тысяч видео. Смотреть во всю глубину канала и собирать статистику выглядит дорого.
Можно использовать комбинацию решений. Смотреть общее изменение просмотров канала, сравнить с суммой просмотров по видео и копать вглубь, пока эти величины не будут в рамках желаемой погрешности. Но такое решение кажется сложноватым для такой "простой" изначальной задачи.
Для чего я описал этот случай. Мне он показался наглядным примером частых случаев, когда заказчик дает "простую" задачу, которая из-за каких-то деталей может иметь сложное техническое решение. Вспомнилось
Любая сложная задача имеет простое, легкое для понимания неправильное решение.
Хотя может я не до конца разобрался с API YouTube и есть элегантное решение? Или может оригинальный обзор тоже делает какие-то упрощения? Если есть идеи, пишите в комментариях. Интересно ваше мнение.
P.S. код писал на коленке, он некрасивый и непонятный, поэтому прикладывать не буду. Базовые функции обращения к API YT есть в репозитории в статье на Хабре в начале поста.
Автор: legofrend