mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[aol] Add support for playlists (Fixes #2730)
This commit is contained in:
		| @@ -176,6 +176,5 @@ class TestAllURLsMatching(unittest.TestCase): | |||||||
|             'https://screen.yahoo.com/smartwatches-latest-wearable-gadgets-163745379-cbs.html', |             'https://screen.yahoo.com/smartwatches-latest-wearable-gadgets-163745379-cbs.html', | ||||||
|             ['Yahoo']) |             ['Yahoo']) | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
| @@ -43,6 +43,7 @@ from youtube_dl.extractor import ( | |||||||
|     XTubeUserIE, |     XTubeUserIE, | ||||||
|     InstagramUserIE, |     InstagramUserIE, | ||||||
|     CSpanIE, |     CSpanIE, | ||||||
|  |     AolIE, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -327,6 +328,16 @@ class TestPlaylists(unittest.TestCase): | |||||||
|         whole_duration = sum(e['duration'] for e in result['entries']) |         whole_duration = sum(e['duration'] for e in result['entries']) | ||||||
|         self.assertEqual(whole_duration, 14855) |         self.assertEqual(whole_duration, 14855) | ||||||
|  |  | ||||||
|  |     def test_aol_playlist(self): | ||||||
|  |         dl = FakeYDL() | ||||||
|  |         ie = AolIE(dl) | ||||||
|  |         result = ie.extract( | ||||||
|  |             'http://on.aol.com/playlist/brace-yourself---todays-weirdest-news-152147?icid=OnHomepageC4_Omg_Img#_videoid=518184316') | ||||||
|  |         self.assertIsPlaylist(result) | ||||||
|  |         self.assertEqual(result['id'], '152147') | ||||||
|  |         self.assertEqual( | ||||||
|  |             result['title'], 'Brace Yourself - Today\'s Weirdest News') | ||||||
|  |         self.assertTrue(len(result['entries']) >= 10) | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
| @@ -8,7 +8,18 @@ from .fivemin import FiveMinIE | |||||||
|  |  | ||||||
| class AolIE(InfoExtractor): | class AolIE(InfoExtractor): | ||||||
|     IE_NAME = 'on.aol.com' |     IE_NAME = 'on.aol.com' | ||||||
|     _VALID_URL = r'http://on\.aol\.com/video/.*-(?P<id>\d+)($|\?)' |     _VALID_URL = r'''(?x) | ||||||
|  |         (?: | ||||||
|  |             aol-video:| | ||||||
|  |             http://on\.aol\.com/ | ||||||
|  |             (?: | ||||||
|  |                 video/.*-| | ||||||
|  |                 playlist/(?P<playlist_display_id>[^/?#]+?)-(?P<playlist_id>[0-9]+)[?#].*_videoid= | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         (?P<id>[0-9]+) | ||||||
|  |         (?:$|\?) | ||||||
|  |     ''' | ||||||
|  |  | ||||||
|     _TEST = { |     _TEST = { | ||||||
|         'url': 'http://on.aol.com/video/u-s--official-warns-of-largest-ever-irs-phone-scam-518167793?icid=OnHomepageC2Wide_MustSee_Img', |         'url': 'http://on.aol.com/video/u-s--official-warns-of-largest-ever-irs-phone-scam-518167793?icid=OnHomepageC2Wide_MustSee_Img', | ||||||
| @@ -24,5 +35,31 @@ class AolIE(InfoExtractor): | |||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|         mobj = re.match(self._VALID_URL, url) |         mobj = re.match(self._VALID_URL, url) | ||||||
|         video_id = mobj.group('id') |         video_id = mobj.group('id') | ||||||
|         self.to_screen('Downloading 5min.com video %s' % video_id) |  | ||||||
|  |         playlist_id = mobj.group('playlist_id') | ||||||
|  |         if playlist_id and not self._downloader.params.get('noplaylist'): | ||||||
|  |             self.to_screen('Downloading playlist %s - add --no-playlist to just download video %s' % (playlist_id, video_id)) | ||||||
|  |  | ||||||
|  |             webpage = self._download_webpage(url, playlist_id) | ||||||
|  |             title = self._html_search_regex( | ||||||
|  |                 r'<h1 class="video-title[^"]*">(.+?)</h1>', webpage, 'title') | ||||||
|  |             playlist_html = self._search_regex( | ||||||
|  |                 r"(?s)<ul\s+class='video-related[^']*'>(.*?)</ul>", webpage, | ||||||
|  |                 'playlist HTML') | ||||||
|  |             entries = [{ | ||||||
|  |                 '_type': 'url', | ||||||
|  |                 'url': 'aol-video:%s' % m.group('id'), | ||||||
|  |                 'ie_key': 'Aol', | ||||||
|  |             } for m in re.finditer( | ||||||
|  |                 r"<a\s+href='.*videoid=(?P<id>[0-9]+)'\s+class='video-thumb'>", | ||||||
|  |                 playlist_html)] | ||||||
|  |  | ||||||
|  |             return { | ||||||
|  |                 '_type': 'playlist', | ||||||
|  |                 'id': playlist_id, | ||||||
|  |                 'display_id': mobj.group('playlist_display_id'), | ||||||
|  |                 'title': title, | ||||||
|  |                 'entries': entries, | ||||||
|  |             } | ||||||
|  |  | ||||||
|         return FiveMinIE._build_result(video_id) |         return FiveMinIE._build_result(video_id) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister