diff options
Diffstat (limited to 'youtube_dl/extractor/dailymotion.py')
| -rw-r--r-- | youtube_dl/extractor/dailymotion.py | 39 | 
1 files changed, 28 insertions, 11 deletions
diff --git a/youtube_dl/extractor/dailymotion.py b/youtube_dl/extractor/dailymotion.py index 80a05cfee..ab7f3aec4 100644 --- a/youtube_dl/extractor/dailymotion.py +++ b/youtube_dl/extractor/dailymotion.py @@ -7,15 +7,13 @@ import itertools  from .common import InfoExtractor -from ..compat import ( -    compat_str, -    compat_urllib_request, -) +from ..compat import compat_str  from ..utils import (      ExtractorError,      determine_ext,      int_or_none,      parse_iso8601, +    sanitized_Request,      str_to_int,      unescapeHTML,  ) @@ -25,7 +23,7 @@ class DailymotionBaseInfoExtractor(InfoExtractor):      @staticmethod      def _build_request(url):          """Build a request with the family filter disabled""" -        request = compat_urllib_request.Request(url) +        request = sanitized_Request(url)          request.add_header('Cookie', 'family_filter=off; ff=off')          return request @@ -96,6 +94,11 @@ class DailymotionIE(DailymotionBaseInfoExtractor):                  'uploader': 'HotWaves1012',                  'age_limit': 18,              } +        }, +        # geo-restricted, player v5 +        { +            'url': 'http://www.dailymotion.com/video/xhza0o', +            'only_matching': True,          }      ] @@ -124,6 +127,9 @@ class DailymotionIE(DailymotionBaseInfoExtractor):          if player_v5:              player = self._parse_json(player_v5, video_id)              metadata = player['metadata'] + +            self._check_error(metadata) +              formats = []              for quality, media_list in metadata['qualities'].items():                  for media in media_list: @@ -133,9 +139,17 @@ class DailymotionIE(DailymotionBaseInfoExtractor):                      type_ = media.get('type')                      if type_ == 'application/vnd.lumberjack.manifest':                          continue -                    if type_ == 'application/x-mpegURL' or determine_ext(media_url) == 'm3u8': -                        formats.extend(self._extract_m3u8_formats( -                            media_url, video_id, 'mp4', m3u8_id='hls')) +                    ext = determine_ext(media_url) +                    if type_ == 'application/x-mpegURL' or ext == 'm3u8': +                        m3u8_formats = self._extract_m3u8_formats( +                            media_url, video_id, 'mp4', m3u8_id='hls', fatal=False) +                        if m3u8_formats: +                            formats.extend(m3u8_formats) +                    elif type_ == 'application/f4m' or ext == 'f4m': +                        f4m_formats = self._extract_f4m_formats( +                            media_url, video_id, preference=-1, f4m_id='hds', fatal=False) +                        if f4m_formats: +                            formats.extend(f4m_formats)                      else:                          f = {                              'url': media_url, @@ -201,9 +215,7 @@ class DailymotionIE(DailymotionBaseInfoExtractor):                  'video info', flags=re.MULTILINE),              video_id) -        if info.get('error') is not None: -            msg = 'Couldn\'t get video, Dailymotion says: %s' % info['error']['title'] -            raise ExtractorError(msg, expected=True) +        self._check_error(info)          formats = []          for (key, format_id) in self._FORMATS: @@ -246,6 +258,11 @@ class DailymotionIE(DailymotionBaseInfoExtractor):              'duration': info['duration']          } +    def _check_error(self, info): +        if info.get('error') is not None: +            raise ExtractorError( +                '%s said: %s' % (self.IE_NAME, info['error']['title']), expected=True) +      def _get_subtitles(self, video_id, webpage):          try:              sub_list = self._download_webpage(  | 
