diff options
Diffstat (limited to 'youtube_dl/extractor/dailymotion.py')
| -rw-r--r-- | youtube_dl/extractor/dailymotion.py | 32 | 
1 files changed, 22 insertions, 10 deletions
diff --git a/youtube_dl/extractor/dailymotion.py b/youtube_dl/extractor/dailymotion.py index 842d9a259..1816c559e 100644 --- a/youtube_dl/extractor/dailymotion.py +++ b/youtube_dl/extractor/dailymotion.py @@ -22,9 +22,11 @@ from ..utils import (      parse_iso8601,      sanitized_Request,      str_to_int, +    try_get,      unescapeHTML, +    update_url_query, +    url_or_none,      urlencode_postdata, -    try_get,  ) @@ -172,15 +174,25 @@ class DailymotionIE(DailymotionBaseInfoExtractor):               r'__PLAYER_CONFIG__\s*=\s*({.+?});'],              webpage, 'player v5', default=None)          if player_v5: -            player = self._parse_json(player_v5, video_id) -            metadata = try_get( -                player, lambda x: x['metadata'], dict) or self._download_json( -                'http://www.dailymotion.com/player/metadata/video/%s' % video_id, video_id, query={ -                    'integration': 'inline', -                    'GK_PV5_NEON': '1', -                }) - -            if metadata.get('error', {}).get('type') == 'password_protected': +            player = self._parse_json(player_v5, video_id, fatal=False) or {} +            metadata = try_get(player, lambda x: x['metadata'], dict) +            if not metadata: +                metadata_url = url_or_none(try_get( +                    player, lambda x: x['context']['metadata_template_url1'])) +                if metadata_url: +                    metadata_url = metadata_url.replace(':videoId', video_id) +                else: +                    metadata_url = update_url_query( +                        'https://www.dailymotion.com/player/metadata/video/%s' +                        % video_id, { +                            'embedder': url, +                            'integration': 'inline', +                            'GK_PV5_NEON': '1', +                        }) +                metadata = self._download_json( +                    metadata_url, video_id, 'Downloading metadata JSON') + +            if try_get(metadata, lambda x: x['error']['type']) == 'password_protected':                  password = self._downloader.params.get('videopassword')                  if password:                      r = int(metadata['id'][1:], 36)  | 
