В середине 2024-го мы уже публиковали материал о том, как сделать бот для скачивания музыки из VK, чтобы с его помощью генерировать трафик в Telegram-каналах. В конце 2024-го был бот для скачивания роликов с YouTube. Новый бот объединяет в себе две эти идеи и скачивает музыку прямо из ролика. Рассуждая о том, может ли это использоваться для арбитража, мы провели ресерч — и да, такие боты есть, и трафик в Telegram-каналах они генерируют. В то же время, в отличие от ботов для скачивания музыки из VK или видео с YouTube, рекламы казиков в них мы не видели. Что, впрочем, даже хорошо — ведь будет меньше конкурентов.
Принцип работы бота для скачивания музыки из YouTube
Алгоритм данного бота тривиален. Во многом это обеспечено тем, что точно так же, как и в боте для скачивания видео, мы решили не добавлять функционал попрошайки — ведь уже есть парсер музыки. Кроме того, в боте нет кнопок, что также облегчает и код, и его восприятие новичками. В целом же алгоритм следующий:
- Бот проходит авторизацию по bot_api в Telegram.
- Прослушивает эфир.
- Если сообщение юзера не ссылка на видео с YouTube, просит дать ссылку в подходящем формате.
- Если сообщение — ссылка, то бот обращается к YouTube по API, получает аудиопоток и сохраняет его на сервер.
- После сохранения он конвертирует аудиопоток в mp3-файл.
- После сохранения файла — отправляет его пользователю.
- В случае возникновения ошибок при сохранении или конвертации — извещает об этом пользователя.
Важно: идеальное место внедрения попрошайки — сразу после шага 5. Это практически гарантирует, что пользователь не уйдет без своей песенки после подписки.
Пошаговая инструкция, как сделать Telegram-бот для скачивания музыки с YouTube
В первую очередь нужен поддерживающий Python сервер — можно использовать и другие ЯП, но в нашем примере используется Python. Такой сервер можно либо арендовать, либо развернуть на своем ПК. Для тестов советуем именно второй вариант — арендовать всегда успеете, если не передумаете.
Затем сервер нужно настроить под данный бот — пишем в консоли:
pip install telebot
Затем:
pip install yt_dlp
Настройка завершена. Далее — получение токена.
- Заходим в BotFather, делаем все по инструкции из его ответа. Сохраняем токен.
- На сервере создаем текстовый файл, переименовываем в bot.py, в него вставляем:
import telebot
import yt_dlpimport os
from mutagen.mp3 import MP3
BOT_TOKEN = 'ТОКЕН СЮДА'
bot = telebot.TeleBot(BOT_TOKEN)
def download_and_convert_audio(youtube_url):
options = {
'format': 'bestaudio/best',
'quiet': True,
'outtmpl': 'dow/%(title)s.%(ext)s',
}
with yt_dlp.YoutubeDL(options) as ydl:
info = ydl.extract_info(youtube_url, download=True)
original_file = ydl.prepare_filename(info)
mp3_file = original_file.rsplit('.', 1)[0] + '.mp3'
if original_file.endswith('.webm'):
try:
with open(original_file, 'rb') as source, open(mp3_file, 'wb') as target:
target.write(source.read())
return mp3_file
except Exception as e:
return f"Ошибка при конвертации: {e}"
else:
return original_file
@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.reply_to(message, "Привет! Отправь мне ссылку на YouTube-видео, и я пришлю тебе аудиофайл в формате MP3.")
@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, "Скачиваю и конвертирую аудиофайл, подождите немного...")
result = download_and_convert_audio(youtube_url)
if os.path.exists(result):
bot.send_message(message.chat.id, f"Аудиофайл готов: `{result}`. Теперь отправляю...")
send_audio(message, result)
else:
bot.send_message(message.chat.id, f"Произошла ошибка: {result}")
except Exception as e:
bot.send_message(message.chat.id, f"Произошла ошибка: {e}")
else:
bot.reply_to(message, "Пожалуйста, отправьте корректную ссылку на YouTube-видео.")
def send_audio(message, audio_path):
try:
print(f"Отправка файла: {audio_path}")
with open(audio_path, 'rb') as audio_file:
bot.send_audio(message.chat.id, audio_file)
except Exception as e:
bot.send_message(message.chat.id, f"Произошла ошибка при отправке: {e}")
if not os.path.exists('dow'):
os.makedirs('dow')
bot.polling() - Заменяем “ТОКЕН СЮДА” на свой токен. Именно красный текст — не кавычки.
- Сохраняем файл.
- Запускаем бот командой python bot.py
Бот запущен — тестим, все ли работает.
Демонстрация работы
Подводя итоги
Вот и все — бот готов! Просто, не правда ли? Дальше либо крутите рекламу прямо через бот, либо переливаете трафик на каналы с помощью модуля-попрошайки. Подписывайтесь на наш Telegram, чтобы первыми получать готовый исходный код ботов для арбитражных задач.