From 5bd7ad2e811c9bda2e889156bc261a76e9f086ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergey=20M=E2=80=A4?= Date: Tue, 8 Dec 2020 01:12:00 +0700 Subject: [PATCH] [youtube:tab] Capture and output alerts (closes #27340) --- youtube_dl/extractor/youtube.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) 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')