diff options
Diffstat (limited to 'youtube_dl/extractor/dailymotion.py')
| -rw-r--r-- | youtube_dl/extractor/dailymotion.py | 33 | 
1 files changed, 20 insertions, 13 deletions
| diff --git a/youtube_dl/extractor/dailymotion.py b/youtube_dl/extractor/dailymotion.py index bc7823931..0c5b6617f 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 ..utils import ( -    ExtractorError,      determine_ext, +    error_to_compat_str, +    ExtractorError,      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 @@ -101,6 +99,11 @@ class DailymotionIE(DailymotionBaseInfoExtractor):          {              'url': 'http://www.dailymotion.com/video/xhza0o',              'only_matching': True, +        }, +        # with subtitles +        { +            'url': 'http://www.dailymotion.com/video/x20su5f_the-power-of-nightmares-1-the-rise-of-the-politics-of-fear-bbc-2004_news', +            'only_matching': True,          }      ] @@ -124,7 +127,9 @@ class DailymotionIE(DailymotionBaseInfoExtractor):              webpage, 'comment count', fatal=False))          player_v5 = self._search_regex( -            [r'buildPlayer\(({.+?})\);', r'playerV5\s*=\s*dmp\.create\([^,]+?,\s*({.+?})\);'], +            [r'buildPlayer\(({.+?})\);\n',  # See https://github.com/rg3/youtube-dl/issues/7826 +             r'playerV5\s*=\s*dmp\.create\([^,]+?,\s*({.+?})\);', +             r'buildPlayer\(({.+?})\);'],              webpage, 'player v5', default=None)          if player_v5:              player = self._parse_json(player_v5, video_id) @@ -174,11 +179,13 @@ class DailymotionIE(DailymotionBaseInfoExtractor):              uploader_id = metadata.get('owner', {}).get('id')              subtitles = {} -            for subtitle_lang, subtitle in metadata.get('subtitles', {}).get('data', {}).items(): -                subtitles[subtitle_lang] = [{ -                    'ext': determine_ext(subtitle_url), -                    'url': subtitle_url, -                } for subtitle_url in subtitle.get('urls', [])] +            subtitles_data = metadata.get('subtitles', {}).get('data', {}) +            if subtitles_data and isinstance(subtitles_data, dict): +                for subtitle_lang, subtitle in subtitles_data.items(): +                    subtitles[subtitle_lang] = [{ +                        'ext': determine_ext(subtitle_url), +                        'url': subtitle_url, +                    } for subtitle_url in subtitle.get('urls', [])]              return {                  'id': video_id, @@ -271,7 +278,7 @@ class DailymotionIE(DailymotionBaseInfoExtractor):                  'https://api.dailymotion.com/video/%s/subtitles?fields=id,language,url' % video_id,                  video_id, note=False)          except ExtractorError as err: -            self._downloader.report_warning('unable to download video subtitles: %s' % compat_str(err)) +            self._downloader.report_warning('unable to download video subtitles: %s' % error_to_compat_str(err))              return {}          info = json.loads(sub_list)          if (info['total'] > 0): | 
