Philipp Hagemeister
9 years ago
4 changed files with 148 additions and 29 deletions
Split View
Diff Options
-
1youtube_dl/extractor/__init__.py
-
49youtube_dl/extractor/blinkx.py
-
27youtube_dl/extractor/ted.py
-
100youtube_dl/extractor/tv4.py
@ -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'), |
|||
} |
Write
Preview
Loading…
Cancel
Save