[YouTube] Improve error check for n-sig processing
parent
66e58dccc2
commit
573b13410e
|
@ -1500,7 +1500,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
return lambda s: jsi.extract_function_from_code(*func_code)([s])
|
return lambda s: jsi.extract_function_from_code(*func_code)([s])
|
||||||
|
|
||||||
def _n_descramble(self, n_param, player_url, video_id):
|
def _n_descramble(self, n_param, player_url, video_id):
|
||||||
"""Compute the response to YT's "n" parameter challenge
|
"""Compute the response to YT's "n" parameter challenge,
|
||||||
|
or None
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
n_param -- challenge string that is the value of the
|
n_param -- challenge string that is the value of the
|
||||||
|
@ -1518,7 +1519,10 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
if player_id not in self._player_cache:
|
if player_id not in self._player_cache:
|
||||||
self._player_cache[player_id] = self._extract_n_function(video_id, player_url)
|
self._player_cache[player_id] = self._extract_n_function(video_id, player_url)
|
||||||
func = self._player_cache[player_id]
|
func = self._player_cache[player_id]
|
||||||
self._player_cache[sig_id] = func(n_param)
|
ret = func(n_param)
|
||||||
|
if ret.startswith('enhanced_except_'):
|
||||||
|
raise ExtractorError('Unhandled exception in decode')
|
||||||
|
self._player_cache[sig_id] = ret
|
||||||
if self._downloader.params.get('verbose', False):
|
if self._downloader.params.get('verbose', False):
|
||||||
self._downloader.to_screen('[debug] [%s] %s' % (self.IE_NAME, 'Decrypted nsig {0} => {1}'.format(n_param, self._player_cache[sig_id])))
|
self._downloader.to_screen('[debug] [%s] %s' % (self.IE_NAME, 'Decrypted nsig {0} => {1}'.format(n_param, self._player_cache[sig_id])))
|
||||||
return self._player_cache[sig_id]
|
return self._player_cache[sig_id]
|
||||||
|
@ -1539,10 +1543,12 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
continue
|
continue
|
||||||
n_param = n_param[-1]
|
n_param = n_param[-1]
|
||||||
n_response = self._n_descramble(n_param, player_url, video_id)
|
n_response = self._n_descramble(n_param, player_url, video_id)
|
||||||
if n_response:
|
if n_response is None:
|
||||||
qs['n'] = [n_response]
|
# give up if descrambling failed
|
||||||
fmt['url'] = compat_urlparse.urlunparse(
|
break
|
||||||
parsed_fmt_url._replace(query=compat_urllib_parse_urlencode(qs, True)))
|
qs['n'] = [n_response]
|
||||||
|
fmt['url'] = compat_urlparse.urlunparse(
|
||||||
|
parsed_fmt_url._replace(query=compat_urllib_parse_urlencode(qs, True)))
|
||||||
|
|
||||||
def _mark_watched(self, video_id, player_response):
|
def _mark_watched(self, video_id, player_response):
|
||||||
playback_url = url_or_none(try_get(
|
playback_url = url_or_none(try_get(
|
||||||
|
|
Loading…
Reference in New Issue