diff options
-rw-r--r-- | youtube_dl/extractor/youtube.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index b8219a0ad..173f5a2d8 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -3060,6 +3060,24 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor): try_get(owner, lambda x: x['navigationEndpoint']['browseEndpoint']['canonicalBaseUrl'], compat_str)) return uploader + @staticmethod + def _extract_alert(data): + alerts = [] + for alert in try_get(data, lambda x: x['alerts'], list) or []: + if not isinstance(alert, dict): + continue + alert_text = try_get( + alert, lambda x: x['alertRenderer']['text'], dict) + if not alert_text: + continue + text = try_get( + alert_text, + (lambda x: x['simpleText'], lambda x: x['runs'][0]['text']), + compat_str) + if text: + alerts.append(text) + return '\n'.join(alerts) + def _extract_from_tabs(self, item_id, webpage, data, tabs, identity_token): selected_tab = self._extract_selected_tab(tabs) renderer = try_get( @@ -3127,6 +3145,10 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor): compat_str) or video_id if video_id: return self.url_result(video_id, ie=YoutubeIE.ie_key(), video_id=video_id) + # Capture and output alerts + alert = self._extract_alert(data) + if alert: + raise ExtractorError(alert, expected=True) # Failed to recognize raise ExtractorError('Unable to recognize tab page') |