Решил написать телеграмм бота который грузит видео с ютуба
Проблема в следующем то что видео вообще не грузит .
Или это проблема связано с библиотекой youtube.dl
Код:
youtube.py
# coding: utf8
from pyrogram.handlers import MessageHandler
import time
from pyrogram import Client, filters
import logging
import requests
import download
import random
import os
import validation
logging.basicConfig(level=logging.INFO)
bot = Client(
"ses1",
api_id=12345,
api_hash="0123456789abcdef0123456789abcdef",
workers = 5,
bot_token='123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11'
)
@bot.on_message(filters.command("start", ["!", "/"]))
def connect(chat, m):
try:
userID = m.chat.id
bot.send_message(userID, 'Привет! Я умею скачивать видео из YouTube. Отправь мне ссылку — а я отправлю тебе скачанное видео')
except Exception as e:
print(e)
@bot.on_message(filters.text)
def get(chat, m):
url=m.text
userID = m.chat.id
try:
VID_ID = ''
VID_ID = validation.to_valid(url, VID_ID) #валидация регуляркой из validation.py
bot.send_message(m.chat.id, 'Начинаем загрузку видео...')
download.worker(VID_ID) #скачивание видео
bot.send_video(m.chat.id, str(VID_ID) + '.mp4') #отправляем видео пользователю
os.remove(VID_ID + '.mp4') #удаляем видео на диске в целях жкономии места
except Exception as e:
bot.send_message(m.chat.id, f'Что-то пошло не так! Ошибка `{e}`')
bot.run()
download.py
# coding: utf8
import youtube_dl
import re
def worker(VID_ID):
ydl_opts = {
'max_filesize': 90000000000,
'format': 'best',
'outtmpl': VID_ID + '.mp4',
'output': VID_ID + '.mp4',
'quiet': True
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([VID_ID])
volidation.py
import re
def to_valid(url, VID_ID):
youtube_urls_test = ['']
youtube_urls_test.pop(0)
youtube_urls_test.append(url)
youtube_regex = (
r'(https?://)?(www\.)?'
'(youtube|youtu|youtube-nocookie)\.(com|be)/'
'(watch\?v=|embed/|v/|.+\?v=)?([^&=%\?]{11})')
youtube_regex_match = re.match(youtube_regex, url)
VID_ID = youtube_regex_match.group(6)
if youtube_regex_match != None:
return VID_ID
else:
raise Exception('NOT_VALID_URL')