mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-14 15:22:35 +00:00
[extractor/crunchyroll:beta] Use anonymous access (#4704)
Closes #4692 Authored by: tejing1
This commit is contained in:
parent
82ea226c61
commit
459262ac97
1 changed files with 9 additions and 27 deletions
|
@ -720,15 +720,20 @@ class CrunchyrollBetaBaseIE(CrunchyrollBaseIE):
|
||||||
|
|
||||||
def _get_params(self, lang):
|
def _get_params(self, lang):
|
||||||
if not CrunchyrollBetaBaseIE.params:
|
if not CrunchyrollBetaBaseIE.params:
|
||||||
|
if self._get_cookies(f'https://beta.crunchyroll.com/{lang}').get('etp_rt'):
|
||||||
|
grant_type, key = 'etp_rt_cookie', 'accountAuthClientId'
|
||||||
|
else:
|
||||||
|
grant_type, key = 'client_id', 'anonClientId'
|
||||||
|
|
||||||
initial_state, app_config = self._get_beta_embedded_json(self._download_webpage(
|
initial_state, app_config = self._get_beta_embedded_json(self._download_webpage(
|
||||||
f'https://beta.crunchyroll.com/{lang}', None, note='Retrieving main page'), None)
|
f'https://beta.crunchyroll.com/{lang}', None, note='Retrieving main page'), None)
|
||||||
api_domain = app_config['cxApiParams']['apiDomain']
|
api_domain = app_config['cxApiParams']['apiDomain']
|
||||||
basic_token = str(base64.b64encode(('%s:' % app_config['cxApiParams']['accountAuthClientId']).encode('ascii')), 'ascii')
|
|
||||||
auth_response = self._download_json(
|
auth_response = self._download_json(
|
||||||
f'{api_domain}/auth/v1/token', None, note='Authenticating with cookie',
|
f'{api_domain}/auth/v1/token', None, note=f'Authenticating with grant_type={grant_type}',
|
||||||
headers={
|
headers={
|
||||||
'Authorization': 'Basic ' + basic_token
|
'Authorization': 'Basic ' + str(base64.b64encode(('%s:' % app_config['cxApiParams'][key]).encode('ascii')), 'ascii')
|
||||||
}, data='grant_type=etp_rt_cookie'.encode('ascii'))
|
}, data=f'grant_type={grant_type}'.encode('ascii'))
|
||||||
policy_response = self._download_json(
|
policy_response = self._download_json(
|
||||||
f'{api_domain}/index/v2', None, note='Retrieving signed policy',
|
f'{api_domain}/index/v2', None, note='Retrieving signed policy',
|
||||||
headers={
|
headers={
|
||||||
|
@ -747,21 +752,6 @@ class CrunchyrollBetaBaseIE(CrunchyrollBaseIE):
|
||||||
CrunchyrollBetaBaseIE.params = (api_domain, bucket, params)
|
CrunchyrollBetaBaseIE.params = (api_domain, bucket, params)
|
||||||
return CrunchyrollBetaBaseIE.params
|
return CrunchyrollBetaBaseIE.params
|
||||||
|
|
||||||
def _redirect_from_beta(self, url, lang, internal_id, display_id, is_episode, iekey):
|
|
||||||
initial_state, app_config = self._get_beta_embedded_json(self._download_webpage(url, display_id), display_id)
|
|
||||||
content_data = initial_state['content']['byId'][internal_id]
|
|
||||||
if is_episode:
|
|
||||||
video_id = content_data['external_id'].split('.')[1]
|
|
||||||
series_id = content_data['episode_metadata']['series_slug_title']
|
|
||||||
else:
|
|
||||||
series_id = content_data['slug_title']
|
|
||||||
series_id = re.sub(r'-{2,}', '-', series_id)
|
|
||||||
url = f'https://www.crunchyroll.com/{lang}{series_id}'
|
|
||||||
if is_episode:
|
|
||||||
url = url + f'/{display_id}-{video_id}'
|
|
||||||
self.to_screen(f'{display_id}: Not logged in. Redirecting to non-beta site - {url}')
|
|
||||||
return self.url_result(url, iekey, display_id)
|
|
||||||
|
|
||||||
|
|
||||||
class CrunchyrollBetaIE(CrunchyrollBetaBaseIE):
|
class CrunchyrollBetaIE(CrunchyrollBetaBaseIE):
|
||||||
IE_NAME = 'crunchyroll:beta'
|
IE_NAME = 'crunchyroll:beta'
|
||||||
|
@ -800,10 +790,6 @@ class CrunchyrollBetaIE(CrunchyrollBetaBaseIE):
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
lang, internal_id, display_id = self._match_valid_url(url).group('lang', 'id', 'display_id')
|
lang, internal_id, display_id = self._match_valid_url(url).group('lang', 'id', 'display_id')
|
||||||
|
|
||||||
if not self._get_cookies(url).get('etp_rt'):
|
|
||||||
return self._redirect_from_beta(url, lang, internal_id, display_id, True, CrunchyrollIE.ie_key())
|
|
||||||
|
|
||||||
api_domain, bucket, params = self._get_params(lang)
|
api_domain, bucket, params = self._get_params(lang)
|
||||||
|
|
||||||
episode_response = self._download_json(
|
episode_response = self._download_json(
|
||||||
|
@ -897,10 +883,6 @@ class CrunchyrollBetaShowIE(CrunchyrollBetaBaseIE):
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
lang, internal_id, display_id = self._match_valid_url(url).group('lang', 'id', 'display_id')
|
lang, internal_id, display_id = self._match_valid_url(url).group('lang', 'id', 'display_id')
|
||||||
|
|
||||||
if not self._get_cookies(url).get('etp_rt'):
|
|
||||||
return self._redirect_from_beta(url, lang, internal_id, display_id, False, CrunchyrollShowPlaylistIE.ie_key())
|
|
||||||
|
|
||||||
api_domain, bucket, params = self._get_params(lang)
|
api_domain, bucket, params = self._get_params(lang)
|
||||||
|
|
||||||
series_response = self._download_json(
|
series_response = self._download_json(
|
||||||
|
|
Loading…
Reference in a new issue