30 lines
928 B
Python
30 lines
928 B
Python
|
from __future__ import unicode_literals
|
||
|
from urllib.parse import urlparse
|
||
|
|
||
|
import youtube_dl
|
||
|
|
||
|
from src.exceptions.download_exceptions import SiteNotImplementedException
|
||
|
|
||
|
|
||
|
class VideoDownloader:
|
||
|
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
|
||
|
|
||
|
self.SUPPORTING_WEBSITES = [
|
||
|
"ok.ru", "vk.com", "www.youtube.com"
|
||
|
]
|
||
|
|
||
|
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)
|
||
|
url = result['formats'][-1]
|
||
|
return url
|