# coding: utf-8 from __future__ import unicode_literals from .common import InfoExtractor from ..utils import int_or_none class TOnlineIE(InfoExtractor): IE_NAME = 't-online.de' _VALID_URL = r'https?://(?:www\.)?t-online\.de/tv/(?:[^/]+/)*id_(?P<id>\d+)' _TEST = { 'url': 'http://www.t-online.de/tv/sport/fussball/id_79166266/drittes-remis-zidane-es-muss-etwas-passieren-.html', 'md5': '7d94dbdde5f9d77c5accc73c39632c29', 'info_dict': { 'id': '79166266', 'ext': 'mp4', 'title': 'Drittes Remis! Zidane: "Es muss etwas passieren"', '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.', } } def _real_extract(self, url): video_id = self._match_id(url) video_data = self._download_json( 'http://www.t-online.de/tv/id_%s/tid_json_video' % video_id, video_id) title = video_data['subtitle'] formats = [] for asset in video_data.get('assets', []): asset_source = asset.get('source') or asset.get('source2') if not asset_source: continue formats_id = [] for field_key in ('type', 'profile'): field_value = asset.get(field_key) if field_value: formats_id.append(field_value) formats.append({ 'format_id': '-'.join(formats_id), 'url': asset_source, }) thumbnails = [] for image in video_data.get('images', []): image_source = image.get('source') if not image_source: continue thumbnails.append({ 'url': image_source, }) return { 'id': video_id, 'title': title, 'description': video_data.get('description'), 'duration': int_or_none(video_data.get('duration')), 'thumbnails': thumbnails, 'formats': formats, }