[discovery] Fix auth request (closes #15542)

This commit is contained in:
Sergey M․ 2018-02-10 00:55:11 +07:00
parent ff873b5777
commit 9d5871fdff
No known key found for this signature in database
GPG key ID: 2C393E0F18A9236D

View file

@ -5,15 +5,16 @@ import re
import string import string
from .discoverygo import DiscoveryGoBaseIE from .discoverygo import DiscoveryGoBaseIE
from ..compat import compat_str
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
update_url_query, try_get,
) )
from ..compat import compat_HTTPError from ..compat import compat_HTTPError
class DiscoveryIE(DiscoveryGoBaseIE): class DiscoveryIE(DiscoveryGoBaseIE):
_VALID_URL = r'''(?x)https?://(?:www\.)?(?: _VALID_URL = r'''(?x)https?://(?:www\.)?(?P<site>
discovery| discovery|
investigationdiscovery| investigationdiscovery|
discoverylife| discoverylife|
@ -44,7 +45,7 @@ class DiscoveryIE(DiscoveryGoBaseIE):
_GEO_BYPASS = False _GEO_BYPASS = False
def _real_extract(self, url): def _real_extract(self, url):
path, display_id = re.match(self._VALID_URL, url).groups() site, path, display_id = re.match(self._VALID_URL, url).groups()
webpage = self._download_webpage(url, display_id) webpage = self._download_webpage(url, display_id)
react_data = self._parse_json(self._search_regex( react_data = self._parse_json(self._search_regex(
@ -55,14 +56,13 @@ class DiscoveryIE(DiscoveryGoBaseIE):
video_id = video['id'] video_id = video['id']
access_token = self._download_json( access_token = self._download_json(
'https://www.discovery.com/anonymous', display_id, query={ 'https://www.%s.com/anonymous' % site, display_id, query={
'authLink': update_url_query( 'authRel': 'authorization',
'https://login.discovery.com/v1/oauth2/authorize', { 'client_id': try_get(
'client_id': react_data['application']['apiClientId'], react_data, lambda x: x['application']['apiClientId'],
'redirect_uri': 'https://fusion.ddmcdn.com/app/mercury-sdk/180/redirectHandler.html', compat_str) or '3020a40c2356a645b4b4',
'response_type': 'anonymous', 'nonce': ''.join([random.choice(string.ascii_letters) for _ in range(32)]),
'state': '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']
try: try: