Получение ссылки на новое видео youtube

Я пишу код, в котором частью является функция рассылки уведомлений о новых видео YouTube (а также трансляциях, shorts) какого-то канала. Мне нужны просто ссылка и название, ничего другого. Я могу реализовать это с помощью обычного bs4, но я сомневаюсь, что это оптимальное решение. Я уверен, что это следует делать с помощью YouTube API, но сам я в нём, увы, разобраться не могу.


Ответы (2 шт):

Автор решения: denisnumb

Под вашу задачу хорошо подойдет библиотека yt-dlp

Установка такая:

pip install yt-dlp

После установки библиотеку можно использовать прямо из консольного интерфейса.

Формат:

yt-dlp --arg-1 --arg-2 --arg-3 value <ссылка на канал/плейлист/видео>

Например:

yt-dlp --skip-download --print-json --flat-playlist https://www.youtube.com/@MrBeast/videos

После выполнения данной команды, запущенный процесс вернет вам краткую информацию о каждом видео на канале. Там есть и название и ссылка.

Все параметры, конечно, перечислять не буду, их там очень много, описание каждого можете посмотреть в README.md в репозитории на GitHub.


Ну и конечно, можно использовать как библиотеку для Python:

from yt_dlp import YoutubeDL


options = {
    'extract_flat': True
}

def get_channel_videos(channel_url: str) -> list[dict[str, str]]:
    with YoutubeDL(options) as ydl:
        channel_data = ydl.extract_info(channel_url, download=False)
        
        return [
            {'title': video.get('title'), 'url': video.get('url')}
            for video in channel_data['entries']
        ]

for video in get_channel_videos('https://www.youtube.com/@MrBeast/videos'):
    print(video['title'], video['url'])

Опять же, формат вывода у метода extract_info — это очень большой и сложный json — он же dict в Python.

На первый раз, для более детального анализа рекомендую выгрузить результат выполнения метода в какой-нибудь файл и вручную изучить что интересного можно узнать о видео.


Конкретно по вашей задаче — имеет смысл добавить аргумент playlistend, который ограничивает количество получаемых видео до 10 штук, чтобы не выгружать весь канал:

options = {
    'extract_flat': True,
    'playlistend': 10
}

И затем, сравнивая со старым списком, можно посмотреть какие видео были добавлены на канал

→ Ссылка
Автор решения: Максим

С помощью обычного bs4 это будет и проще, поскольку вы его понимаете(на сколько я понял), и, возможно, оптимальнее по времени, ведь Вы умеете с ним работать.

Я бы на Вашем месте сделал именно так.

→ Ссылка