[aol] Add support for playlists (Fixes #2730)
This commit is contained in:
		
							parent
							
								
									2fb3deeca1
								
							
						
					
					
						commit
						de906ef543
					
				@ -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)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user