Писал ChatGPT, долго с ним мучались.. Суть такова - бот, который может загрузить видео с YouTube и отправить его вам в zip-архиве (Видео, название, теги, описание и превью) Может кто потыкать и исправить ошибки? И добавить что бы после отправки пользователю архива файлы удалялись с сервера.
Python:
import os
import zipfile
import yt_dlp as youtube_dl
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
TOKEN = 'Токен от бота'
def handle_video_url(update, context):
url = update.message.text
try:
with youtube_dl.YoutubeDL({}) as ydl:
info_dict = ydl.extract_info(url, download=False)
video_url = info_dict.get('url', None)
title = info_dict.get('title', 'video')
description = info_dict.get('description', '')
tags = info_dict.get('tags', None)
video_id = info_dict.get('id', None)
context.bot.send_message(chat_id=update.effective_chat.id, text="Видео загружено")
ydl.download([url])
# Saving the video preview
preview_url = info_dict.get('thumbnail', None)
if preview_url:
preview_filename = f'{title}.jpg'
ydl.download([preview_url])
os.rename(os.path.join(os.getcwd(), 'maxresdefault [maxresdefault].jpg'), os.path.join(os.getcwd(), preview_filename))
else:
context.bot.send_message(chat_id=update.effective_chat.id, text="Превью не найдено")
zip_filename = create_zip(video_id, title, description, tags)
with open(zip_filename, 'rb') as zip_file:
context.bot.send_document(chat_id=update.effective_chat.id, document=zip_file)
except Exception as e:
context.bot.send_message(chat_id=update.effective_chat.id, text=f"Произошла ошибка: {e}")
def create_zip(video_id, title, description, tags):
zip_filename = f"{title}.zip"
with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as myzip:
myzip.write(f'{title}.mp4', arcname=f'{title}.mp4')
with open(f'{title}.txt', 'w', encoding='utf-8') as f:
f.write(f'Video ID: {video_id}\nTitle: {title}\nDescription: {description}\nTags: {tags}')
preview_path = os.path.join(os.getcwd(), f'{title}.jpg')
if os.path.exists(preview_path):
myzip.write(preview_path, arcname=f'{title}.jpg')
return zip_filename
def start(update, context):
context.bot.send_message(chat_id=update.effective_chat.id, text="Привет! Я бот, который может загрузить видео с YouTube и отправить его вам в zip-архиве. Просто отправьте мне ссылку на видео.")
def main():
updater = Updater(token=TOKEN, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start", start))
dp.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_video_url))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()