forked from minhngoc25a/yt-dlc
[youtube] Remove static signatures
The always fail by now. Instead, use only automatic signature extraction
This commit is contained in:
parent
f4d66a99cf
commit
b3a8878080
|
@ -879,58 +879,14 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
|
||||||
if self._downloader.params.get('youtube_print_sig_code'):
|
if self._downloader.params.get('youtube_print_sig_code'):
|
||||||
self._print_sig_code(func, len(s))
|
self._print_sig_code(func, len(s))
|
||||||
return func(s)
|
return func(s)
|
||||||
except Exception:
|
except Exception as e:
|
||||||
tb = traceback.format_exc()
|
tb = traceback.format_exc()
|
||||||
self._downloader.report_warning(
|
raise ExtractorError(
|
||||||
u'Automatic signature extraction failed: ' + tb)
|
u'Automatic signature extraction failed: ' + tb, cause=e)
|
||||||
|
|
||||||
self._downloader.report_warning(
|
|
||||||
u'Warning: Falling back to static signature algorithm')
|
|
||||||
|
|
||||||
return self._static_decrypt_signature(
|
return self._static_decrypt_signature(
|
||||||
s, video_id, player_url, age_gate)
|
s, video_id, player_url, age_gate)
|
||||||
|
|
||||||
def _static_decrypt_signature(self, s, video_id, player_url, age_gate):
|
|
||||||
if age_gate:
|
|
||||||
# The videos with age protection use another player, so the
|
|
||||||
# algorithms can be different.
|
|
||||||
if len(s) == 86:
|
|
||||||
return s[2:63] + s[82] + s[64:82] + s[63]
|
|
||||||
|
|
||||||
if len(s) == 93:
|
|
||||||
return s[86:29:-1] + s[88] + s[28:5:-1]
|
|
||||||
elif len(s) == 92:
|
|
||||||
return s[25] + s[3:25] + s[0] + s[26:42] + s[79] + s[43:79] + s[91] + s[80:83]
|
|
||||||
elif len(s) == 91:
|
|
||||||
return s[84:27:-1] + s[86] + s[26:5:-1]
|
|
||||||
elif len(s) == 90:
|
|
||||||
return s[25] + s[3:25] + s[2] + s[26:40] + s[77] + s[41:77] + s[89] + s[78:81]
|
|
||||||
elif len(s) == 89:
|
|
||||||
return s[84:78:-1] + s[87] + s[77:60:-1] + s[0] + s[59:3:-1]
|
|
||||||
elif len(s) == 88:
|
|
||||||
return s[7:28] + s[87] + s[29:45] + s[55] + s[46:55] + s[2] + s[56:87] + s[28]
|
|
||||||
elif len(s) == 87:
|
|
||||||
return s[6:27] + s[4] + s[28:39] + s[27] + s[40:59] + s[2] + s[60:]
|
|
||||||
elif len(s) == 86:
|
|
||||||
return s[80:72:-1] + s[16] + s[71:39:-1] + s[72] + s[38:16:-1] + s[82] + s[15::-1]
|
|
||||||
elif len(s) == 85:
|
|
||||||
return s[3:11] + s[0] + s[12:55] + s[84] + s[56:84]
|
|
||||||
elif len(s) == 84:
|
|
||||||
return s[78:70:-1] + s[14] + s[69:37:-1] + s[70] + s[36:14:-1] + s[80] + s[:14][::-1]
|
|
||||||
elif len(s) == 83:
|
|
||||||
return s[80:63:-1] + s[0] + s[62:0:-1] + s[63]
|
|
||||||
elif len(s) == 82:
|
|
||||||
return s[80:37:-1] + s[7] + s[36:7:-1] + s[0] + s[6:0:-1] + s[37]
|
|
||||||
elif len(s) == 81:
|
|
||||||
return s[56] + s[79:56:-1] + s[41] + s[55:41:-1] + s[80] + s[40:34:-1] + s[0] + s[33:29:-1] + s[34] + s[28:9:-1] + s[29] + s[8:0:-1] + s[9]
|
|
||||||
elif len(s) == 80:
|
|
||||||
return s[1:19] + s[0] + s[20:68] + s[19] + s[69:80]
|
|
||||||
elif len(s) == 79:
|
|
||||||
return s[54] + s[77:54:-1] + s[39] + s[53:39:-1] + s[78] + s[38:34:-1] + s[0] + s[33:29:-1] + s[34] + s[28:9:-1] + s[29] + s[8:0:-1] + s[9]
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise ExtractorError(u'Unable to decrypt signature, key length %d not supported; retrying might work' % (len(s)))
|
|
||||||
|
|
||||||
def _get_available_subtitles(self, video_id, webpage):
|
def _get_available_subtitles(self, video_id, webpage):
|
||||||
try:
|
try:
|
||||||
sub_list = self._download_webpage(
|
sub_list = self._download_webpage(
|
||||||
|
|
Loading…
Reference in New Issue