Merge branch 'dcn' of github.com:remitamine/youtube-dl into remitamine-dcn
[youtube-dl] / youtube_dl / extractor / dcn.py
index 3857ba334da265297ce99f1c57cfb1200a2a2cf9..0d140f12fd8ea81d1c486f470bd4f83a2edf82d9 100644 (file)
@@ -5,13 +5,11 @@ import re
 import base64
 
 from .common import InfoExtractor
-from ..compat import (
-    compat_urllib_parse,
-    compat_urllib_request,
-)
+from ..compat import compat_urllib_parse
 from ..utils import (
     int_or_none,
     parse_iso8601,
+    sanitized_Request,
     smuggle_url,
     unsmuggle_url,
 )
@@ -54,10 +52,14 @@ class DCNBaseIE(InfoExtractor):
         }
 
     def _extract_video_formats(self, webpage, video_id, entry_protocol):
+        formats = []
         m3u8_url = self._html_search_regex(
-            r'file\s*:\s*"([^"]+)', webpage, 'm3u8 url')
-        formats = self._extract_m3u8_formats(
-            m3u8_url, video_id, 'mp4', entry_protocol, m3u8_id='hls')
+            r'file\s*:\s*"([^"]+)', webpage, 'm3u8 url', fatal=False)
+        if m3u8_url:
+            m3u8_formats = self._extract_m3u8_formats(
+                m3u8_url, video_id, 'mp4', entry_protocol, m3u8_id='hls', fatal=None)
+            if m3u8_formats:
+                formats.extend(m3u8_formats)
 
         rtsp_url = self._search_regex(
             r'<a[^>]+href="(rtsp://[^"]+)"', webpage, 'rtsp url', fatal=False)
@@ -95,7 +97,7 @@ class DCNVideoIE(DCNBaseIE):
     def _real_extract(self, url):
         video_id = self._match_id(url)
 
-        request = compat_urllib_request.Request(
+        request = sanitized_Request(
             'http://admin.mangomolo.com/analytics/index.php/plus/video?id=%s' % video_id,
             headers={'Origin': 'http://www.dcndigital.ae'})
         video_data = self._download_json(request, video_id)
@@ -117,26 +119,11 @@ class DCNVideoIE(DCNBaseIE):
 class DCNLiveIE(DCNBaseIE):
     IE_NAME = 'dcn:live'
     _VALID_URL = r'https?://(?:www\.)?dcndigital\.ae/(?:#/)?live/(?P<id>\d+)'
-    _TEST = {
-        'url': 'http://www.dcndigital.ae/#/live/6/dubai-tv',
-        'info_dict':
-        {
-            'id': '6',
-            'ext': 'mp4',
-            'title': 're:^Dubai Al Oula [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$',
-            'thumbnail': 're:^https?://.*\.png$',
-            'is_live': True,
-        },
-        'params': {
-            # m3u8 download
-            'skip_download': True,
-        },
-    }
 
     def _real_extract(self, url):
         channel_id = self._match_id(url)
 
-        request = compat_urllib_request.Request(
+        request = sanitized_Request(
             'http://admin.mangomolo.com/analytics/index.php/plus/getchanneldetails?channel_id=%s' % channel_id,
             headers={'Origin': 'http://www.dcndigital.ae'})
 
@@ -178,13 +165,13 @@ class DCNSeasonIE(InfoExtractor):
             data['season'] = season_id
             show_id = smuggled_data.get('show_id')
             if show_id is None:
-                request = compat_urllib_request.Request(
+                request = sanitized_Request(
                     'http://admin.mangomolo.com/analytics/index.php/plus/season_info?id=%s' % season_id,
                     headers={'Origin': 'http://www.dcndigital.ae'})
                 season = self._download_json(request, season_id)
                 show_id = season['id']
         data['show_id'] = show_id
-        request = compat_urllib_request.Request(
+        request = sanitized_Request(
             'http://admin.mangomolo.com/analytics/index.php/plus/show',
             compat_urllib_parse.urlencode(data),
             {