| 
									
										
										
										
											2014-09-19 09:57:53 +02:00
										 |  |  | # coding: utf-8 | 
					
						
							|  |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import json | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							|  |  |  | from ..utils import ( | 
					
						
							|  |  |  |     determine_ext, | 
					
						
							|  |  |  |     int_or_none, | 
					
						
							|  |  |  |     js_to_json, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MuenchenTVIE(InfoExtractor): | 
					
						
							|  |  |  |     _VALID_URL = r'https?://(?:www\.)?muenchen\.tv/livestream' | 
					
						
							|  |  |  |     IE_DESC = 'münchen.tv' | 
					
						
							|  |  |  |     _TEST = { | 
					
						
							|  |  |  |         'url': 'http://www.muenchen.tv/livestream/', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '5334', | 
					
						
							|  |  |  |             'display_id': 'live', | 
					
						
							|  |  |  |             'ext': 'mp4', | 
					
						
							|  |  |  |             'title': 're:^münchen.tv-Livestream [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$', | 
					
						
							|  |  |  |             'is_live': True, | 
					
						
							| 
									
										
										
										
											2014-09-28 10:49:58 +02:00
										 |  |  |             'thumbnail': 're:^https?://.*\.jpg$' | 
					
						
							| 
									
										
										
										
											2014-09-19 09:57:53 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |         'params': { | 
					
						
							|  |  |  |             'skip_download': True, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         display_id = 'live' | 
					
						
							|  |  |  |         webpage = self._download_webpage(url, display_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-28 08:53:52 +02:00
										 |  |  |         title = self._live_title(self._og_search_title(webpage)) | 
					
						
							| 
									
										
										
										
											2014-09-19 09:57:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         data_js = self._search_regex( | 
					
						
							|  |  |  |             r'(?s)\nplaylist:\s*(\[.*?}\]),related:', | 
					
						
							|  |  |  |             webpage, 'playlist configuration') | 
					
						
							|  |  |  |         data_json = js_to_json(data_js) | 
					
						
							|  |  |  |         data = json.loads(data_json)[0] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         video_id = data['mediaid'] | 
					
						
							|  |  |  |         thumbnail = data.get('image') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         formats = [] | 
					
						
							|  |  |  |         for format_num, s in enumerate(data['sources']): | 
					
						
							|  |  |  |             ext = determine_ext(s['file'], None) | 
					
						
							|  |  |  |             label_str = s.get('label') | 
					
						
							|  |  |  |             if label_str is None: | 
					
						
							|  |  |  |                 label_str = '_%d' % format_num | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if ext is None: | 
					
						
							|  |  |  |                 format_id = label_str | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 format_id = '%s-%s' % (ext, label_str) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             formats.append({ | 
					
						
							|  |  |  |                 'url': s['file'], | 
					
						
							|  |  |  |                 'tbr': int_or_none(s.get('label')), | 
					
						
							|  |  |  |                 'ext': 'mp4', | 
					
						
							|  |  |  |                 'format_id': format_id, | 
					
						
							|  |  |  |                 'preference': -100 if '.smil' in s['file'] else 0, | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |         self._sort_formats(formats) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             'id': video_id, | 
					
						
							|  |  |  |             'display_id': display_id, | 
					
						
							|  |  |  |             'title': title, | 
					
						
							|  |  |  |             'formats': formats, | 
					
						
							|  |  |  |             'is_live': True, | 
					
						
							| 
									
										
										
										
											2014-09-28 10:49:58 +02:00
										 |  |  |             'thumbnail': thumbnail, | 
					
						
							| 
									
										
										
										
											2014-09-19 09:57:53 +02:00
										 |  |  |         } |