@ -2,22 +2,30 @@
from __future__ import unicode_literals
from __future__ import unicode_literals
from . common import InfoExtractor
from . common import InfoExtractor
from . . compat import compat_urllib_request
from . . compat import (
from . . utils import int_or_none
compat_urllib_parse ,
compat_urllib_request ,
)
from . . utils import (
int_or_none ,
parse_iso8601 ,
)
class DcnIE ( InfoExtractor ) :
class D CN IE( InfoExtractor ) :
_VALID_URL = r ' https?://(?:www \ .)?dcndigital \ .ae/(?:#/)?(?:video/.+|show/ \ d+/.+?)/(?P<id> \ d+)/? '
_VALID_URL = r ' https?://(?:www \ .)?dcndigital \ .ae/(?:#/)?(?:video/.+|show/ \ d+/.+?)/(?P<id> \ d+)/? '
_TEST = {
_TEST = {
' url ' : ' http://www.dcndigital.ae/#/show/199074/ % D8 % B1 % D8 % AD % D9 %84% D8 % A9- % D8 % A7 % D9 %84% D8 % B9 % D9 %85% D8 % B1- % D8 % A7 % D9 %84% D8 % AD % D9 %84% D9 %82% D8 % A9-1/17375/6887 ' ,
' url ' : ' http://www.dcndigital.ae/#/show/199074/ % D8 % B1 % D8 % AD % D9 %84% D8 % A9- % D8 % A7 % D9 %84% D8 % B9 % D9 %85% D8 % B1- % D8 % A7 % D9 %84% D8 % AD % D9 %84% D9 %82% D8 % A9-1/17375/6887 ' ,
' info_dict ' :
' info_dict ' :
{
{
' id ' : ' 17375 ' ,
' id ' : ' 17375 ' ,
' ext ' : ' m 3u8 ' ,
' ext ' : ' m p4 ' ,
' title ' : ' رحلة العمر : الحلقة 1 ' ,
' title ' : ' رحلة العمر : الحلقة 1 ' ,
' description ' : ' في هذه الحلقة من برنامج رحلة العمر يقدّم الدكتور عمر عبد الكافي تبسيطاً لمناسك الحج والعمرة ويجيب مباشرة على استفسارات حجاج بيت الله الحرام بخصوص مناسك الحج والعمرة \n 1 ' ,
' description ' : ' md5:0156e935d870acb8ef0a66d24070c6d6 ' ,
' thumbnail ' : ' http://admin.mangomolo.com/analytics/uploads/71/images/media/2/2cefc09d7bec80afa754682f40e49503.jpg ' ,
' thumbnail ' : ' re:^https?://.* \ .jpg$ ' ,
' duration ' : 2041
' duration ' : 2041 ,
' timestamp ' : 1227504126 ,
' upload_date ' : ' 20081124 ' ,
} ,
} ,
' params ' : {
' params ' : {
# m3u8 download
# m3u8 download
@ -27,30 +35,50 @@ class DcnIE(InfoExtractor):
def _real_extract ( self , url ) :
def _real_extract ( self , url ) :
video_id = self . _match_id ( url )
video_id = self . _match_id ( url )
request = compat_urllib_request . Request (
request = compat_urllib_request . Request (
' http://admin.mangomolo.com/analytics/index.php/plus/video?id= ' + video_id ,
' http://admin.mangomolo.com/analytics/index.php/plus/video?id= %s ' % video_id ,
headers = { ' Origin ' : ' http://www.dcndigital.ae ' }
headers = { ' Origin ' : ' http://www.dcndigital.ae ' } )
)
json_data = self . _download_json ( request , video_id )
video = self . _download_json ( request , video_id )
title = json_data [ ' title_ar ' ]
title = video . get ( ' title_en ' ) or video [ ' title_ar ' ]
thumbnail = ' http://admin.mangomolo.com/analytics/ ' + json_data . get ( ' img ' )
duration = int_or_none ( json_data . get ( ' duration ' ) )
description = json_data . get ( ' description_ar ' )
webpage = self . _download_webpage (
webpage = self . _download_webpage (
' http://admin.mangomolo.com/analytics/index.php/customers/embed/video?id= ' + json_data [ ' id ' ] + ' &user_id= ' + json_data [ ' user_id ' ] + ' &countries=Q0M=&w=100 % &h=100 % &filter=DENY&signature= ' + json_data [ ' signature ' ] ,
' http://admin.mangomolo.com/analytics/index.php/customers/embed/video? '
video_id
+ compat_urllib_parse . urlencode ( {
)
' id ' : video [ ' id ' ] ,
m3u8_url = self . _html_search_regex (
' user_id ' : video [ ' user_id ' ] ,
r ' file: \ s* " ([^ " ]+) ' ,
' signature ' : video [ ' signature ' ] ,
webpage ,
' countries ' : ' Q0M= ' ,
' m3u8_url '
' filter ' : ' DENY ' ,
)
} ) , video_id )
formats = self . _extract_m3u8_formats ( m3u8_url , video_id )
m3u8_url = self . _html_search_regex ( r ' file: \ s* " ([^ " ]+) ' , webpage , ' m3u8 url ' )
formats = self . _extract_m3u8_formats (
m3u8_url , video_id , ' mp4 ' , entry_protocol = ' m3u8_native ' , m3u8_id = ' hls ' )
rtsp_url = self . _search_regex (
r ' <a[^>]+href= " (rtsp://[^ " ]+) " ' , webpage , ' rtsp url ' , fatal = False )
if rtsp_url :
formats . append ( {
' url ' : rtsp_url ,
' format_id ' : ' rtsp ' ,
} )
self . _sort_formats ( formats )
img = video . get ( ' img ' )
thumbnail = ' http://admin.mangomolo.com/analytics/ %s ' % img if img else None
duration = int_or_none ( video . get ( ' duration ' ) )
description = video . get ( ' description_en ' ) or video . get ( ' description_ar ' )
timestamp = parse_iso8601 ( video . get ( ' create_time ' ) or video . get ( ' update_time ' ) , ' ' )
return {
return {
' id ' : video_id ,
' id ' : video_id ,
' title ' : title ,
' title ' : title ,
' description ' : description ,
' thumbnail ' : thumbnail ,
' thumbnail ' : thumbnail ,
' duration ' : duration ,
' duration ' : duration ,
' description ' : description ,
' timestamp' : timestamp ,
' formats ' : formats ,
' formats ' : formats ,
}
}