47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
|
import errno
|
||
|
import os
|
||
|
|
||
|
from fastapi import HTTPException
|
||
|
|
||
|
from src.core.result import ResultTypeEnum, Result
|
||
|
from src.core.ydl import VideoDownloader
|
||
|
from src.exceptions.download_exceptions import SiteNotImplementedException
|
||
|
|
||
|
|
||
|
class BaseParser:
|
||
|
BASE_ENCODING = 'utf-8'
|
||
|
BASE_DIR = None
|
||
|
|
||
|
def __init__(self, params: dict):
|
||
|
self.params = params
|
||
|
|
||
|
def video_download(self):
|
||
|
ydl_opts = {
|
||
|
"format": self.params["format"],
|
||
|
"merge_output_format": self.params["merge_output_format"],
|
||
|
'outtmpl': self.params["outtmpl"],
|
||
|
"quiet": True
|
||
|
}
|
||
|
downloader = VideoDownloader(link=self.params["link"], ydl_opts=ydl_opts)
|
||
|
video_info = downloader.get_info()
|
||
|
if os.path.exists(
|
||
|
os.path.join(os.getcwd() + f"Youtube/{video_info['id']}_{video_info['width']}.{video_info['ext']}")
|
||
|
):
|
||
|
return Result(result_type=ResultTypeEnum.EXIST)
|
||
|
try:
|
||
|
downloader.ydl_opts["quiet"] = False
|
||
|
result = downloader.download()
|
||
|
return result
|
||
|
except SiteNotImplementedException as ex:
|
||
|
raise HTTPException(
|
||
|
status_code=400,
|
||
|
detail=ex.message
|
||
|
)
|
||
|
|
||
|
def make_sure_path_exists(self,):
|
||
|
try:
|
||
|
os.makedirs(self.BASE_DIR)
|
||
|
except OSError as exception:
|
||
|
if exception.errno != errno.EEXIST:
|
||
|
raise
|