2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
   9     compat_urllib_parse_unquote
, 
  13     get_element_by_attribute
, 
  19 class TelecincoIE(InfoExtractor
): 
  20     IE_DESC 
= 'telecinco.es, cuatro.com and mediaset.es' 
  21     _VALID_URL 
= r
'https?://www\.(?:telecinco\.es|cuatro\.com|mediaset\.es)/(?:[^/]+/)+(?P<id>.+?)\.html' 
  24         'url': 'http://www.telecinco.es/robinfood/temporada-01/t01xp14/Bacalao-cocochas-pil-pil_0_1876350223.html', 
  25         'md5': '5cbef3ad5ef17bf0d21570332d140729', 
  27             'id': 'MDSVID20141015_0058', 
  29             'title': 'Con Martín Berasategui, hacer un bacalao al ...', 
  33         'url': 'http://www.cuatro.com/deportes/futbol/barcelona/Leo_Messi-Champions-Roma_2_2052780128.html', 
  34         'md5': '0a5b9f3cc8b074f50a0578f823a12694', 
  36             'id': 'MDSVID20150916_0128', 
  38             'title': '¿Quién es este ex futbolista con el que hablan ...', 
  42         'url': 'http://www.mediaset.es/12meses/campanas/doylacara/conlatratanohaytrato/Ayudame-dar-cara-trata-trato_2_1986630220.html', 
  43         'md5': 'ad1bfaaba922dd4a295724b05b68f86a', 
  45             'id': 'MDSVID20150513_0220', 
  47             'title': '#DOYLACARA. Con la trata no hay trato', 
  51         'url': 'http://www.telecinco.es/informativos/nacional/Pablo_Iglesias-Informativos_Telecinco-entrevista-Pedro_Piqueras_2_1945155182.html', 
  52         'only_matching': True, 
  54         'url': 'http://www.telecinco.es/espanasinirmaslejos/Espana-gran-destino-turistico_2_1240605043.html', 
  55         'only_matching': True, 
  58     def _real_extract(self
, url
): 
  59         episode 
= self
._match
_id
(url
) 
  60         webpage 
= self
._download
_webpage
(url
, episode
) 
  61         embed_data_json 
= self
._search
_regex
( 
  62             r
'(?s)MSV\.embedData\[.*?\]\s*=\s*({.*?});', webpage
, 'embed data', 
  64         embed_data 
= json
.loads(embed_data_json
) 
  66         domain 
= embed_data
['mediaUrl'] 
  67         if not domain
.startswith('http'): 
  68             # only happens in telecinco.es videos 
  69             domain 
= 'http://' + domain
 
  70         info_url 
= compat_urlparse
.urljoin( 
  72             compat_urllib_parse_unquote(embed_data
['flashvars']['host']) 
  74         info_el 
= self
._download
_xml
(info_url
, episode
).find('./video/info') 
  76         video_link 
= info_el
.find('videoUrl/link').text
 
  77         token_query 
= compat_urllib_parse
.urlencode({'id': video_link
}) 
  78         token_info 
= self
._download
_json
( 
  79             embed_data
['flashvars']['ov_tk'] + '?' + token_query
, 
  81             transform_source
=strip_jsonp
 
  83         formats 
= self
._extract
_m
3u8_formats
( 
  84             token_info
['tokenizedUrl'], episode
, ext
='mp4', entry_protocol
='m3u8_native') 
  87             'id': embed_data
['videoId'], 
  88             'display_id': episode
, 
  89             'title': info_el
.find('title').text
, 
  91             'description': get_element_by_attribute('class', 'text', webpage
), 
  92             'thumbnail': info_el
.find('thumb').text
, 
  93             'duration': parse_duration(info_el
.find('duration').text
),