projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[utils] Recognize more patterns in strip_jsonp()
[youtube-dl]
/
youtube_dl
/
utils.py
diff --git
a/youtube_dl/utils.py
b/youtube_dl/utils.py
index 25bd228ab159d345d878c00191bfc7f05bd5e227..6c84bfe0ffc5667d53a88fbae3ce76e76e36d909 100644
(file)
--- a/
youtube_dl/utils.py
+++ b/
youtube_dl/utils.py
@@
-2098,7
+2098,7
@@
def update_Request(req, url=None, data=None, headers={}, query={}):
return new_req
return new_req
-def
try_multipart_encode
(data, boundary):
+def
_multipart_encode_impl
(data, boundary):
content_type = 'multipart/form-data; boundary=%s' % boundary
out = b''
content_type = 'multipart/form-data; boundary=%s' % boundary
out = b''
@@
-2110,7
+2110,7
@@
def try_multipart_encode(data, boundary):
v = v.encode('utf-8')
# RFC 2047 requires non-ASCII field names to be encoded, while RFC 7578
# suggests sending UTF-8 directly. Firefox sends UTF-8, too
v = v.encode('utf-8')
# RFC 2047 requires non-ASCII field names to be encoded, while RFC 7578
# suggests sending UTF-8 directly. Firefox sends UTF-8, too
- content = b'Content-Disposition: form-data; name="
%s"\r\n\r\n' % k
+ v + b'\r\n'
+ content = b'Content-Disposition: form-data; name="
' + k + b'"\r\n\r\n'
+ v + b'\r\n'
if boundary.encode('ascii') in content:
raise ValueError('Boundary overlaps with data')
out += content
if boundary.encode('ascii') in content:
raise ValueError('Boundary overlaps with data')
out += content
@@
-2140,7
+2140,7
@@
def multipart_encode(data, boundary=None):
boundary = '---------------' + str(random.randrange(0x0fffffff, 0xffffffff))
try:
boundary = '---------------' + str(random.randrange(0x0fffffff, 0xffffffff))
try:
- out, content_type =
try_multipart_encode
(data, boundary)
+ out, content_type =
_multipart_encode_impl
(data, boundary)
break
except ValueError:
if has_specified_boundary:
break
except ValueError:
if has_specified_boundary:
@@
-2211,7
+2211,12
@@
def parse_age_limit(s):
def strip_jsonp(code):
return re.sub(
def strip_jsonp(code):
return re.sub(
- r'(?s)^[a-zA-Z0-9_.$]+\s*\(\s*(.*)\);?\s*?(?://[^\n]*)*$', r'\1', code)
+ r'''(?sx)^
+ (?:window\.)?(?P<func_name>[a-zA-Z0-9_.$]+)
+ (?:\s*&&\s*(?P=func_name))?
+ \s*\(\s*(?P<callback_data>.*)\);?
+ \s*?(?://[^\n]*)*$''',
+ r'\g<callback_data>', code)
def js_to_json(code):
def js_to_json(code):
@@
-2360,11
+2365,11
@@
def parse_codecs(codecs_str):
if codec in ('avc1', 'avc2', 'avc3', 'avc4', 'vp9', 'vp8', 'hev1', 'hev2', 'h263', 'h264', 'mp4v'):
if not vcodec:
vcodec = full_codec
if codec in ('avc1', 'avc2', 'avc3', 'avc4', 'vp9', 'vp8', 'hev1', 'hev2', 'h263', 'h264', 'mp4v'):
if not vcodec:
vcodec = full_codec
- elif codec in ('mp4a', 'opus', 'vorbis', 'mp3', 'aac', 'ac-3'):
+ elif codec in ('mp4a', 'opus', 'vorbis', 'mp3', 'aac', 'ac-3'
, 'ec-3', 'eac3', 'dtsc', 'dtse', 'dtsh', 'dtsl'
):
if not acodec:
acodec = full_codec
else:
if not acodec:
acodec = full_codec
else:
- write_string('WARNING: Unknown codec %s' % full_codec, sys.stderr)
+ write_string('WARNING: Unknown codec %s
\n
' % full_codec, sys.stderr)
if not vcodec and not acodec:
if len(splited_codecs) == 2:
return {
if not vcodec and not acodec:
if len(splited_codecs) == 2:
return {