|
|
@ -3121,6 +3121,19 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
|
|
|
|
self._playlist_entries(playlist), playlist_id=playlist_id,
|
|
|
|
self._playlist_entries(playlist), playlist_id=playlist_id,
|
|
|
|
playlist_title=title)
|
|
|
|
playlist_title=title)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _extract_identity_token(self, webpage, item_id):
|
|
|
|
|
|
|
|
ytcfg = self._parse_json(
|
|
|
|
|
|
|
|
self._search_regex(
|
|
|
|
|
|
|
|
r'ytcfg\.set\s*\(\s*({.+?})\s*\)\s*;', webpage, 'ytcfg',
|
|
|
|
|
|
|
|
default='{}'), item_id, fatal=False)
|
|
|
|
|
|
|
|
if ytcfg:
|
|
|
|
|
|
|
|
token = try_get(ytcfg, lambda x: x['ID_TOKEN'], compat_str)
|
|
|
|
|
|
|
|
if token:
|
|
|
|
|
|
|
|
return token
|
|
|
|
|
|
|
|
return self._search_regex(
|
|
|
|
|
|
|
|
r'\bID_TOKEN["\']\s*:\s*["\'](.+?)["\']', webpage,
|
|
|
|
|
|
|
|
'identity token', default=None)
|
|
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
def _real_extract(self, url):
|
|
|
|
item_id = self._match_id(url)
|
|
|
|
item_id = self._match_id(url)
|
|
|
|
url = compat_urlparse.urlunparse(
|
|
|
|
url = compat_urlparse.urlunparse(
|
|
|
@ -3135,9 +3148,7 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
|
|
|
|
return self.url_result(video_id, ie=YoutubeIE.ie_key(), video_id=video_id)
|
|
|
|
return self.url_result(video_id, ie=YoutubeIE.ie_key(), video_id=video_id)
|
|
|
|
self.to_screen('Downloading playlist %s - add --no-playlist to just download video %s' % (playlist_id, video_id))
|
|
|
|
self.to_screen('Downloading playlist %s - add --no-playlist to just download video %s' % (playlist_id, video_id))
|
|
|
|
webpage = self._download_webpage(url, item_id)
|
|
|
|
webpage = self._download_webpage(url, item_id)
|
|
|
|
identity_token = self._search_regex(
|
|
|
|
identity_token = self._extract_identity_token(webpage, item_id)
|
|
|
|
r'\bID_TOKEN["\']\s*:\s*["\'](.+?)["\']', webpage,
|
|
|
|
|
|
|
|
'identity token', default=None)
|
|
|
|
|
|
|
|
data = self._extract_yt_initial_data(item_id, webpage)
|
|
|
|
data = self._extract_yt_initial_data(item_id, webpage)
|
|
|
|
tabs = try_get(
|
|
|
|
tabs = try_get(
|
|
|
|
data, lambda x: x['contents']['twoColumnBrowseResultsRenderer']['tabs'], list)
|
|
|
|
data, lambda x: x['contents']['twoColumnBrowseResultsRenderer']['tabs'], list)
|
|
|
|