From cc50cfa6c1f1c90aecca0c186cc455317a7be6a7 Mon Sep 17 00:00:00 2001 From: Ali Sherief Date: Tue, 10 Nov 2020 21:50:32 +0000 Subject: [PATCH] [youtube] Match JSON in alert regex --- youtube_dlc/extractor/youtube.py | 40 ++++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/youtube_dlc/extractor/youtube.py b/youtube_dlc/extractor/youtube.py index 3ec2581dc..d4a985861 100644 --- a/youtube_dlc/extractor/youtube.py +++ b/youtube_dlc/extractor/youtube.py @@ -2891,26 +2891,26 @@ def _extract_playlist(self, playlist_id): url = self._TEMPLATE_URL % playlist_id page = self._download_webpage(url, playlist_id) - # the yt-alert-message now has tabindex attribute (see https://github.com/ytdl-org/youtube-dl/issues/11604) - for match in re.findall(r'
]*>([^<]+)
', page): - match = match.strip() - # Check if the playlist exists or is private - mobj = re.match(r'[^<]*(?:The|This) playlist (?Pdoes not exist|is private)[^<]*', match) - if mobj: - reason = mobj.group('reason') - message = 'This playlist %s' % reason - if 'private' in reason: - message += ', use --username or --netrc to access it' - message += '.' - raise ExtractorError(message, expected=True) - elif re.match(r'[^<]*Invalid parameters[^<]*', match): - raise ExtractorError( - 'Invalid parameters. Maybe URL is incorrect.', - expected=True) - elif re.match(r'[^<]*Choose your language[^<]*', match): - continue - else: - self.report_warning('Youtube gives an alert message: ' + match) + prefix_reg = r'"alerts":\[\{"alertRenderer":.*?' + noexist_private_reg = r'(?:The|This) playlist (?Pdoes not exist|is private)' + mobj = re.search(prefix_reg + noexist_private_reg, page) + mobj_other_reason = re.search(prefix_reg + r'"runs":\[\{"text":"(?P[^"]+)', page) + if mobj: + reason = mobj.group('reason') + message = 'This playlist %s' % reason + if 'private' in reason: + message += ', use --username or --netrc to access it' + message += '.' + raise ExtractorError(message, expected=True) + elif re.search(prefix_reg + r'Invalid parameters', page): + raise ExtractorError( + 'Invalid parameters. Maybe URL is incorrect.', + expected=True) + elif re.search(prefix_reg + r'Choose your language', page): + pass + elif mobj_other_reason: + message = mobj_other_reason.group("message") + self.report_warning('Youtube gives an alert message: ' + message) playlist_title = self._html_search_regex( r'(?s)

]*>\s*(.*?)\s*

',