tonline.py (2093B)
1 # coding: utf-8 2 from __future__ import unicode_literals 3 4 from .common import InfoExtractor 5 from ..utils import int_or_none 6 7 8 class TOnlineIE(InfoExtractor): 9 IE_NAME = 't-online.de' 10 _VALID_URL = r'https?://(?:www\.)?t-online\.de/tv/(?:[^/]+/)*id_(?P<id>\d+)' 11 _TEST = { 12 'url': 'http://www.t-online.de/tv/sport/fussball/id_79166266/drittes-remis-zidane-es-muss-etwas-passieren-.html', 13 'md5': '7d94dbdde5f9d77c5accc73c39632c29', 14 'info_dict': { 15 'id': '79166266', 16 'ext': 'mp4', 17 'title': 'Drittes Remis! Zidane: "Es muss etwas passieren"', 18 'description': 'Es läuft nicht rund bei Real Madrid. Das 1:1 gegen den SD Eibar war das dritte Unentschieden in Folge in der Liga.', 19 } 20 } 21 22 def _real_extract(self, url): 23 video_id = self._match_id(url) 24 video_data = self._download_json( 25 'http://www.t-online.de/tv/id_%s/tid_json_video' % video_id, video_id) 26 title = video_data['subtitle'] 27 28 formats = [] 29 for asset in video_data.get('assets', []): 30 asset_source = asset.get('source') or asset.get('source2') 31 if not asset_source: 32 continue 33 formats_id = [] 34 for field_key in ('type', 'profile'): 35 field_value = asset.get(field_key) 36 if field_value: 37 formats_id.append(field_value) 38 formats.append({ 39 'format_id': '-'.join(formats_id), 40 'url': asset_source, 41 }) 42 43 thumbnails = [] 44 for image in video_data.get('images', []): 45 image_source = image.get('source') 46 if not image_source: 47 continue 48 thumbnails.append({ 49 'url': image_source, 50 }) 51 52 return { 53 'id': video_id, 54 'title': title, 55 'description': video_data.get('description'), 56 'duration': int_or_none(video_data.get('duration')), 57 'thumbnails': thumbnails, 58 'formats': formats, 59 }