2 changed files with 86 additions and 0 deletions
Unified View
Diff Options
@ -0,0 +1,85 @@ |
|||||
|
# 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, |
||||
|
} |
Write
Preview
Loading…
Cancel
Save