commit
e14ced7918
4 changed files with 148 additions and 29 deletions
@ -0,0 +1,100 @@ |
||||
# coding: utf-8 |
||||
from __future__ import unicode_literals |
||||
|
||||
from .common import InfoExtractor |
||||
from ..utils import ( |
||||
ExtractorError, |
||||
parse_iso8601, |
||||
) |
||||
|
||||
|
||||
class TV4IE(InfoExtractor): |
||||
IE_DESC = 'tv4.se and tv4play.se' |
||||
_VALID_URL = r'''(?x)https?://(?:www\.)? |
||||
(?: |
||||
tv4\.se/(?:[^/]+)/klipp/(?:.*)-| |
||||
tv4play\.se/ |
||||
(?: |
||||
(?:program|barn)/(?:[^\?]+)\?video_id=| |
||||
iframe/video/| |
||||
film/| |
||||
sport/| |
||||
) |
||||
)(?P<id>[0-9]+)''' |
||||
_TESTS = [ |
||||
{ |
||||
'url': 'http://www.tv4.se/kalla-fakta/klipp/kalla-fakta-5-english-subtitles-2491650', |
||||
'md5': '909d6454b87b10a25aa04c4bdd416a9b', |
||||
'info_dict': { |
||||
'id': '2491650', |
||||
'ext': 'mp4', |
||||
'title': 'Kalla Fakta 5 (english subtitles)', |
||||
'thumbnail': 're:^https?://.*\.jpg$', |
||||
'timestamp': int, |
||||
'upload_date': '20131125', |
||||
}, |
||||
}, |
||||
{ |
||||
'url': 'http://www.tv4play.se/iframe/video/3054113', |
||||
'md5': '77f851c55139ffe0ebd41b6a5552489b', |
||||
'info_dict': { |
||||
'id': '3054113', |
||||
'ext': 'mp4', |
||||
'title': 'Så här jobbar ficktjuvarna - se avslöjande bilder', |
||||
'thumbnail': 're:^https?://.*\.jpg$', |
||||
'description': 'Unika bilder avslöjar hur turisternas fickor vittjas mitt på Stockholms central. Två experter på ficktjuvarna avslöjar knepen du ska se upp för.', |
||||
'timestamp': int, |
||||
'upload_date': '20150130', |
||||
}, |
||||
}, |
||||
{ |
||||
'url': 'http://www.tv4play.se/sport/3060959', |
||||
'only_matching': True, |
||||
}, |
||||
{ |
||||
'url': 'http://www.tv4play.se/film/2378136', |
||||
'only_matching': True, |
||||
}, |
||||
{ |
||||
'url': 'http://www.tv4play.se/barn/looney-tunes?video_id=3062412', |
||||
'only_matching': True, |
||||
}, |
||||
] |
||||
|
||||
def _real_extract(self, url): |
||||
video_id = self._match_id(url) |
||||
|
||||
info = self._download_json( |
||||
'http://www.tv4play.se/player/assets/%s.json' % video_id, video_id, 'Downloading video info JSON') |
||||
|
||||
# If is_geo_restricted is true, it doesn't neceserally mean we can't download it |
||||
if info['is_geo_restricted']: |
||||
self.report_warning('This content might not be available in your country due to licensing restrictions.') |
||||
if info['requires_subscription']: |
||||
raise ExtractorError('This content requires subscription.', expected=True) |
||||
|
||||
sources_data = self._download_json( |
||||
'https://prima.tv4play.se/api/web/asset/%s/play.json?protocol=http&videoFormat=MP4' % video_id, video_id, 'Downloading sources JSON') |
||||
sources = sources_data['playback'] |
||||
|
||||
formats = [] |
||||
for item in sources.get('items', {}).get('item', []): |
||||
ext, bitrate = item['mediaFormat'], item['bitrate'] |
||||
formats.append({ |
||||
'format_id': '%s_%s' % (ext, bitrate), |
||||
'tbr': bitrate, |
||||
'ext': ext, |
||||
'url': item['url'], |
||||
}) |
||||
self._sort_formats(formats) |
||||
|
||||
return { |
||||
'id': video_id, |
||||
'title': info['title'], |
||||
'formats': formats, |
||||
'description': info.get('description'), |
||||
'timestamp': parse_iso8601(info.get('broadcast_date_time')), |
||||
'duration': info.get('duration'), |
||||
'thumbnail': info.get('image'), |
||||
'is_live': sources.get('live'), |
||||
} |
Loading…
Reference in new issue