import re
import sys
import zlib
-import urllib2
import email.utils
import json
except NameError:
compat_str = str
+try:
+ import urllib.request as compat_urllib_request
+except ImportError: # Python 2
+ import urllib2 as compat_urllib_request
+
+try:
+ import urllib.error as compat_urllib_error
+except ImportError: # Python 2
+ import urllib2 as compat_urllib_error
+
+try:
+ import urllib.parse as compat_urllib_parse
+except ImportError: # Python 2
+ import urllib2 as compat_urllib_parse
+
+try:
+ import http.cookiejar as compat_cookiejar
+except ImportError: # Python 2
+ import cookielib as compat_cookiejar
+
def preferredencoding():
"""Get preferred encoding.
def htmlentity_transform(matchobj):
- """Transforms an HTML entity to a Unicode character.
+ """Transforms an HTML entity to a character.
This function receives a match object and is intended to be used with
the re.sub() function.
if entity in htmlentitydefs.name2codepoint:
return unichr(htmlentitydefs.name2codepoint[entity])
- # Unicode character
- mobj = re.match(ur'(?u)#(x?\d+)', entity)
+ mobj = re.match(u'(?u)#(x?\\d+)', entity)
if mobj is not None:
numstr = mobj.group(1)
if numstr.startswith(u'x'):
numstr = u'0%s' % numstr
else:
base = 10
- return unichr(long(numstr, base))
+ return unichr(int(numstr, base))
# Unknown entity in name, return its literal representation
return (u'&%s;' % entity)
return (sys.stdout, filename)
stream = open(encodeFilename(filename), open_mode)
return (stream, filename)
- except (IOError, OSError), err:
+ except (IOError, OSError) as err:
# In case of error, try to remove win32 forbidden chars
- filename = re.sub(ur'[/<>:"\|\?\*]', u'#', filename)
+ filename = re.sub(u'[/<>:"\\|\\\\?\\*]', u'#', filename)
# An exception here should be caught in the caller
stream = open(encodeFilename(filename), open_mode)
def unescapeHTML(s):
"""
- @param s a string (of type unicode)
+ @param s a string
"""
assert type(s) == type(u'')
- result = re.sub(ur'(?u)&(.+?);', htmlentity_transform, s)
+ result = re.sub(u'(?u)&(.+?);', htmlentity_transform, s)
return result
def encodeFilename(s):
"""
- @param s The name of the file (of type unicode)
+ @param s The name of the file
"""
assert type(s) == type(u'')
FileDownloader.trouble
"""
-class YoutubeDLHandler(urllib2.HTTPHandler):
+class YoutubeDLHandler(compat_urllib_request.HTTPHandler):
"""Handler for HTTP requests and responses.
This class, when installed with an OpenerDirector, automatically adds
@staticmethod
def addinfourl_wrapper(stream, headers, url, code):
- if hasattr(urllib2.addinfourl, 'getcode'):
- return urllib2.addinfourl(stream, headers, url, code)
- ret = urllib2.addinfourl(stream, headers, url)
+ if hasattr(compat_urllib_request.addinfourl, 'getcode'):
+ return compat_urllib_request.addinfourl(stream, headers, url, code)
+ ret = compat_urllib_request.addinfourl(stream, headers, url)
ret.code = code
return ret