[ytdl] improve error handling (#1680)

This commit is contained in:
Mike Fährmann
2021-11-15 22:56:42 +01:00
parent 8eaedb0bd3
commit 2076d40681

View File

@@ -80,14 +80,19 @@ class YoutubeDLExtractor(Extractor):
set_cookie(cookie) set_cookie(cookie)
# extract youtube_dl info_dict # extract youtube_dl info_dict
info_dict = ytdl_instance._YoutubeDL__extract_info( try:
self.ytdl_url, info_dict = ytdl_instance._YoutubeDL__extract_info(
ytdl_instance.get_info_extractor(self.ytdl_ie_key), self.ytdl_url,
False, {}, True) ytdl_instance.get_info_extractor(self.ytdl_ie_key),
False, {}, True)
except ytdl_module.utils.YoutubeDLError:
raise exception.StopExtraction("Failed to extract video data")
if "entries" in info_dict: if not info_dict:
return
elif "entries" in info_dict:
results = self._process_entries( results = self._process_entries(
ytdl_instance, info_dict["entries"]) ytdl_module, ytdl_instance, info_dict["entries"])
else: else:
results = (info_dict,) results = (info_dict,)
@@ -104,15 +109,23 @@ class YoutubeDLExtractor(Extractor):
yield Message.Directory, info_dict yield Message.Directory, info_dict
yield Message.Url, url, info_dict yield Message.Url, url, info_dict
def _process_entries(self, ytdl_instance, entries): def _process_entries(self, ytdl_module, ytdl_instance, entries):
for entry in entries: for entry in entries:
if entry.get("_type") in ("url", "url_transparent"): if not entry:
info_dict = ytdl_instance.extract_info( continue
entry["url"], False, elif entry.get("_type") in ("url", "url_transparent"):
ie_key=entry.get("ie_key")) try:
if "entries" in info_dict: info_dict = ytdl_instance.extract_info(
entry["url"], False,
ie_key=entry.get("ie_key"))
except ytdl_module.utils.YoutubeDLError:
continue
if not info_dict:
continue
elif "entries" in info_dict:
yield from self._process_entries( yield from self._process_entries(
ytdl_instance, info_dict["entries"]) ytdl_module, ytdl_instance, info_dict["entries"])
else: else:
yield info_dict yield info_dict
else: else: