2021-02-07 17:46:20 +13:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
import logging
|
2021-02-11 12:10:40 +13:00
|
|
|
import tempfile
|
2020-06-02 00:05:02 +12:00
|
|
|
|
2021-02-06 21:35:50 +13:00
|
|
|
import youtube_dl
|
2021-02-11 12:10:40 +13:00
|
|
|
from praw.models import Submission
|
2020-06-02 00:05:02 +12:00
|
|
|
|
2021-02-11 12:10:40 +13:00
|
|
|
from bulkredditdownloader.resource import Resource
|
2021-02-07 20:08:24 +13:00
|
|
|
from bulkredditdownloader.site_downloaders.base_downloader import BaseDownloader
|
2021-02-07 17:46:20 +13:00
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
2021-02-06 21:35:50 +13:00
|
|
|
|
2020-06-02 00:05:02 +12:00
|
|
|
|
2021-02-07 14:33:19 +13:00
|
|
|
class Youtube(BaseDownloader):
|
2021-02-15 18:12:27 +13:00
|
|
|
def __init__(self, post: Submission):
|
|
|
|
super().__init__(post)
|
2020-06-02 00:05:02 +12:00
|
|
|
|
2021-02-07 17:46:20 +13:00
|
|
|
def download(self):
|
2021-02-11 12:10:40 +13:00
|
|
|
return self._download_video()
|
|
|
|
|
|
|
|
def _download_video(self) -> Resource:
|
|
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
|
|
ydl_opts = {
|
|
|
|
"format": "best",
|
|
|
|
"outtmpl": str(temp_dir / "test.%(ext)s"),
|
|
|
|
"playlistend": 1,
|
|
|
|
"nooverwrites": True,
|
|
|
|
"quiet": True
|
|
|
|
}
|
|
|
|
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
|
|
|
ydl.download([self.post.url])
|
|
|
|
|
|
|
|
with open(temp_dir / 'test.mp4', 'rb') as file:
|
|
|
|
content = file.read()
|
|
|
|
return Resource(self.post, self.post.url, content)
|