video_downloader_service/src/core/ydl.py
2024-04-23 14:57:01 +03:00

43 lines
1.3 KiB
Python

from __future__ import unicode_literals
import os
import uuid
from datetime import datetime
from urllib.parse import urlparse
import youtube_dl
from src.exceptions.download_exceptions import SiteNotImplementedException
class VideoDownloader:
SUPPORTING_WEBSITES = [
"ok.ru", "vk.com", "www.youtube.com"
]
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_DOWNLOAD_DIR = os.path.join(BASE_DIR, "downloads")
BASE_YOUTUBE_DIR = os.path.join(BASE_DOWNLOAD_DIR, "Youtube")
def __init__(self, link: str, ydl_opts: dict = None, username: str = None, password: str = None):
self.link = link
self.ydl_opts = ydl_opts
self.username = username
self.password = password
@staticmethod
def get_unique_video_filename():
prefix = f'vid_{datetime.now().strftime("%Y%m%d%H%M%S")}'
random_uuid4 = uuid.uuid4().hex[:8]
filename = f"{prefix}_{random_uuid4}"
return filename
def download(self):
domain = urlparse(self.link).netloc
if domain not in self.SUPPORTING_WEBSITES:
raise SiteNotImplementedException
with youtube_dl.YoutubeDL(self.ydl_opts if self.ydl_opts else {}) as ydl:
ydl.download([self.link])
result = ydl.extract_info(self.link, download=False)
return result