Загрузчик YouTube-роликов на Python

Загрузчик YouTube-роликов на Python

@wa1pper

Зачастую новички быстро теряют интерес к программированию, потому что не могут сразу применить свои знания на практике и сделать что-то интересное и полезное. Вывод цифр и результатов работы сортировочных алгоритмов в консоль быстро надоедает и утомляет, а знаний на большие проекты в начале пути не хватает. Поэтому в этой статье мы напишем маленькую программу, которая поможет нам автоматизировать процесс скачивания видео YouTube и разберем принципы работы с библиотекой pytube.

В самом начале

Для начала нам надо убедиться, что на компьютере установлена актуальная версия Python и библиотеки pytube. Для этого достаточно последовательно ввести в консоль команды со скриншота ниже. Если в ответ увидели номер версии, то все необходимое уже установлено.

Для установки на Linux поочередно введите в консоль следующие команды:

sudo pip install python3
sudo pip install pytube3

Еще нам понадобится любая удобная IDE, редактор кода или даже онлайн-инструмент наподобие Repl.it, при работе в нем даже не надо будет что-то устанавливать, при первом запуске сервис сам скачает все необходимые пакеты. Я же пишу код в Pycharm Professional.

Приступаем к написанию кода

Для того чтоб лучше понять, что мы хотим от работы нашей программы, изобразим общий алгоритм на блок-схеме. Это максимально простая схема, которая поможет нам понимать, что и в каком порядке мы должны выполнять.

Блок-схема проекта

Мы хотим выводить информацию в консоль на русском языке, поэтому в самом начале нашего файла пропишем вот эти три строчки и заодно объявим использование библиотеки pytube:

Локализация и подключение pytube

Затем обратимся к схеме и заметим, что сперва надо спросить пользователя ссылку на скачиваемое видео. Поэтому в следующих двух строках попросим пользователя ввести ссылку, поместим её в переменную link и передадим классу YouTube:

Получение ссылки от пользователя

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

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

Вывод иноформации

Если Вы часто смотрите ролики на YouTube, то наверняка знаете, что каждое видео доступно в нескольких форматах и с разным разрешением. Pytube позволяет нам работать с этими потоками и если мы далее напишим слеующую строку и запустим код, то увидим в консоли все доступные потоки:

#Вывод всех доступных потоков
print(yt.streams)

Мы можем фильтровать потоки, выбирать нужные и уже работать с ними, для этого доступны следующие конструкции:

#Вывод всех аудио-потоков
print(yt.streams.filter(only_audio=True))
#Вывод всех видео-потоков
print(yt.streams.filter(only_video=True))
#Вывод всех progressive-потоков
print(yt.streams.filter(progressive=True))
#progressive-потоки — содержат и аудио и видео потоки, но качеств ограничено в 720p
#dash-потоки — содержат только видео-потоки в высоком качестве

Но мы хотим упростить задачу себе и будем сразу скачивать видео в наилучшем доступном качестве, для этого пишем следующее:

Выбор потока с максимальным качеством

Еще раз обратим внимание на схему и заметим, что первые два пункта мы уже выполнили, теперь остается только скачать видео, для этого достаточно написать всего одну строчку:

ys.download()

У такой конструкции есть несколько минусов. Во-первых, пользователь не видит прогресса и не знает началось ли скачивание и когда оно закончится, во-вторых, видео сохранится в папку с проектом, а не в привычную для пользователя “Загрузки”, поэтому чуть-чуть исправим нашу строку, указав полный путь до необходимой папки, и получим следующее:

Загрузка

Теперь у нас есть информирование о начале и завершении загрузки и все сохраняется по привычному пути.

Весь код можно посмотреть на GitHub, а выглядит он так:

Финальный проект

Что дальше?

На самом деле это самая простая реализация подобного инструмента и его можно заметно улучшить:

  • добавить возможность передавать ссылку на видео аргументом командной строки;
  • сделать обработку ошибок, если пользователь передаст программе не ссылку;
  • дать возможность выбирать поток для скачивания и путь для сохранения;
  • сделать интерфейс для более удобного взаимодействия с программой.

Report Page