2015-02-16 15:45:01 +01:00
# coding: utf-8
2014-08-18 15:39:35 +02:00
from __future__ import unicode_literals
from . common import InfoExtractor
2015-02-16 15:45:01 +01:00
from . . utils import (
int_or_none ,
parse_duration ,
)
2014-08-18 15:39:35 +02:00
2015-02-16 15:45:01 +01:00
class RtlNlIE ( InfoExtractor ) :
IE_NAME = ' rtl.nl '
IE_DESC = ' rtl.nl and rtlxl.nl '
_VALID_URL = r ''' (?x)
2015-06-11 15:03:22 +02:00
https ? : / / ( ? : www \. ) ?
2015-02-16 15:45:01 +01:00
( ? :
rtlxl \. nl / \#!/[^/]+/|
2015-06-11 15:03:22 +02:00
rtl \. nl / system / videoplayer / ( ? : [ ^ / ] + / ) + ( ? : video_ ) ? embed \. html \b . + ? \buuid =
2015-02-16 15:45:01 +01:00
)
( ? P < id > [ 0 - 9 a - f - ] + ) '''
2014-08-18 15:39:35 +02:00
2015-02-16 15:45:01 +01:00
_TESTS = [ {
2014-08-18 15:39:35 +02:00
' url ' : ' http://www.rtlxl.nl/#!/rtl-nieuws-132237/6e4203a6-0a5e-3596-8424-c599a59e0677 ' ,
2014-08-28 17:54:06 +02:00
' md5 ' : ' cc16baa36a6c169391f0764fa6b16654 ' ,
2014-08-18 15:39:35 +02:00
' info_dict ' : {
' id ' : ' 6e4203a6-0a5e-3596-8424-c599a59e0677 ' ,
2014-08-28 17:54:06 +02:00
' ext ' : ' mp4 ' ,
2014-08-18 15:39:35 +02:00
' title ' : ' RTL Nieuws - Laat ' ,
2014-08-28 17:54:06 +02:00
' description ' : ' md5:6b61f66510c8889923b11f2778c72dc5 ' ,
2014-08-18 15:39:35 +02:00
' timestamp ' : 1408051800 ,
' upload_date ' : ' 20140814 ' ,
2014-08-25 12:59:53 +02:00
' duration ' : 576.880 ,
2014-08-18 15:39:35 +02:00
} ,
2015-02-16 15:45:01 +01:00
} , {
' url ' : ' http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed/autoplay=false ' ,
' md5 ' : ' dea7474214af1271d91ef332fb8be7ea ' ,
' info_dict ' : {
' id ' : ' 84ae5571-ac25-4225-ae0c-ef8d9efb2aed ' ,
' ext ' : ' mp4 ' ,
' timestamp ' : 1424039400 ,
' title ' : ' RTL Nieuws - Nieuwe beelden Kopenhagen: chaos direct na aanslag ' ,
' thumbnail ' : ' re:^https?://screenshots \ .rtl \ .nl/system/thumb/sz=[0-9]+x[0-9]+/uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed$ ' ,
' upload_date ' : ' 20150215 ' ,
' description ' : ' Er zijn nieuwe beelden vrijgegeven die vlak na de aanslag in Kopenhagen zijn gemaakt. Op de video is goed te zien hoe omstanders zich bekommeren om één van de slachtoffers, terwijl de eerste agenten ter plaatse komen. ' ,
}
2015-06-11 15:03:22 +02:00
} , {
' url ' : ' http://www.rtl.nl/system/videoplayer/derden/embed.html#!/uuid=bb0353b0-d6a4-1dad-90e9-18fe75b8d1f0 ' ,
' only_matching ' : True ,
2015-02-16 15:45:01 +01:00
} ]
2014-08-18 15:39:35 +02:00
def _real_extract ( self , url ) :
2015-02-16 15:45:01 +01:00
uuid = self . _match_id ( url )
2014-08-18 15:39:35 +02:00
info = self . _download_json (
2015-06-29 00:59:18 +02:00
' http://www.rtl.nl/system/s4m/vfd/version=2/uuid= %s /fmt=adaptive/ ' % uuid ,
2014-08-18 15:39:35 +02:00
uuid )
2014-08-25 12:59:53 +02:00
2014-08-18 15:39:35 +02:00
material = info [ ' material ' ] [ 0 ]
progname = info [ ' abstracts ' ] [ 0 ] [ ' name ' ]
subtitle = material [ ' title ' ] or info [ ' episodes ' ] [ 0 ] [ ' name ' ]
2015-02-16 15:45:01 +01:00
description = material . get ( ' synopsis ' ) or info [ ' episodes ' ] [ 0 ] [ ' synopsis ' ]
2014-08-18 15:39:35 +02:00
2015-07-05 15:01:07 +02:00
meta = info . get ( ' meta ' , { } )
2014-11-22 20:06:45 +01:00
# Use unencrypted m3u8 streams (See https://github.com/rg3/youtube-dl/issues/4118)
2015-07-05 15:01:07 +02:00
videopath = material [ ' videopath ' ] . replace ( ' /adaptive/ ' , ' /flash/ ' )
m3u8_url = meta . get ( ' videohost ' , ' http://manifest.us.rtl.nl ' ) + videopath
2014-08-28 17:54:06 +02:00
2014-11-18 23:26:44 +01:00
formats = self . _extract_m3u8_formats ( m3u8_url , uuid , ext = ' mp4 ' )
2014-08-28 17:54:06 +02:00
2014-11-23 12:28:09 +01:00
video_urlpart = videopath . split ( ' /flash/ ' ) [ 1 ] [ : - 5 ]
2014-08-28 17:54:06 +02:00
PG_URL_TEMPLATE = ' http://pg.us.rtl.nl/rtlxl/network/ %s /progressive/ %s .mp4 '
formats . extend ( [
{
' url ' : PG_URL_TEMPLATE % ( ' a2m ' , video_urlpart ) ,
' format_id ' : ' pg-sd ' ,
} ,
{
' url ' : PG_URL_TEMPLATE % ( ' a3m ' , video_urlpart ) ,
' format_id ' : ' pg-hd ' ,
2014-11-19 00:20:42 +01:00
' quality ' : 0 ,
2014-08-28 17:54:06 +02:00
}
] )
2014-11-18 23:26:44 +01:00
self . _sort_formats ( formats )
2015-02-16 15:45:01 +01:00
thumbnails = [ ]
2015-07-05 15:01:07 +02:00
2015-02-16 15:45:01 +01:00
for p in ( ' poster_base_url ' , ' " thumb_base_url " ' ) :
if not meta . get ( p ) :
continue
thumbnails . append ( {
' url ' : self . _proto_relative_url ( meta [ p ] + uuid ) ,
' width ' : int_or_none ( self . _search_regex (
r ' /sz=([0-9]+) ' , meta [ p ] , ' thumbnail width ' , fatal = False ) ) ,
' height ' : int_or_none ( self . _search_regex (
r ' /sz=[0-9]+x([0-9]+) ' ,
meta [ p ] , ' thumbnail height ' , fatal = False ) )
} )
2014-08-18 15:39:35 +02:00
return {
' id ' : uuid ,
2014-08-25 12:59:53 +02:00
' title ' : ' %s - %s ' % ( progname , subtitle ) ,
2014-08-28 17:54:06 +02:00
' formats ' : formats ,
2014-08-18 15:39:35 +02:00
' timestamp ' : material [ ' original_date ' ] ,
2015-02-16 15:45:01 +01:00
' description ' : description ,
2014-08-25 12:59:53 +02:00
' duration ' : parse_duration ( material . get ( ' duration ' ) ) ,
2015-02-16 15:45:01 +01:00
' thumbnails ' : thumbnails ,
2014-08-18 15:39:35 +02:00
}