86 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | # coding: utf-8 | ||
|  | from __future__ import unicode_literals | ||
|  | 
 | ||
|  | import re | ||
|  | 
 | ||
|  | from .common import InfoExtractor | ||
|  | from ..utils import ( | ||
|  |     ExtractorError, | ||
|  |     parse_iso8601, | ||
|  |     qualities, | ||
|  | ) | ||
|  | 
 | ||
|  | 
 | ||
|  | class TVPlayIE(InfoExtractor): | ||
|  |     _VALID_URL = r'http://(?:www\.)?tvplay\.lv/parraides/[^/]+/(?P<id>\d+)' | ||
|  |     _TESTS = [ | ||
|  |         { | ||
|  |             'url': 'http://www.tvplay.lv/parraides/vinas-melo-labak/418113?autostart=true', | ||
|  |             'info_dict': { | ||
|  |                 'id': '418113', | ||
|  |                 'ext': 'flv', | ||
|  |                 'title': 'Kādi ir īri? - Viņas melo labāk', | ||
|  |                 'description': 'Baiba apsmej īrus, kādi tie ir un ko viņi dara.', | ||
|  |                 'duration': 25, | ||
|  |                 'timestamp': 1406097056, | ||
|  |                 'upload_date': '20140723', | ||
|  |             }, | ||
|  |             'params': { | ||
|  |                 # rtmp download | ||
|  |                 'skip_download': True, | ||
|  |             }, | ||
|  |         }, | ||
|  |     ] | ||
|  | 
 | ||
|  |     def _real_extract(self, url): | ||
|  |         mobj = re.match(self._VALID_URL, url) | ||
|  |         video_id = mobj.group('id') | ||
|  | 
 | ||
|  |         video = self._download_json( | ||
|  |             'http://playapi.mtgx.tv/v1/videos/%s' % video_id, video_id, 'Downloading video JSON') | ||
|  | 
 | ||
|  |         if video['is_geo_blocked']: | ||
|  |             raise ExtractorError( | ||
|  |                 'This content is not available in your country due to copyright reasons', expected=True) | ||
|  | 
 | ||
|  |         streams = self._download_json( | ||
|  |             'http://playapi.mtgx.tv/v1/videos/stream/%s' % video_id, video_id, 'Downloading streams JSON') | ||
|  | 
 | ||
|  |         quality = qualities(['hls', 'medium', 'high']) | ||
|  |         formats = [] | ||
|  |         for format_id, video_url in streams['streams'].items(): | ||
|  |             if not video_url: | ||
|  |                 continue | ||
|  |             fmt = { | ||
|  |                 'format_id': format_id, | ||
|  |                 'preference': quality(format_id), | ||
|  |             } | ||
|  |             if video_url.startswith('rtmp'): | ||
|  |                 m = re.search(r'^(?P<url>rtmp://[^/]+/(?P<app>[^/]+))/(?P<playpath>.+)$', video_url) | ||
|  |                 if not m: | ||
|  |                     continue | ||
|  |                 fmt.update({ | ||
|  |                     'ext': 'flv', | ||
|  |                     'url': m.group('url'), | ||
|  |                     'app': m.group('app'), | ||
|  |                     'play_path': m.group('playpath'), | ||
|  |                 }) | ||
|  |             else: | ||
|  |                 fmt.update({ | ||
|  |                     'url': video_url, | ||
|  |                 }) | ||
|  |             formats.append(fmt) | ||
|  | 
 | ||
|  |         self._sort_formats(formats) | ||
|  | 
 | ||
|  |         return { | ||
|  |             'id': video_id, | ||
|  |             'title': video['title'], | ||
|  |             'description': video['description'], | ||
|  |             'duration': video['duration'], | ||
|  |             'timestamp': parse_iso8601(video['created_at']), | ||
|  |             'view_count': video['views']['total'], | ||
|  |             'age_limit': video.get('age_limit', 0), | ||
|  |             'formats': formats, | ||
|  |         } |