mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2026-07-02 16:28:52 +00:00
[ie/youtube:tab] Fix flat extraction of collaborators (#17045)
Closes #17044 Authored by: bashonly
This commit is contained in:
parent
d6c411bcd0
commit
a75ba96fa4
@ -344,15 +344,25 @@ class YoutubeTabBaseInfoExtractor(YoutubeBaseInfoExtractor):
|
|||||||
duration_text = traverse_obj(thumbnail_badge_view_models, (..., 'text', {str.lower}, any))
|
duration_text = traverse_obj(thumbnail_badge_view_models, (..., 'text', {str.lower}, any))
|
||||||
thumbnail_badge_styles = traverse_obj(thumbnail_badge_view_models, (..., 'badgeStyle', {str}))
|
thumbnail_badge_styles = traverse_obj(thumbnail_badge_view_models, (..., 'badgeStyle', {str}))
|
||||||
|
|
||||||
channel_info = traverse_obj(content_mdvm, (
|
channel_traversal_dict = {
|
||||||
'metadataRows', ..., 'metadataParts',
|
|
||||||
lambda _, v: v['text']['commandRuns'][0]['onTap']['innertubeCommand']['browseEndpoint']['browseId'],
|
|
||||||
'text', any, {
|
|
||||||
'channel': ('content', {str}),
|
'channel': ('content', {str}),
|
||||||
'channel_id': ('commandRuns', 0, 'onTap', 'innertubeCommand', 'browseEndpoint', 'browseId', {self.ucid_or_none}),
|
'channel_id': ('commandRuns', 0, 'onTap', 'innertubeCommand', 'browseEndpoint', 'browseId', {self.ucid_or_none}),
|
||||||
'uploader': ('content', {str}),
|
'uploader': ('content', {str}),
|
||||||
'uploader_id': ('commandRuns', 0, 'onTap', 'innertubeCommand', 'browseEndpoint', 'canonicalBaseUrl', {self.handle_from_url}),
|
'uploader_id': ('commandRuns', 0, 'onTap', 'innertubeCommand', 'browseEndpoint', 'canonicalBaseUrl', {self.handle_from_url}),
|
||||||
}))
|
}
|
||||||
|
|
||||||
|
channel_info = traverse_obj(content_mdvm, (
|
||||||
|
'metadataRows', ..., 'metadataParts',
|
||||||
|
lambda _, v: v['text']['commandRuns'][0]['onTap']['innertubeCommand']['browseEndpoint']['browseId'],
|
||||||
|
'text', any, channel_traversal_dict))
|
||||||
|
|
||||||
|
# For videos credited to multiple channels / "collaborators"
|
||||||
|
collaborator_data = traverse_obj(lockup_mdvm, (
|
||||||
|
'image', 'avatarStackViewModel', 'rendererContext', 'commandContext', 'onTap', 'innertubeCommand',
|
||||||
|
'showDialogCommand', 'panelLoadingStrategy', 'inlineContent', 'dialogViewModel', 'customContent',
|
||||||
|
'listViewModel', 'listItems', ..., 'listItemViewModel', 'title', {dict}))
|
||||||
|
if not channel_info:
|
||||||
|
channel_info = traverse_obj(collaborator_data, (0, channel_traversal_dict))
|
||||||
|
|
||||||
views_and_time = traverse_obj(content_mdvm, (
|
views_and_time = traverse_obj(content_mdvm, (
|
||||||
'metadataRows', lambda _, v: 'accessibilityLabel' in v['metadataParts'][-1],
|
'metadataRows', lambda _, v: 'accessibilityLabel' in v['metadataParts'][-1],
|
||||||
@ -384,6 +394,7 @@ class YoutubeTabBaseInfoExtractor(YoutubeBaseInfoExtractor):
|
|||||||
availability=self._availability(needs_subscription='BADGE_MEMBERS_ONLY' in badge_styles),
|
availability=self._availability(needs_subscription='BADGE_MEMBERS_ONLY' in badge_styles),
|
||||||
channel_url=format_field(channel_info, 'channel_id', 'https://www.youtube.com/channel/%s', default=None),
|
channel_url=format_field(channel_info, 'channel_id', 'https://www.youtube.com/channel/%s', default=None),
|
||||||
uploader_url=format_field(channel_info, 'uploader_id', 'https://www.youtube.com/%s', default=None),
|
uploader_url=format_field(channel_info, 'uploader_id', 'https://www.youtube.com/%s', default=None),
|
||||||
|
creators=traverse_obj(collaborator_data, (..., 'content', {str}, all, filter)),
|
||||||
**channel_info)
|
**channel_info)
|
||||||
|
|
||||||
def _rich_entries(self, rich_grid_renderer):
|
def _rich_entries(self, rich_grid_renderer):
|
||||||
@ -2145,6 +2156,48 @@ class YoutubeTabIE(YoutubeTabBaseInfoExtractor):
|
|||||||
'tags': [],
|
'tags': [],
|
||||||
'availability': 'public',
|
'availability': 'public',
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
# https://github.com/yt-dlp/yt-dlp/issues/17044
|
||||||
|
'note': 'flat playlist entry credited to multiple channels / "collaborators"',
|
||||||
|
'url': 'https://www.youtube.com/playlist?list=PLzMNc_TBkmzei1ejIkbjNUP9J7q0hmepM',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'PLzMNc_TBkmzei1ejIkbjNUP9J7q0hmepM',
|
||||||
|
'title': 'Music for Creating, Building, Imagining 1',
|
||||||
|
'description': 'md5:329cd827b1c70910e80c108cfefdb37d',
|
||||||
|
'uploader': 'Sebtt',
|
||||||
|
'uploader_id': '@Sebtt',
|
||||||
|
'uploader_url': 'https://www.youtube.com/@Sebtt',
|
||||||
|
'channel': 'Sebtt',
|
||||||
|
'channel_id': 'UC-EmUaZucfuL81RYKcKjpbw',
|
||||||
|
'channel_url': 'https://www.youtube.com/channel/UC-EmUaZucfuL81RYKcKjpbw',
|
||||||
|
'view_count': int,
|
||||||
|
'tags': [],
|
||||||
|
'modified_date': str,
|
||||||
|
'availability': 'public',
|
||||||
|
},
|
||||||
|
'playlist': [{
|
||||||
|
'info_dict': {
|
||||||
|
'title': 'Thomas Bergersen - Made of Fire',
|
||||||
|
'id': 'KUokLzs947k',
|
||||||
|
'_type': 'url',
|
||||||
|
'ie_key': 'Youtube',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=KUokLzs947k',
|
||||||
|
'uploader': 'Two Steps From Hell',
|
||||||
|
'uploader_id': '@TwoStepsFromHell-Official',
|
||||||
|
'uploader_url': 'https://www.youtube.com/@TwoStepsFromHell-Official',
|
||||||
|
'channel': 'Two Steps From Hell',
|
||||||
|
'channel_id': 'UC3swwxiALG5c0Tvom83tPGg',
|
||||||
|
'channel_url': 'https://www.youtube.com/channel/UC3swwxiALG5c0Tvom83tPGg',
|
||||||
|
'view_count': int,
|
||||||
|
'duration': 341.0,
|
||||||
|
'creators': ['Two Steps From Hell', 'Thomas Bergersen'],
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
'playlist_count': 1,
|
||||||
|
'params': {
|
||||||
|
'extract_flat': True,
|
||||||
|
'playlist_items': '75',
|
||||||
|
},
|
||||||
}]
|
}]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user