for 'info_dict' extraction and file download
This commit is contained in:
@@ -22,9 +22,9 @@ class YoutubeDLDownloader(DownloaderBase):
|
|||||||
DownloaderBase.__init__(self, job)
|
DownloaderBase.__init__(self, job)
|
||||||
|
|
||||||
extractor = job.extractor
|
extractor = job.extractor
|
||||||
retries = self.config("retries", extractor._retries)
|
self.retries = self.config("retries", extractor._retries)
|
||||||
self.ytdl_opts = {
|
self.ytdl_opts = {
|
||||||
"retries": retries+1 if retries >= 0 else float("inf"),
|
"retries": self.retries+1 if self.retries >= 0 else float("inf"),
|
||||||
"socket_timeout": self.config("timeout", extractor._timeout),
|
"socket_timeout": self.config("timeout", extractor._timeout),
|
||||||
"nocheckcertificate": not self.config("verify", extractor._verify),
|
"nocheckcertificate": not self.config("verify", extractor._verify),
|
||||||
"proxy": self.proxies.get("http") if self.proxies else None,
|
"proxy": self.proxies.get("http") if self.proxies else None,
|
||||||
@@ -77,19 +77,26 @@ class YoutubeDLDownloader(DownloaderBase):
|
|||||||
for cookie in self.session.cookies:
|
for cookie in self.session.cookies:
|
||||||
set_cookie(cookie)
|
set_cookie(cookie)
|
||||||
|
|
||||||
|
tries = 0
|
||||||
url = url[5:]
|
url = url[5:]
|
||||||
manifest = kwdict.get("_ytdl_manifest")
|
manifest = kwdict.get("_ytdl_manifest")
|
||||||
try:
|
while True:
|
||||||
if manifest is None:
|
try:
|
||||||
info_dict = self._extract_url(
|
if manifest is None:
|
||||||
ytdl_instance, url)
|
info_dict = self._extract_url(
|
||||||
else:
|
ytdl_instance, url)
|
||||||
info_dict = self._extract_manifest(
|
else:
|
||||||
ytdl_instance, url, kwdict)
|
info_dict = self._extract_manifest(
|
||||||
except Exception as exc:
|
ytdl_instance, url, kwdict)
|
||||||
self.log.traceback(exc)
|
break
|
||||||
self.log.warning("%s: %s", exc.__class__.__name__, exc)
|
except Exception as exc:
|
||||||
return False
|
tries += 1
|
||||||
|
self.log.traceback(exc)
|
||||||
|
self.log.error("%s: %s (%s/%s)",
|
||||||
|
exc.__class__.__name__, exc,
|
||||||
|
tries, self.retries+1)
|
||||||
|
if tries > self.retries:
|
||||||
|
return False
|
||||||
|
|
||||||
if "__gdl_initialize" in ytdl_instance.params:
|
if "__gdl_initialize" in ytdl_instance.params:
|
||||||
del ytdl_instance.params["__gdl_initialize"]
|
del ytdl_instance.params["__gdl_initialize"]
|
||||||
@@ -102,9 +109,21 @@ class YoutubeDLDownloader(DownloaderBase):
|
|||||||
if extra := kwdict.get("_ytdl_extra"):
|
if extra := kwdict.get("_ytdl_extra"):
|
||||||
info_dict.update(extra)
|
info_dict.update(extra)
|
||||||
|
|
||||||
if "entries" in info_dict:
|
while True:
|
||||||
return self._download_playlist(ytdl_instance, pathfmt, info_dict)
|
try:
|
||||||
return self._download_video(ytdl_instance, pathfmt, info_dict)
|
if "entries" in info_dict:
|
||||||
|
return self._download_playlist(
|
||||||
|
ytdl_instance, pathfmt, info_dict)
|
||||||
|
return self._download_video(
|
||||||
|
ytdl_instance, pathfmt, info_dict)
|
||||||
|
except Exception as exc:
|
||||||
|
tries += 1
|
||||||
|
self.log.traceback(exc)
|
||||||
|
self.log.error("%s: %s (%s/%s)",
|
||||||
|
exc.__class__.__name__, exc,
|
||||||
|
tries, self.retries+1)
|
||||||
|
if tries > self.retries:
|
||||||
|
return False
|
||||||
|
|
||||||
def _extract_url(self, ytdl, url):
|
def _extract_url(self, ytdl, url):
|
||||||
return ytdl.extract_info(url, download=False)
|
return ytdl.extract_info(url, download=False)
|
||||||
|
|||||||
Reference in New Issue
Block a user