diff options
author | Filippo Valsorda <filippo.valsorda@gmail.com> | 2012-03-24 01:17:36 +0100 |
---|---|---|
committer | Filippo Valsorda <filippo.valsorda@gmail.com> | 2012-03-24 01:17:36 +0100 |
commit | 071940680fc19be26e068c4c72d508ca252c1031 (patch) | |
tree | 83f48a2a9b3197895026c8198eded35b099e9a56 | |
parent | 69d3b2d8249e677c40d529e017cb765f50ba3fa0 (diff) |
Always extract original URL from next_url (#318)
-rwxr-xr-x | youtube-dl | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/youtube-dl b/youtube-dl index d8b33e52c..c7a116d9d 100755 --- a/youtube-dl +++ b/youtube-dl @@ -1171,12 +1171,11 @@ class InfoExtractor(object): class YoutubeIE(InfoExtractor): """Information extractor for youtube.com.""" - _PREFIX = r'(?:https?://)?(?:youtu\.be/|(?:\w+\.)?youtube(?:-nocookie)?\.com/)' - _VALID_URL = r'^('+_PREFIX+r'(?!view_play_list|my_playlists|artist|playlist)(?:(?:(?:v|embed|e)/)|(?:(?:watch(?:_popup)?(?:\.php)?)?(?:\?|#!?)(?:.+&)?v=))?)?([0-9A-Za-z_-]+)(?(1).+)?$' - _VALID_URL_WITH_AGE = r'^('+_PREFIX+')verify_age\?next_url=([^&]+)(?:.+)?$' + _VALID_URL = r'^((?:https?://)?(?:youtu\.be/|(?:\w+\.)?youtube(?:-nocookie)?\.com/)(?!view_play_list|my_playlists|artist|playlist)(?:(?:(?:v|embed|e)/)|(?:(?:watch(?:_popup)?(?:\.php)?)?(?:\?|#!?)(?:.+&)?v=))?)?([0-9A-Za-z_-]+)(?(1).+)?$' _LANG_URL = r'http://www.youtube.com/?hl=en&persist_hl=1&gl=US&persist_gl=1&opt_out_ackd=1' _LOGIN_URL = 'https://www.youtube.com/signup?next=/&gl=US&hl=en' _AGE_URL = 'http://www.youtube.com/verify_age?next_url=/&gl=US&hl=en' + _NEXT_URL_RE = r'[\?&]next_url=([^&]+)' _NETRC_MACHINE = 'youtube' # Listed in order of quality _available_formats = ['38', '37', '22', '45', '35', '44', '34', '18', '43', '6', '5', '17', '13'] @@ -1337,13 +1336,10 @@ class YoutubeIE(InfoExtractor): return def _real_extract(self, url): - # Extract original video URL from URL with age verification, using next_url parameter - mobj = re.match(self._VALID_URL_WITH_AGE, url) + # Extract original video URL from URL with redirection, like age verification, using next_url parameter + mobj = re.search(self._NEXT_URL_RE, url) if mobj: - urldecode = lambda x: re.sub(r'%([0-9a-hA-H][0-9a-hA-H])', lambda m: chr(int(m.group(1), 16)), x) - # Keep original domain. We can probably change to www.youtube.com, but it should not hurt so keep it. - # We just make sure we do not have double //, in URL, so we strip starting slash in next_url. - url = mobj.group(1) + re.sub(r'^/', '', urldecode(mobj.group(2))) + url = 'http://www.youtube.com/' + urllib.unquote(mobj.group(1)).lstrip('/') # Extract video id from URL mobj = re.match(self._VALID_URL, url) |