aboutsummaryrefslogtreecommitdiffstats
path: root/yt_dlp/extractor/youtube.py
diff options
context:
space:
mode:
Diffstat (limited to 'yt_dlp/extractor/youtube.py')
-rw-r--r--yt_dlp/extractor/youtube.py27
1 files changed, 9 insertions, 18 deletions
diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py
index a9d838345..f73465ba4 100644
--- a/yt_dlp/extractor/youtube.py
+++ b/yt_dlp/extractor/youtube.py
@@ -30,6 +30,7 @@ from ..utils import (
clean_html,
datetime_from_str,
dict_get,
+ filter_dict,
float_or_none,
format_field,
get_first,
@@ -617,7 +618,7 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
if auth is not None:
headers['Authorization'] = auth
headers['X-Origin'] = origin
- return {h: v for h, v in headers.items() if v is not None}
+ return filter_dict(headers)
def _download_ytcfg(self, client, video_id):
url = {
@@ -672,20 +673,10 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
if next_continuation:
return next_continuation
- contents = []
- for key in ('contents', 'items', 'rows'):
- contents.extend(try_get(renderer, lambda x: x[key], list) or [])
-
- for content in contents:
- if not isinstance(content, dict):
- continue
- continuation_ep = try_get(
- content, (lambda x: x['continuationItemRenderer']['continuationEndpoint'],
- lambda x: x['continuationItemRenderer']['button']['buttonRenderer']['command']),
- dict)
- continuation = cls._extract_continuation_ep_data(continuation_ep)
- if continuation:
- return continuation
+ return traverse_obj(renderer, (
+ ('contents', 'items', 'rows'), ..., 'continuationItemRenderer',
+ ('continuationEndpoint', ('button', 'buttonRenderer', 'command'))
+ ), get_all=False, expected_type=cls._extract_continuation_ep_data)
@classmethod
def _extract_alerts(cls, data):
@@ -4408,8 +4399,8 @@ class YoutubeTabBaseInfoExtractor(YoutubeBaseInfoExtractor):
def _report_history_entries(self, renderer):
for url in traverse_obj(renderer, (
- 'rows', ..., 'reportHistoryTableRowRenderer', 'cells', ...,
- 'reportHistoryTableCellRenderer', 'cell', 'reportHistoryTableTextCellRenderer', 'text', 'runs', ...,
+ 'rows', ..., 'reportHistoryTableRowRenderer', 'cells', ...,
+ 'reportHistoryTableCellRenderer', 'cell', 'reportHistoryTableTextCellRenderer', 'text', 'runs', ...,
'navigationEndpoint', 'commandMetadata', 'webCommandMetadata', 'url')):
yield self.url_result(urljoin('https://www.youtube.com', url), YoutubeIE)
@@ -4553,7 +4544,7 @@ class YoutubeTabBaseInfoExtractor(YoutubeBaseInfoExtractor):
uploader['uploader_url'] = urljoin(
'https://www.youtube.com/',
try_get(owner, lambda x: x['navigationEndpoint']['browseEndpoint']['canonicalBaseUrl'], str))
- return {k: v for k, v in uploader.items() if v is not None}
+ return filter_dict(uploader)
def _extract_from_tabs(self, item_id, ytcfg, data, tabs):
playlist_id = title = description = channel_url = channel_name = channel_id = None