[youtube] Retry on incomplete `ytInitialData`

Related: #116
This commit is contained in:
pukkandan 2021-02-26 03:22:44 +05:30
parent b45d4e4a8e
commit 14fdfea973
1 changed files with 23 additions and 13 deletions

View File

@ -2998,6 +2998,10 @@ 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))
count = 0
retries = 3
while count < retries:
# Sometimes youtube returns a webpage with incomplete ytInitialData
webpage = self._download_webpage(url, item_id) webpage = self._download_webpage(url, item_id)
identity_token = self._extract_identity_token(webpage, item_id) identity_token = self._extract_identity_token(webpage, item_id)
data = self._extract_yt_initial_data(item_id, webpage) data = self._extract_yt_initial_data(item_id, webpage)
@ -3011,6 +3015,12 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
self._downloader.report_warning('YouTube said: %s - %s' % (alert_type, alert_message)) self._downloader.report_warning('YouTube said: %s - %s' % (alert_type, alert_message))
if err_msg: if err_msg:
raise ExtractorError('YouTube said: %s' % err_msg, expected=True) raise ExtractorError('YouTube said: %s' % err_msg, expected=True)
if data.get('contents') or data.get('currentVideoEndpoint'):
break
count += 1
self.to_screen(
'Incomplete yt initial data recieved. Retrying (attempt %d of %d)...' % (count, retries))
tabs = try_get( tabs = try_get(
data, lambda x: x['contents']['twoColumnBrowseResultsRenderer']['tabs'], list) data, lambda x: x['contents']['twoColumnBrowseResultsRenderer']['tabs'], list)
if tabs: if tabs: