Skip to content

Commit

Permalink
[youtube:tab] Fix playlist title extraction (closes ytdl-org#27015)
Browse files Browse the repository at this point in the history
  • Loading branch information
dstftw committed Nov 17, 2020
1 parent 7d509c6 commit f8c749f
Showing 1 changed file with 21 additions and 15 deletions.
36 changes: 21 additions & 15 deletions youtube_dl/extractor/youtube.py
Original file line number Diff line number Diff line change
Expand Up @@ -2825,30 +2825,36 @@ def _extract_selected_tab(tabs):
raise ExtractorError('Unable to find selected tab')

def _real_extract(self, url):
channel_id = self._match_id(url)
item_id = self._match_id(url)
url = compat_urlparse.urlunparse(
compat_urlparse.urlparse(url)._replace(netloc='www.youtube.com'))
webpage = self._download_webpage(url, channel_id)
data = self._extract_yt_initial_data(channel_id, webpage)
webpage = self._download_webpage(url, item_id)
data = self._extract_yt_initial_data(item_id, webpage)
tabs = data['contents']['twoColumnBrowseResultsRenderer']['tabs']
selected_tab = self._extract_selected_tab(tabs)
channel_title = try_get(
data, lambda x: x['metadata']['channelMetadataRenderer']['title'],
compat_str)
channel_external_id = try_get(
data, lambda x: x['metadata']['channelMetadataRenderer']['externalId'],
compat_str)
tab_title = selected_tab.get('title')
title = channel_title or channel_id
if tab_title:
title += ' - %s' % tab_title
renderer = try_get(
data, lambda x: x['metadata']['channelMetadataRenderer'], dict)
if renderer:
channel_title = renderer.get('title') or item_id
tab_title = selected_tab.get('title')
title = channel_title or item_id
if tab_title:
title += ' - %s' % tab_title
description = renderer.get('description')
playlist_id = renderer.get('externalId')
renderer = try_get(
data, lambda x: x['metadata']['playlistMetadataRenderer'], dict)
if renderer:
title = renderer.get('title')
description = None
playlist_id = item_id
identity_token = self._search_regex(
r'\bID_TOKEN["\']\s*:\s*["\'](.+?)["\']', webpage,
'identity token', default=None)
return self.playlist_result(
self._entries(selected_tab['content'], identity_token),
playlist_id=channel_external_id or channel_id,
playlist_title=title)
playlist_id=playlist_id, playlist_title=title,
playlist_description=description)


class YoutubePlaylistIE(InfoExtractor):
Expand Down

0 comments on commit f8c749f

Please sign in to comment.