From 483056d624c23d6f39fb8d0763d9ae95bfaf9379 Mon Sep 17 00:00:00 2001 From: Giuseppe Lumia Date: Sun, 6 Sep 2020 20:50:48 +0200 Subject: [PATCH] [youtube] Fix youtube mix playlist extraction (closes #26390) --- test/test_youtube_lists.py | 4 ++-- youtube_dl/extractor/youtube.py | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/test/test_youtube_lists.py b/test/test_youtube_lists.py index c4f0abbea..e5fa03aaa 100644 --- a/test/test_youtube_lists.py +++ b/test/test_youtube_lists.py @@ -45,8 +45,8 @@ class TestYoutubeLists(unittest.TestCase): result = ie.extract('https://www.youtube.com/watch?v=W01L70IGBgE&index=2&list=RDOQpdSVF_k_w') entries = result['entries'] self.assertTrue(len(entries) >= 50) - original_video = entries[0] - self.assertEqual(original_video['id'], 'OQpdSVF_k_w') + original_video_id = 'OQpdSVF_k_w' + self.assertTrue(original_video_id in {entry['id'] for entry in entries}) def test_youtube_toptracks(self): print('Skipping: The playlist page gives error 500') diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 6ae2e58c1..260e77621 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -2781,8 +2781,7 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor): webpage = self._download_webpage( url, playlist_id, 'Downloading page {0} of Youtube mix'.format(n)) new_ids = orderedSet(re.findall( - r'''(?xs)data-video-username=".*?".*? - href="/watch\?v=([0-9A-Za-z_-]{11})&[^"]*?list=%s''' % re.escape(playlist_id), + r'[\'"]/watch\?v=([0-9A-Za-z_-]{11})(?:&|\\u0026)[^"]*?list=%s' % re.escape(playlist_id), webpage)) # Fetch new pages until all the videos are repeated, it seems that # there are always 51 unique videos.