[livestream] Fix events extraction (fixes #1467)

This commit is contained in:
Jaime Marquínez Ferrándiz 2013-09-21 13:50:52 +02:00
parent 39baacc49f
commit b00ca882a4
2 changed files with 21 additions and 3 deletions

View File

@ -15,6 +15,7 @@ from youtube_dl.extractor import (
VimeoChannelIE, VimeoChannelIE,
UstreamChannelIE, UstreamChannelIE,
SoundcloudUserIE, SoundcloudUserIE,
LivestreamIE,
) )
from youtube_dl.utils import * from youtube_dl.utils import *
@ -32,6 +33,7 @@ class TestPlaylists(unittest.TestCase):
self.assertIsPlaylist(result) self.assertIsPlaylist(result)
self.assertEqual(result['title'], u'SPORT') self.assertEqual(result['title'], u'SPORT')
self.assertTrue(len(result['entries']) > 20) self.assertTrue(len(result['entries']) > 20)
def test_dailymotion_user(self): def test_dailymotion_user(self):
dl = FakeYDL() dl = FakeYDL()
ie = DailymotionUserIE(dl) ie = DailymotionUserIE(dl)
@ -64,5 +66,13 @@ class TestPlaylists(unittest.TestCase):
self.assertEqual(result['id'], u'9615865') self.assertEqual(result['id'], u'9615865')
self.assertTrue(len(result['entries']) >= 12) self.assertTrue(len(result['entries']) >= 12)
def test_livestream_event(self):
dl = FakeYDL()
ie = LivestreamIE(dl)
result = ie.extract('http://new.livestream.com/tedx/cityenglish')
self.assertIsPlaylist(result)
self.assertEqual(result['title'], u'TEDCity2.0 (English)')
self.assertTrue(len(result['entries']) >= 4)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -2,7 +2,12 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import compat_urllib_parse_urlparse, compat_urlparse from ..utils import (
compat_urllib_parse_urlparse,
compat_urlparse,
get_meta_content,
ExtractorError,
)
class LivestreamIE(InfoExtractor): class LivestreamIE(InfoExtractor):
@ -35,8 +40,11 @@ class LivestreamIE(InfoExtractor):
if video_id is None: if video_id is None:
# This is an event page: # This is an event page:
api_url = self._search_regex(r'event_design_eventId: \'(.+?)\'', player = get_meta_content('twitter:player', webpage)
webpage, 'api url') if player is None:
raise ExtractorError('Couldn\'t extract event api url')
api_url = player.replace('/player', '')
api_url = re.sub(r'^(https?://)(new\.)', r'\1api.\2', api_url)
info = json.loads(self._download_webpage(api_url, event_name, info = json.loads(self._download_webpage(api_url, event_name,
u'Downloading event info')) u'Downloading event info'))
videos = [self._extract_video_info(video_data['data']) videos = [self._extract_video_info(video_data['data'])