From 9888db649ae32291c8193a82801438db6b973441 Mon Sep 17 00:00:00 2001 From: rzhxeo Date: Thu, 22 May 2014 09:13:28 +0200 Subject: [PATCH 1/3] [Generic] Fix access to removed function in python 3.4 --- youtube_dl/extractor/generic.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py index 38a357d3b..ce783bf16 100644 --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@ -308,9 +308,14 @@ class GenericIE(InfoExtractor): newheaders = dict((k,v) for k,v in req.headers.items() if k.lower() not in ("content-length", "content-type")) + try: + # This function was deprecated in python 3.3 and removed in 3.4 + origin_req_host = req.get_origin_req_host() + except AttributeError: + origin_req_host = req.origin_req_host return self.parent.open(compat_urllib_request.Request(req.get_full_url(), headers=newheaders, - origin_req_host=req.get_origin_req_host(), + origin_req_host=origin_req_host, unverifiable=True)) # Build our opener From d9f203835e22a35cd46b43c2b7f82e070121de4c Mon Sep 17 00:00:00 2001 From: rzhxeo Date: Thu, 22 May 2014 09:19:09 +0200 Subject: [PATCH 2/3] [Generic] Also try GET instead of HEAD request if server returns 404 --- youtube_dl/extractor/generic.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py index ce783bf16..f8d71fd2c 100644 --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@ -300,7 +300,7 @@ class GenericIE(InfoExtractor): class HTTPMethodFallback(compat_urllib_request.BaseHandler): """ - Fallback to GET if HEAD is not allowed (405 HTTP error) + Fallback to GET if HEAD is not allowed (405 or 404 (youtube.com) HTTP error) """ def http_error_405(self, req, fp, code, msg, headers): fp.read() @@ -318,6 +318,11 @@ class GenericIE(InfoExtractor): origin_req_host=origin_req_host, unverifiable=True)) + def http_error_404(self, req, fp, code, msg, headers): + # prevent infinite loop + if req.get_method() == "HEAD": + return self.http_error_405(req, fp, code, msg, headers) + # Build our opener opener = compat_urllib_request.OpenerDirector() for handler in [compat_urllib_request.HTTPHandler, compat_urllib_request.HTTPDefaultErrorHandler, From 3efe1da8d2eee480dcb8511242ce0ccdf60c5ec2 Mon Sep 17 00:00:00 2001 From: rzhxeo Date: Thu, 22 May 2014 09:20:17 +0200 Subject: [PATCH 3/3] [YoutubeUser] Simplify valid url regex --- youtube_dl/extractor/youtube.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 981ca62c0..9bca595e1 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -1577,7 +1577,7 @@ class YoutubeChannelIE(InfoExtractor): class YoutubeUserIE(InfoExtractor): IE_DESC = u'YouTube.com user videos (URL or "ytuser" keyword)' - _VALID_URL = r'(?:(?:(?:https?://)?(?:\w+\.)?youtube\.com/(?:user/)?(?!(?:attribution_link|watch|results)(?:$|[^a-z_A-Z0-9-])))|ytuser:)(?!feed/)([A-Za-z0-9_-]+)' + _VALID_URL = r'(?:(?:(?:https?://)?(?:\w+\.)?youtube\.com/user/)|ytuser:)([A-Za-z0-9_-]+)' _TEMPLATE_URL = 'https://gdata.youtube.com/feeds/api/users/%s' _GDATA_PAGE_SIZE = 50 _GDATA_URL = 'https://gdata.youtube.com/feeds/api/users/%s/uploads?max-results=%d&start-index=%d&alt=json'