[dropbox] Fix title encoding on Python 2

pull/3307/head
Philipp Hagemeister 2014-07-21 13:55:47 +02:00
parent 06c155420f
commit f1f725c6a0
2 changed files with 16 additions and 9 deletions

View File

@ -5,7 +5,7 @@ import os.path
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import compat_urllib_parse from ..utils import compat_urllib_parse_unquote
class DropboxIE(InfoExtractor): class DropboxIE(InfoExtractor):
@ -23,7 +23,7 @@ class DropboxIE(InfoExtractor):
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) mobj = re.match(self._VALID_URL, url)
video_id = mobj.group('id') video_id = mobj.group('id')
fn = compat_urllib_parse.unquote(mobj.group('title')) fn = compat_urllib_parse_unquote(mobj.group('title'))
title = os.path.splitext(fn)[0] title = os.path.splitext(fn)[0]
video_url = url + '?dl=1' video_url = url + '?dl=1'

View File

@ -91,11 +91,9 @@ except ImportError:
compat_subprocess_get_DEVNULL = lambda: open(os.path.devnull, 'w') compat_subprocess_get_DEVNULL = lambda: open(os.path.devnull, 'w')
try: try:
from urllib.parse import parse_qs as compat_parse_qs from urllib.parse import unquote as compat_urllib_parse_unquote
except ImportError: # Python 2 except ImportError:
# HACK: The following is the correct parse_qs implementation from cpython 3's stdlib. def compat_urllib_parse_unquote(string, encoding='utf-8', errors='replace'):
# Python 2's version is apparently totally broken
def _unquote(string, encoding='utf-8', errors='replace'):
if string == '': if string == '':
return string return string
res = string.split('%') res = string.split('%')
@ -130,6 +128,13 @@ except ImportError: # Python 2
string += pct_sequence.decode(encoding, errors) string += pct_sequence.decode(encoding, errors)
return string return string
try:
from urllib.parse import parse_qs as compat_parse_qs
except ImportError: # Python 2
# HACK: The following is the correct parse_qs implementation from cpython 3's stdlib.
# Python 2's version is apparently totally broken
def _parse_qsl(qs, keep_blank_values=False, strict_parsing=False, def _parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
encoding='utf-8', errors='replace'): encoding='utf-8', errors='replace'):
qs, _coerce_result = qs, unicode qs, _coerce_result = qs, unicode
@ -149,10 +154,12 @@ except ImportError: # Python 2
continue continue
if len(nv[1]) or keep_blank_values: if len(nv[1]) or keep_blank_values:
name = nv[0].replace('+', ' ') name = nv[0].replace('+', ' ')
name = _unquote(name, encoding=encoding, errors=errors) name = compat_urllib_parse_unquote(
name, encoding=encoding, errors=errors)
name = _coerce_result(name) name = _coerce_result(name)
value = nv[1].replace('+', ' ') value = nv[1].replace('+', ' ')
value = _unquote(value, encoding=encoding, errors=errors) value = compat_urllib_parse_unquote(
value, encoding=encoding, errors=errors)
value = _coerce_result(value) value = _coerce_result(value)
r.append((name, value)) r.append((name, value))
return r return r