mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-21 20:46:36 -05:00
[youtube] Fix uploader for collaborative playlists (#3332)
Authored by: coletdjnz
This commit is contained in:
parent
870efdee28
commit
61d3665d9d
2 changed files with 27 additions and 6 deletions
|
@ -23,6 +23,7 @@
|
|||
compat_getpass,
|
||||
compat_http_client,
|
||||
compat_os_name,
|
||||
compat_Pattern,
|
||||
compat_str,
|
||||
compat_urllib_error,
|
||||
compat_urllib_parse_unquote,
|
||||
|
@ -41,7 +42,6 @@
|
|||
base_url,
|
||||
bug_reports_message,
|
||||
clean_html,
|
||||
compiled_regex_type,
|
||||
determine_ext,
|
||||
determine_protocol,
|
||||
dict_get,
|
||||
|
@ -1203,7 +1203,9 @@ def _search_regex(self, pattern, string, name, default=NO_DEFAULT, fatal=True, f
|
|||
In case of failure return a default value or raise a WARNING or a
|
||||
RegexNotFoundError, depending on fatal, specifying the field name.
|
||||
"""
|
||||
if isinstance(pattern, (str, compat_str, compiled_regex_type)):
|
||||
if string is None:
|
||||
mobj = None
|
||||
elif isinstance(pattern, (str, compat_Pattern)):
|
||||
mobj = re.search(pattern, string, flags)
|
||||
else:
|
||||
for p in pattern:
|
||||
|
|
|
@ -4109,14 +4109,15 @@ def _extract_selected_tab(tabs, fatal=True):
|
|||
if fatal:
|
||||
raise ExtractorError('Unable to find selected tab')
|
||||
|
||||
@classmethod
|
||||
def _extract_uploader(cls, data):
|
||||
def _extract_uploader(self, data):
|
||||
uploader = {}
|
||||
renderer = cls._extract_sidebar_info_renderer(data, 'playlistSidebarSecondaryInfoRenderer') or {}
|
||||
renderer = self._extract_sidebar_info_renderer(data, 'playlistSidebarSecondaryInfoRenderer') or {}
|
||||
owner = try_get(
|
||||
renderer, lambda x: x['videoOwner']['videoOwnerRenderer']['title']['runs'][0], dict)
|
||||
if owner:
|
||||
uploader['uploader'] = owner.get('text')
|
||||
owner_text = owner.get('text')
|
||||
uploader['uploader'] = self._search_regex(
|
||||
r'^by (.+) and \d+ others?$', owner_text, 'uploader', default=owner_text)
|
||||
uploader['uploader_id'] = try_get(
|
||||
owner, lambda x: x['navigationEndpoint']['browseEndpoint']['browseId'], compat_str)
|
||||
uploader['uploader_url'] = urljoin(
|
||||
|
@ -5136,6 +5137,24 @@ class YoutubeTabIE(YoutubeTabBaseInfoExtractor):
|
|||
'note': 'non-standard redirect to regional channel',
|
||||
'url': 'https://www.youtube.com/channel/UCwVVpHQ2Cs9iGJfpdFngePQ',
|
||||
'only_matching': True
|
||||
}, {
|
||||
'note': 'collaborative playlist (uploader name in the form "by <uploader> and x other(s)")',
|
||||
'url': 'https://www.youtube.com/playlist?list=PLx-_-Kk4c89oOHEDQAojOXzEzemXxoqx6',
|
||||
'info_dict': {
|
||||
'id': 'PLx-_-Kk4c89oOHEDQAojOXzEzemXxoqx6',
|
||||
'modified_date': '20220407',
|
||||
'channel_url': 'https://www.youtube.com/channel/UCKcqXmCcyqnhgpA5P0oHH_Q',
|
||||
'tags': [],
|
||||
'uploader_id': 'UCKcqXmCcyqnhgpA5P0oHH_Q',
|
||||
'uploader': 'pukkandan',
|
||||
'availability': 'unlisted',
|
||||
'channel_id': 'UCKcqXmCcyqnhgpA5P0oHH_Q',
|
||||
'channel': 'pukkandan',
|
||||
'description': 'Test for collaborative playlist',
|
||||
'title': 'yt-dlp test - collaborative playlist',
|
||||
'uploader_url': 'https://www.youtube.com/channel/UCKcqXmCcyqnhgpA5P0oHH_Q',
|
||||
},
|
||||
'playlist_mincount': 2
|
||||
}]
|
||||
|
||||
@classmethod
|
||||
|
|
Loading…
Reference in a new issue