diff --git a/youtube_dl/extractor/mitele.py b/youtube_dl/extractor/mitele.py index ad9da9612..64b372447 100644 --- a/youtube_dl/extractor/mitele.py +++ b/youtube_dl/extractor/mitele.py @@ -1,11 +1,13 @@ # coding: utf-8 from __future__ import unicode_literals +import re + from .common import InfoExtractor from ..utils import ( + determine_ext, int_or_none, parse_iso8601, - smuggle_url, ) @@ -31,7 +33,6 @@ class MiTeleIE(InfoExtractor): 'timestamp': 1471209401, 'upload_date': '20160814', }, - 'add_ie': ['Ooyala'], }, { # no explicit title 'url': 'http://www.mitele.es/programas-tv/cuarto-milenio/57b0de3dc915da14058b4876/player', @@ -54,7 +55,6 @@ class MiTeleIE(InfoExtractor): 'params': { 'skip_download': True, }, - 'add_ie': ['Ooyala'], }, { 'url': 'http://www.mitele.es/series-online/la-que-se-avecina/57aac5c1c915da951a8b45ed/player', 'only_matching': True, @@ -75,10 +75,45 @@ class MiTeleIE(InfoExtractor): content = pre_player.get('content') or {} info = content.get('info') or {} + config = self._download_json( + video.get('dataConfig'), video_id, 'Downloading config JSON') + caronte = self._download_json( + config.get('services').get('caronte'), video_id, 'Downloading caronte JSON') + gbx = self._download_json( + config.get('services').get('gbx'), video_id, 'Downloading gbx').get('gbx') + bbx = caronte.get('bbx') + + headers = { + 'Referer': url, + 'Origin': re.search(r'https?://[^/]+', url).group(0), + 'Accept': 'application/json, text/plain, */*', + 'Host': caronte.get('cerbero').split('//')[-1], + 'Content-Type': 'application/json;charset=UTF-8', + } + # The server refuses the spaces and random order like this: + # data=json.dumps({'bbx': bbx, 'gbx+':gbx}).encode(), + response = self._download_json( + caronte.get('cerbero'), video_id, 'Downloading cerbero token', + data='{"bbx":"%s","gbx":"%s"}' % (bbx, gbx), + headers=headers) + token = response.get('tokens').get('1').get('cdn') + + formats = [] + for location in caronte['dls']: + stream = location.get('stream') + if not stream: + continue + ext = determine_ext(stream) + if ext == 'm3u8': + formats.extend(self._extract_m3u8_formats( + stream + '?' + token, + video_id, 'mp4', 'm3u8_native', + m3u8_id='hls', fatal=False)) + self._sort_formats(formats) + return { - '_type': 'url_transparent', - # for some reason only HLS is supported - 'url': smuggle_url('ooyala:' + video_id, {'supportedformats': 'm3u8,dash'}), + 'formats': formats, + 'url': video_id, 'id': video_id, 'title': title, 'description': info.get('synopsis'),