Untitled
unknown
python
a year ago
5.8 kB
4
Indexable
Never
#Создание Telegram бота для скачивания видео с YouTube и отправки его в виде аудио пользователю с использованием библиотеки aiogram требует нескольких шагов. Прежде всего, вам понадобится зарегистрировать своего бота на Telegram и получить токен для доступа к API. Затем вы можете использовать сторонние библиотеки, такие как pytube для скачивания видео с YouTube и ffmpeg для конвертации видео в аудио. Вот пример кода на Python, который выполняет эти задачи: import aiogram.utils.markdown as md from aiogram import Bot, Dispatcher, types from aiogram.contrib.middlewares.logging import LoggingMiddleware from aiogram.dispatcher import FSMContext from aiogram.types import ParseMode from aiogram.utils import executor from aiogram.dispatcher.filters import Text from aiogram.types import InputFile from aiogram.types import ReplyKeyboardRemove from aiogram.dispatcher import FSMContext from pytube import YouTube import ffmpeg from config import TOKEN import logging from states import TestStates from aiogram.contrib.middlewares.logging import LoggingMiddleware from aiogram import Bot, Dispatcher, types from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters import Text from aiogram.types import ParseMode from aiogram.utils import executor from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, \ InlineKeyboardMarkup, InlineKeyboardButton from aiogram.utils import markdown as md import asyncio import subprocess logging.basicConfig(level=logging.INFO) bot = Bot(token=TOKEN) dp = Dispatcher(bot) loop = asyncio.get_event_loop() commands = [types.BotCommand(command="/start", description="Начать работу"), types.BotCommand(command="/help", description="Помощь"), types.BotCommand(command="/download_video", description="Скачать видео с YouTube")] @dp.message_handler(commands=['start']) async def cmd_start(message: types.Message): """ Conversation's entry point """ # Set state await message.reply("Привет! Я бот для скачивания видео с YouTube и отправки его вам в виде аудио. " "Просто отправьте мне ссылку на видео, и я сделаю остальное.", reply=False) @dp.message_handler(commands=['help']) async def cmd_help(message: types.Message): """ Conversation's entry point """ await message.reply("Этот бот предназначен для скачивания видео с YouTube и отправки его вам в виде аудио. " "Просто отправьте мне ссылку на видео, и я сделаю остальное.", reply=False) @dp.message_handler(commands=['download_video']) async def cmd_download_video(message: types.Message): """ Conversation's entry point """ await message.reply("Пожалуйста, отправьте мне ссылку на видео с YouTube, которое вы хотите скачать и получить в виде аудио.", reply=False) await TestStates.enter_video_url.set() @dp.message_handler(state=TestStates.enter_video_url) async def process_video_url(message: types.Message, state: FSMContext): async with state.proxy() as data: data['video_url'] = message.text # Скачиваем видео с YouTube video_url = data['video_url'] await message.reply(f"Скачиваем видео с YouTube: {video_url}...", reply=False) try: # Создаем объект YouTube yt = YouTube(video_url) # Выбираем первый доступный стрим в формате mp4 stream = yt.streams.filter(only_audio=True).first() # Загружаем видео stream.download(output_path="downloads") # Конвертируем видео в аудио input_file_path = f"downloads/{yt.title}.mp4" output_file_path = f"downloads/{yt.title}.mp3" ffmpeg.input(input_file_path).output(output_file_path).run() # Отправляем аудио пользователю await message.reply_audio(audio=InputFile(output_file_path), reply=False) except Exception as e: await message.reply(f"Произошла ошибка: {str(e)}", reply=False) finally: # Очищаем состояние await state.finish() if __name__ == '__main__': from aiogram import executor from handlers import dp, on_start, on_help, on_download_video executor.start_polling(dp, skip_updates=True) Код выше представляет собой основу для бота, который выполняет необходимые действия для скачивания видео с YouTube и отправки его в виде аудио пользователю. Не забудьте создать файл config.py с вашим токеном и импортировать его. Вы также должны создать файл states.py для управления состояниями FSM: from aiogram.dispatcher.filters.state import State, StatesGroup class TestStates(StatesGroup): enter_video_url = State()