| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  | # coding: utf-8 | 
					
						
							|  |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | from ..utils import ( | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  |     parse_iso8601, | 
					
						
							| 
									
										
										
										
											2015-11-21 22:18:17 +06:00
										 |  |  |     sanitized_Request, | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SportDeutschlandIE(InfoExtractor): | 
					
						
							|  |  |  |     _VALID_URL = r'https?://sportdeutschland\.tv/(?P<sport>[^/?#]+)/(?P<id>[^?#/]+)(?:$|[?#])' | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |     _TESTS = [{ | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  |         'url': 'http://sportdeutschland.tv/badminton/live-li-ning-badminton-weltmeisterschaft-2014-kopenhagen', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': 'live-li-ning-badminton-weltmeisterschaft-2014-kopenhagen', | 
					
						
							|  |  |  |             'ext': 'mp4', | 
					
						
							| 
									
										
										
										
											2014-09-29 05:17:16 +02:00
										 |  |  |             'title': 're:Li-Ning Badminton Weltmeisterschaft 2014 Kopenhagen', | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  |             'categories': ['Badminton'], | 
					
						
							|  |  |  |             'view_count': int, | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |             'thumbnail': 're:^https?://.*\.jpg$', | 
					
						
							| 
									
										
										
										
											2014-09-29 05:17:16 +02:00
										 |  |  |             'description': 're:Die Badminton-WM 2014 aus Kopenhagen bei Sportdeutschland\.TV', | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |             'timestamp': int, | 
					
						
							|  |  |  |             'upload_date': 're:^201408[23][0-9]$', | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |         'params': { | 
					
						
							|  |  |  |             'skip_download': 'Live stream', | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |     }, { | 
					
						
							|  |  |  |         '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, | 
					
						
							| 
									
										
										
										
											2015-08-16 23:39:50 +02:00
										 |  |  |             'duration': 2732, | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |             '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'], | 
					
						
							| 
									
										
										
										
											2015-08-16 23:39:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |     }] | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         mobj = re.match(self._VALID_URL, url) | 
					
						
							|  |  |  |         video_id = mobj.group('id') | 
					
						
							|  |  |  |         sport_id = mobj.group('sport') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-16 23:39:50 +02:00
										 |  |  |         api_url = 'http://proxy.vidibusdynamic.net/sportdeutschland.tv/api/permalinks/%s/%s?access_token=true' % ( | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  |             sport_id, video_id) | 
					
						
							| 
									
										
										
										
											2015-11-21 22:18:17 +06:00
										 |  |  |         req = sanitized_Request(api_url, headers={ | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  |             'Accept': 'application/vnd.vidibus.v2.html+json', | 
					
						
							|  |  |  |             'Referer': url, | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         data = self._download_json(req, video_id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         asset = data['asset'] | 
					
						
							| 
									
										
										
										
											2015-08-16 23:39:50 +02:00
										 |  |  |         categories = [data['section']['title']] | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |         formats = [] | 
					
						
							| 
									
										
										
										
											2015-08-16 23:39:50 +02:00
										 |  |  |         smil_url = asset['video'] | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |         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') | 
					
						
							| 
									
										
										
										
											2015-12-27 13:11:53 +01:00
										 |  |  |             base_url_el = smil_doc.find('./head/meta') | 
					
						
							|  |  |  |             if base_url_el: | 
					
						
							|  |  |  |                 base_url = base_url_el.attrib['base'] | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |             formats.extend([{ | 
					
						
							|  |  |  |                 'format_id': 'rmtp', | 
					
						
							| 
									
										
										
										
											2015-12-27 13:11:53 +01:00
										 |  |  |                 'url': base_url if base_url_el else n.attrib['src'], | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |                 '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}) | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self._sort_formats(formats) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             'id': video_id, | 
					
						
							|  |  |  |             'formats': formats, | 
					
						
							|  |  |  |             'title': asset['title'], | 
					
						
							|  |  |  |             'thumbnail': asset.get('image'), | 
					
						
							|  |  |  |             'description': asset.get('teaser'), | 
					
						
							| 
									
										
										
										
											2015-08-16 23:39:50 +02:00
										 |  |  |             'duration': asset.get('duration'), | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  |             'categories': categories, | 
					
						
							|  |  |  |             'view_count': asset.get('views'), | 
					
						
							| 
									
										
										
										
											2014-08-28 10:55:32 +02:00
										 |  |  |             'rtmp_live': asset.get('live'), | 
					
						
							| 
									
										
										
										
											2014-08-26 12:51:13 +02:00
										 |  |  |             'timestamp': parse_iso8601(asset.get('date')), | 
					
						
							|  |  |  |         } |