[dcn] Improve

pull/2/head
Sergey M․ 10 years ago
parent 89faae660f
commit f94639fadf

@ -118,7 +118,7 @@ from .dailymotion import (
) )
from .daum import DaumIE from .daum import DaumIE
from .dbtv import DBTVIE from .dbtv import DBTVIE
from .dcn import DcnIE from .dcn import DCNIE
from .dctp import DctpTvIE from .dctp import DctpTvIE
from .deezer import DeezerPlaylistIE from .deezer import DeezerPlaylistIE
from .dfb import DFBIE from .dfb import DFBIE

@ -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 DCNIE(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': 'm3u8', 'ext': 'mp4',
'title': 'رحلة العمر : الحلقة 1', 'title': 'رحلة العمر : الحلقة 1',
'description': 'في هذه الحلقة من برنامج رحلة العمر يقدّم الدكتور عمر عبد الكافي تبسيطاً لمناسك الحج والعمرة ويجيب مباشرة على استفسارات حجاج بيت الله الحرام بخصوص مناسك الحج والعمرة\n1', '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,
} }

Loading…
Cancel
Save