mirror of
https://github.com/ytdl-org/youtube-dl
synced 2025-04-25 00:14:52 +09:00
parent
570b868078
commit
32b8d31780
@ -3339,6 +3339,20 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
|
|||||||
'thumbnailViewModel', 'image'), final_key='sources'),
|
'thumbnailViewModel', 'image'), final_key='sources'),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def _extract_shorts_lockup_view_model(self, view_model):
|
||||||
|
content_id = traverse_obj(view_model, (
|
||||||
|
'onTap', 'innertubeCommand', 'reelWatchEndpoint', 'videoId',
|
||||||
|
T(lambda v: v if YoutubeIE.suitable(v) else None)))
|
||||||
|
if not content_id:
|
||||||
|
return
|
||||||
|
return merge_dicts(self.url_result(
|
||||||
|
content_id, ie=YoutubeIE.ie_key(), video_id=content_id), {
|
||||||
|
'title': traverse_obj(view_model, (
|
||||||
|
'overlayMetadata', 'primaryText', 'content', T(compat_str))),
|
||||||
|
'thumbnails': self._extract_thumbnails(
|
||||||
|
view_model, 'thumbnail', final_key='sources'),
|
||||||
|
})
|
||||||
|
|
||||||
def _video_entry(self, video_renderer):
|
def _video_entry(self, video_renderer):
|
||||||
video_id = video_renderer.get('videoId')
|
video_id = video_renderer.get('videoId')
|
||||||
if video_id:
|
if video_id:
|
||||||
@ -3385,10 +3399,9 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
|
|||||||
yield entry
|
yield entry
|
||||||
|
|
||||||
def _rich_grid_entries(self, contents):
|
def _rich_grid_entries(self, contents):
|
||||||
for content in contents:
|
for content in traverse_obj(
|
||||||
content = traverse_obj(
|
contents, (Ellipsis, 'richItemRenderer', 'content'),
|
||||||
content, ('richItemRenderer', 'content'),
|
expected_type=dict):
|
||||||
expected_type=dict) or {}
|
|
||||||
video_renderer = traverse_obj(
|
video_renderer = traverse_obj(
|
||||||
content, 'videoRenderer', 'reelItemRenderer',
|
content, 'videoRenderer', 'reelItemRenderer',
|
||||||
expected_type=dict)
|
expected_type=dict)
|
||||||
@ -3396,6 +3409,12 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
|
|||||||
entry = self._video_entry(video_renderer)
|
entry = self._video_entry(video_renderer)
|
||||||
if entry:
|
if entry:
|
||||||
yield entry
|
yield entry
|
||||||
|
# shorts item
|
||||||
|
shorts_lockup_view_model = content.get('shortsLockupViewModel')
|
||||||
|
if shorts_lockup_view_model:
|
||||||
|
entry = self._extract_shorts_lockup_view_model(shorts_lockup_view_model)
|
||||||
|
if entry:
|
||||||
|
yield entry
|
||||||
# playlist
|
# playlist
|
||||||
renderer = traverse_obj(
|
renderer = traverse_obj(
|
||||||
content, 'playlistRenderer', expected_type=dict) or {}
|
content, 'playlistRenderer', expected_type=dict) or {}
|
||||||
@ -3499,6 +3518,13 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
|
|||||||
entry = self._video_entry(renderer)
|
entry = self._video_entry(renderer)
|
||||||
if entry:
|
if entry:
|
||||||
yield entry
|
yield entry
|
||||||
|
renderer = isr_content.get('richGridRenderer')
|
||||||
|
if renderer:
|
||||||
|
for from_ in self._rich_grid_entries(
|
||||||
|
traverse_obj(renderer, ('contents', Ellipsis, T(dict)))):
|
||||||
|
yield from_
|
||||||
|
continuation = self._extract_continuation(renderer)
|
||||||
|
continue
|
||||||
|
|
||||||
if not continuation:
|
if not continuation:
|
||||||
continuation = self._extract_continuation(is_renderer)
|
continuation = self._extract_continuation(is_renderer)
|
||||||
@ -3508,8 +3534,9 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
|
|||||||
rich_grid_renderer = tab_content.get('richGridRenderer')
|
rich_grid_renderer = tab_content.get('richGridRenderer')
|
||||||
if not rich_grid_renderer:
|
if not rich_grid_renderer:
|
||||||
return
|
return
|
||||||
for entry in self._rich_grid_entries(rich_grid_renderer.get('contents') or []):
|
for from_ in self._rich_grid_entries(
|
||||||
yield entry
|
traverse_obj(rich_grid_renderer, ('contents', Ellipsis, T(dict)))):
|
||||||
|
yield from_
|
||||||
|
|
||||||
continuation = self._extract_continuation(rich_grid_renderer)
|
continuation = self._extract_continuation(rich_grid_renderer)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user