From 92779033087e2e0f6674829a78a97d10e0cdaaaf Mon Sep 17 00:00:00 2001 From: Serene-Arc Date: Fri, 15 Jul 2022 15:12:39 +1000 Subject: [PATCH] Base VReddit class off of Youtube class --- bdfr/site_downloaders/vreddit.py | 41 ++++---------------------------- bdfr/site_downloaders/youtube.py | 7 +++++- 2 files changed, 10 insertions(+), 38 deletions(-) diff --git a/bdfr/site_downloaders/vreddit.py b/bdfr/site_downloaders/vreddit.py index fda6dac..ad526b4 100644 --- a/bdfr/site_downloaders/vreddit.py +++ b/bdfr/site_downloaders/vreddit.py @@ -11,12 +11,12 @@ from praw.models import Submission from bdfr.exceptions import NotADownloadableLinkError, SiteDownloaderError from bdfr.resource import Resource from bdfr.site_authenticator import SiteAuthenticator -from bdfr.site_downloaders.base_downloader import BaseDownloader +from bdfr.site_downloaders.youtube import Youtube logger = logging.getLogger(__name__) -class VReddit(BaseDownloader): +class VReddit(Youtube): def __init__(self, post: Submission): super().__init__(post) @@ -30,47 +30,14 @@ class VReddit(BaseDownloader): res = Resource(self.post, self.post.url, download_function, extension) return [res] - def _download_video(self, ytdl_options: dict) -> Callable: - yt_logger = logging.getLogger('youtube-dl') - yt_logger.setLevel(logging.CRITICAL) - ytdl_options['quiet'] = True - ytdl_options['logger'] = yt_logger - - def download(_: dict) -> bytes: - with tempfile.TemporaryDirectory() as temp_dir: - download_path = Path(temp_dir).resolve() - ytdl_options['outtmpl'] = str(download_path) + '/' + 'test.%(ext)s' - try: - with yt_dlp.YoutubeDL(ytdl_options) as ydl: - ydl.download([self.post.url]) - except yt_dlp.DownloadError as e: - raise SiteDownloaderError(f'Vreddit download failed: {e}') - - downloaded_files = list(download_path.iterdir()) - if len(downloaded_files) > 0: - downloaded_file = downloaded_files[0] - else: - raise NotADownloadableLinkError(f"No media exists in the URL {self.post.url}") - with open(downloaded_file, 'rb') as file: - content = file.read() - return content - return download - @staticmethod def get_video_attributes(url: str) -> dict: - yt_logger = logging.getLogger('youtube-dl') - yt_logger.setLevel(logging.CRITICAL) - with yt_dlp.YoutubeDL({'logger': yt_logger, }) as ydl: - try: - result = ydl.extract_info(url, download=False) - except Exception as e: - logger.exception(e) - raise NotADownloadableLinkError(f'Video info extraction failed for {url}') + result = VReddit.get_video_data(url) if 'ext' in result: return result else: try: - result = (result["entries"][0]) + result = result["entries"][0] return result except Exception as e: logger.exception(e) diff --git a/bdfr/site_downloaders/youtube.py b/bdfr/site_downloaders/youtube.py index f18f405..70c35ae 100644 --- a/bdfr/site_downloaders/youtube.py +++ b/bdfr/site_downloaders/youtube.py @@ -58,7 +58,7 @@ class Youtube(BaseDownloader): return download @staticmethod - def get_video_attributes(url: str) -> dict: + def get_video_data(url: str) -> dict: yt_logger = logging.getLogger('youtube-dl') yt_logger.setLevel(logging.CRITICAL) with yt_dlp.YoutubeDL({'logger': yt_logger, }) as ydl: @@ -67,6 +67,11 @@ class Youtube(BaseDownloader): except Exception as e: logger.exception(e) raise NotADownloadableLinkError(f'Video info extraction failed for {url}') + return result + + @staticmethod + def get_video_attributes(url: str) -> dict: + result = Youtube.get_video_data(url) if 'ext' in result: return result else: