diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index fc3e02663f..cc0a77e1ed 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -664,6 +664,9 @@ class InfoExtractor(object): elif line.startswith('#') or not line.strip(): continue else: + if last_info is none: + formats.append({'url': line}) + continue tbr = int_or_none(last_info.get('BANDWIDTH'), scale=1000) f = { diff --git a/youtube_dl/extractor/sportdeutschland.py b/youtube_dl/extractor/sportdeutschland.py index 9d54043e5b..185353bef7 100644 --- a/youtube_dl/extractor/sportdeutschland.py +++ b/youtube_dl/extractor/sportdeutschland.py @@ -12,7 +12,7 @@ from ..utils import ( class SportDeutschlandIE(InfoExtractor): _VALID_URL = r'https?://sportdeutschland\.tv/(?P[^/?#]+)/(?P[^?#/]+)(?:$|[?#])' - _TEST = { + _TESTS = [{ 'url': 'http://sportdeutschland.tv/badminton/live-li-ning-badminton-weltmeisterschaft-2014-kopenhagen', 'info_dict': { 'id': 'live-li-ning-badminton-weltmeisterschaft-2014-kopenhagen', @@ -20,15 +20,28 @@ class SportDeutschlandIE(InfoExtractor): 'title': 'LIVE: Li-Ning Badminton Weltmeisterschaft 2014 Kopenhagen', 'categories': ['Badminton'], 'view_count': int, - 'thumbnail': 're:^https?://.*\.jpg', + 'thumbnail': 're:^https?://.*\.jpg$', 'description': 're:^Die Badminton-WM 2014 aus Kopenhagen LIVE', - 'timestamp': 1409043600, - 'upload_date': '20140826', + 'timestamp': int, + 'upload_date': 're:^201408[23][0-9]$', }, 'params': { 'skip_download': 'Live stream', }, - } + }, { + 'url': 'http://sportdeutschland.tv/li-ning-badminton-wm-2014/lee-li-ning-badminton-weltmeisterschaft-2014-kopenhagen-herren-einzel-wei-vs', + 'info_dict': { + 'id': 'lee-li-ning-badminton-weltmeisterschaft-2014-kopenhagen-herren-einzel-wei-vs', + 'ext': 'mp4', + 'upload_date': '20140825', + 'description': 'md5:60a20536b57cee7d9a4ec005e8687504', + 'timestamp': 1408976060, + 'title': 'Li-Ning Badminton Weltmeisterschaft 2014 Kopenhagen: Herren Einzel, Wei Lee vs. Keun Lee', + 'thumbnail': 're:^https?://.*\.jpg$', + 'view_count': int, + 'categories': ['Li-Ning Badminton WM 2014'], + } + }] def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) @@ -46,21 +59,27 @@ class SportDeutschlandIE(InfoExtractor): categories = list(data.get('section', {}).get('tags', {}).values()) asset = data['asset'] + formats = [] smil_url = asset['video'] - m3u8_url = smil_url.replace('.smil', '.m3u8') - formats = self._extract_m3u8_formats(m3u8_url, video_id, ext='mp4') + if '.smil' in smil_url: + m3u8_url = smil_url.replace('.smil', '.m3u8') + formats.extend( + self._extract_m3u8_formats(m3u8_url, video_id, ext='mp4')) + + smil_doc = self._download_xml( + smil_url, video_id, note='Downloading SMIL metadata') + base_url = smil_doc.find('./head/meta').attrib['base'] + formats.extend([{ + 'format_id': 'rmtp', + 'url': base_url, + 'play_path': n.attrib['src'], + 'ext': 'flv', + 'preference': -100, + 'format_note': 'Seems to fail at example stream', + } for n in smil_doc.findall('./body/video')]) + else: + formats.append({'url': smil_url}) - smil_doc = self._download_xml( - smil_url, video_id, note='Downloading SMIL metadata') - base_url = smil_doc.find('./head/meta').attrib['base'] - formats.extend([{ - 'format_id': 'rmtp', - 'url': base_url, - 'play_path': n.attrib['src'], - 'ext': 'flv', - 'preference': -100, - 'format_note': 'Seems to fail at example stream', - } for n in smil_doc.findall('./body/video')]) self._sort_formats(formats) return { @@ -71,7 +90,7 @@ class SportDeutschlandIE(InfoExtractor): 'description': asset.get('teaser'), 'categories': categories, 'view_count': asset.get('views'), - 'rtmp_live': asset['live'], + 'rtmp_live': asset.get('live'), 'timestamp': parse_iso8601(asset.get('date')), }