mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[dailymotion] add support for password protected videos(closes #9789)
This commit is contained in:
		| @@ -1,9 +1,14 @@ | ||||
| # coding: utf-8 | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import re | ||||
| import json | ||||
| import base64 | ||||
| import hashlib | ||||
| import itertools | ||||
| import json | ||||
| import random | ||||
| import re | ||||
| import string | ||||
| import struct | ||||
|  | ||||
| from .common import InfoExtractor | ||||
|  | ||||
| @@ -64,7 +69,6 @@ class DailymotionIE(DailymotionBaseInfoExtractor): | ||||
|             'uploader': 'Deadline', | ||||
|             'uploader_id': 'x1xm8ri', | ||||
|             'age_limit': 0, | ||||
|             'view_count': int, | ||||
|         }, | ||||
|     }, { | ||||
|         'url': 'https://www.dailymotion.com/video/x2iuewm_steam-machine-models-pricing-listed-on-steam-store-ign-news_videogames', | ||||
| @@ -167,6 +171,17 @@ class DailymotionIE(DailymotionBaseInfoExtractor): | ||||
|             player = self._parse_json(player_v5, video_id) | ||||
|             metadata = player['metadata'] | ||||
|  | ||||
|             if metadata.get('error', {}).get('type') == 'password_protected': | ||||
|                 password = self._downloader.params.get('videopassword') | ||||
|                 if password: | ||||
|                     r = int(metadata['id'][1:], 36) | ||||
|                     us64e = lambda x: base64.urlsafe_b64encode(x).decode().strip('=') | ||||
|                     t = ''.join(random.choice(string.ascii_letters) for i in range(10)) | ||||
|                     n = us64e(struct.pack('I', r)) | ||||
|                     i = us64e(hashlib.md5(('%s%d%s' % (password, r, t)).encode()).digest()) | ||||
|                     metadata = self._download_json( | ||||
|                         'http://www.dailymotion.com/player/metadata/video/p' + i + t + n, video_id) | ||||
|  | ||||
|             self._check_error(metadata) | ||||
|  | ||||
|             formats = [] | ||||
| @@ -302,8 +317,8 @@ class DailymotionIE(DailymotionBaseInfoExtractor): | ||||
|  | ||||
|     def _check_error(self, info): | ||||
|         error = info.get('error') | ||||
|         if info.get('error') is not None: | ||||
|             title = error['title'] | ||||
|         if error: | ||||
|             title = error.get('title') or error['message'] | ||||
|             # See https://developer.dailymotion.com/api#access-error | ||||
|             if error.get('code') == 'DM007': | ||||
|                 self.raise_geo_restricted(msg=title) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Remita Amine
					Remita Amine