Летом мы поделились исходным кодом бота для генерации трафика с помощью парсинга музыки из VK в Telegram. Что ж, пришло время поделиться еще одним концептуально схожим, но все же другим ботом — загрузчиком YouTube-роликов. Тем более что после замедлений иной раз реально проще скачать ролик, чтобы каждый раз материться, когда что-то залагает. Впрочем, к черту лирику!
Принцип работы бота для скачивания видео из YouTube
Алгоритмически этот бот достаточно прост. И, в отличие от парсера музыки, в нем нет миллиона кнопок. А значит, и код будет легче. Кроме того, для упрощения анализа читателями мы не стали добавлять в него «попрошайку подписки на канал» — ведь вы сможете скопировать ее код из бота для парсинга музыки. Вообще, алгоритм можно было бы описать как: кинул ссылку → на ролик → подписался на канал → скачал ролик. Но все же для тех, кто будет пытаться все это дело использовать, расскажем чуть подробнее:
- Бот авторизуется через bot_api в Telegram.
- После авторизации бот слушает эфир.
- Получив любое сообщение, которое не является ссылкой на YouTube-ролик, бот просит прислать ему ссылку на видео, которое юзер хочет скачать.
- После этого он делает API-запросы на серверы YouTube, получает видеоряд и звуковые дорожки для 4 форматов — 114, 360, 720 и 1080.
- Все это объединяется в общий массив и выводится пользователю в виде сообщения со ссылками.
Важно: лучшее место для модуля с попрошайкой подписки на канал — между 4-м и 5-м шагом.
Пошаговая инструкция, как сделать Telegram-бота для скачивания видео с YouTube
Для начала нужен Python-сервер. Его вы можете как арендовать, так и развернуть самостоятельно на своем ПК с помощью этой статьи. Если вы совсем новичок, советуем пока не тратиться на аренду и протестировать все на сервере, развернутом собственноручно. Если не новичок — вам виднее, как поступать.
Когда сервер готов — настаиваем его. Для этого пишем в консоль:
pip install telebot
Затем пишем:
pip install yt_dlp
Сервер настроен. Теперь нужен токен для управления ботом.
Для этого пишем BotFather и следуем его инструкциям. После получения токена сохраняем его для удобства.
В корневой папке сервера создаем bot.py и добавляем в него код:
import telebotimport yt_dlp
BOT_TOKEN = '
ТОКЕН СЮДА
'
bot = telebot.TeleBot(BOT_TOKEN)
def get_download_links(youtube_url):
options = {
'quiet': True,
'noplaylist': True,
}
with yt_dlp.YoutubeDL(options) as ydl:
info = ydl.extract_info(youtube_url, download=False)
formats = info.get("formats", [])
links = {}
audio_url = None
for f in formats:
if f.get("vcodec", "none") != "none":
resolution = f.get("height", None)
url = f.get("url", None)
print(f"Обрабатываю формат: {f.get('format_id')} | Разрешение: {resolution}p | URL: {url}")
if resolution == 360 and f.get("acodec", "none") != "none":
audio_url = url
links[360] = url
print("Найден формат 360p")
elif resolution and resolution in [144, 720, 1080]:
if url and url.startswith("https://rr"):
if resolution == 144:
links[144] = url
print("Найден формат 144p")
elif resolution == 720:
links[720] = audio_url
print("Найден формат 720p")
elif resolution == 1080:
links[1080] = audio_url
print("Найден формат 720p")
print("Итоговые ссылки для скачивания:")
for resolution, url in links.items():
print(f"{resolution}p: {url}")
return [(f"{resolution}p", url) for resolution, url in links.items()]
@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.reply_to(message, "Привет! Отправь мне ссылку на YouTube-видео, и я пришлю тебе ссылки на скачивание.")
@bot.message_handler(content_types=['text'])
def handle_message(message):
youtube_url = message.text.strip()
if "youtube.com" in youtube_url or "youtu.be" in youtube_url:
try:
bot.send_message(message.chat.id, "Ищу ссылки на видео, подождите немного...")
links = get_download_links(youtube_url)
if not links:
bot.send_message(
message.chat.id,
"Не удалось найти ссылки для скачивания. Возможно, это защищённое видео или неподдерживаемый формат."
)
else:
response = "Доступные форматы для скачивания:\n"
for quality, url in links:
response += f"{quality}: [Скачать]({url})\n"
bot.send_message(message.chat.id, response, parse_mode='Markdown')
except Exception as e:
bot.send_message(message.chat.id, f"Произошла ошибка: {e}")
else:
bot.reply_to(message, "Пожалуйста, отправьте корректную ссылку на YouTube-видео.")
bot.polling()
Вставляем свой токен вместо “ТОКЕН СЮДА”.
Сохраняем bot.py
Пишем в консоль сервера python bot.py
Все! Дальше просто проверяем работоспособность.
Демонстрация работы
Подводя итоги
Как видите, создать бот для загрузки роликов с YouTube — гораздо проще, чем кажется. А если прикрутить к нему попрошайку подписки, будет та же воронка, что и с парсером музыки. Но никто не запрещает и крутить рекламу прямо в бот. Следите за нашим Telegram-каналом и создавайте ботов для арбитража первыми!