mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[discovery] extract Affiliate/Anonymous Auth Token from cookies(closes #14954)
This commit is contained in:
		| @@ -5,7 +5,10 @@ import re | ||||
| import string | ||||
|  | ||||
| from .discoverygo import DiscoveryGoBaseIE | ||||
| from ..compat import compat_str | ||||
| from ..compat import ( | ||||
|     compat_str, | ||||
|     compat_urllib_parse_unquote, | ||||
| ) | ||||
| from ..utils import ( | ||||
|     ExtractorError, | ||||
|     try_get, | ||||
| @@ -55,15 +58,27 @@ class DiscoveryIE(DiscoveryGoBaseIE): | ||||
|         video = next(cb for cb in content_blocks if cb.get('type') == 'video')['content']['items'][0] | ||||
|         video_id = video['id'] | ||||
|  | ||||
|         access_token = self._download_json( | ||||
|             'https://www.%s.com/anonymous' % site, display_id, query={ | ||||
|                 'authRel': 'authorization', | ||||
|                 'client_id': try_get( | ||||
|                     react_data, lambda x: x['application']['apiClientId'], | ||||
|                     compat_str) or '3020a40c2356a645b4b4', | ||||
|                 'nonce': ''.join([random.choice(string.ascii_letters) for _ in range(32)]), | ||||
|                 'redirectUri': 'https://fusion.ddmcdn.com/app/mercury-sdk/180/redirectHandler.html?https://www.%s.com' % site, | ||||
|             })['access_token'] | ||||
|         access_token = None | ||||
|         cookies = self._get_cookies(url) | ||||
|  | ||||
|         # prefer Affiliate Auth Token over Anonymous Auth Token | ||||
|         auth_storage_cookie = cookies.get('eosAf') or cookies.get('eosAn') | ||||
|         if auth_storage_cookie and auth_storage_cookie.value: | ||||
|             auth_storage = self._parse_json(compat_urllib_parse_unquote( | ||||
|                 compat_urllib_parse_unquote(auth_storage_cookie.value)), | ||||
|                 video_id, fatal=False) or {} | ||||
|             access_token = auth_storage.get('a') or auth_storage.get('access_token') | ||||
|  | ||||
|         if not access_token: | ||||
|             access_token = self._download_json( | ||||
|                 'https://www.%s.com/anonymous' % site, display_id, query={ | ||||
|                     'authRel': 'authorization', | ||||
|                     'client_id': try_get( | ||||
|                         react_data, lambda x: x['application']['apiClientId'], | ||||
|                         compat_str) or '3020a40c2356a645b4b4', | ||||
|                     'nonce': ''.join([random.choice(string.ascii_letters) for _ in range(32)]), | ||||
|                     'redirectUri': 'https://fusion.ddmcdn.com/app/mercury-sdk/180/redirectHandler.html?https://www.%s.com' % site, | ||||
|                 })['access_token'] | ||||
|  | ||||
|         try: | ||||
|             stream = self._download_json( | ||||
| @@ -72,7 +87,7 @@ class DiscoveryIE(DiscoveryGoBaseIE): | ||||
|                     'Authorization': 'Bearer ' + access_token, | ||||
|                 }) | ||||
|         except ExtractorError as e: | ||||
|             if isinstance(e.cause, compat_HTTPError) and e.cause.code == 403: | ||||
|             if isinstance(e.cause, compat_HTTPError) and e.cause.code in (401, 403): | ||||
|                 e_description = self._parse_json( | ||||
|                     e.cause.read().decode(), display_id)['description'] | ||||
|                 if 'resource not available for country' in e_description: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Remita Amine
					Remita Amine