Pull to refresh

Как я клиент для 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.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.