2 changed files with 86 additions and 0 deletions
Split 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