Как стать автором
Обновить

Как я клиент для YouTube на python писал

Написал свой YouTube клиент на python.

Начало

Начну с маленькой истории проекта. Как-то раз, я сижу смотрю ютуб. Попадается видео: "Сделал клиент YouTube для командной строки на python". И я подумал, что круто было-бы сделать свой клиент ютуба для командной строки. Так всё и началось.

Начальный код

Я начал писать. Использовал библиотеки Beautiful Soup 4 и requests для парсинга. Так как YouTube не даёт нормально парсить, а selenium мне было лень учить, я взял форк ютуба Invidious. Для воспроизведения видео использовал mpv. Также, я использовал pyfzf и fzf соответственно для удобного выбора контента. Первой функцией, что я добавил была функция видео (поисковых запросов). Я просто спарсил ссылки и названия и вывел их пользователю. Но был маленький баг, так как в консоли слетела кодировка (я сижу на Linux если что). Потратив дофига времени на гуглинг, я всё же поправил этот маленький баг.

Функция каналов и плейлистов

Второй функцией, которую я добавил была функция каналов. Здесь было чуть сложнее. Я начал также с парсинга ссылок на каналы, выбрав фильтр каналы (Invidious поддерживает удобный шаблон ссылки типа https://invidious.snopyta.org/search?q=&page=&date=&type=&duration=&sort=). Потом дал пользователю возможность выбрать канал и просто спарсил названия и ссылки с этого канала. Также я поступил и с плейлистами.

Добавление поддержки фильтров и Windows

Вспомнив, что я пишу клиент не только под Linux, я пошёл добавлять поддержку винды. Это оказалось простой задачей. Я просто дал пользователю выбрать его ос и в зависимости от этого менял кодировку. Для Windows - это 1250, а для Linux - "KOI8" (позже я автоматизирую этот процесс). Добавив поддержку windows, я начал делать фильтры. Я просто дал пользователю выбор из представленных на Invidious вариантов, а потом просто корректировал выше представленный url.

Поддержка английского языка и автоматизация выбора ос

Я подумал, что было бы отличной идеей добавить поддержку английского языка. Я просто разделил код на две функции: ru и english. А потом в зависимости от выбора пользователя, я просто вызывал эти функции. С языками всё понятно, но что-же с автоматизацией? Вспомнив, что у python есть модуль os, я вооружившись документацией сделал простое определение ос через os.uname().sysname. И в зависимости от этого менял кодировку.

Выводы

Это был довольно крутой и полезный опыт. Плюс ещё один реальный проект в копилку. Весь исходный код выложен на моём GitHub.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.