From 5e90c1f47cfefe838b9c60752f74a1374e8567be Mon Sep 17 00:00:00 2001 From: Laurent Bachelier Date: Sun, 1 May 2011 14:37:15 +0200 Subject: [PATCH] Support more YouTube URLs The regular expression is also more strict, yet accepts the youtu.be short URLs and user page URLs. --- weboob/backends/youtube/backend.py | 2 +- weboob/backends/youtube/test.py | 1 + weboob/backends/youtube/video.py | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/weboob/backends/youtube/backend.py b/weboob/backends/youtube/backend.py index 337dc2a4..4f5359cf 100644 --- a/weboob/backends/youtube/backend.py +++ b/weboob/backends/youtube/backend.py @@ -45,7 +45,7 @@ class YoutubeBackend(BaseBackend, ICapVideo): LICENSE = 'AGPLv3+' BROWSER = YoutubeBrowser - URL_RE = re.compile(r'https?://.*youtube.com/watch\?v=(.*)') + URL_RE = re.compile(r'^https?://(?:\w*\.?youtube\.com/watch\?v=|youtu\.be\/|\w*\.?youtube\.com\/user\/\w+#p\/u\/\d+\/)(.*)$') AVAILABLE_FORMATS = [38, 37, 22, 45, 35, 34, 43, 18, 6, 5, 17, 13] FORMAT_EXTENSIONS = { 13: '3gp', diff --git a/weboob/backends/youtube/test.py b/weboob/backends/youtube/test.py index 5fa40609..8233c2f0 100644 --- a/weboob/backends/youtube/test.py +++ b/weboob/backends/youtube/test.py @@ -29,4 +29,5 @@ class YoutubeTest(BackendTest): v = l[0] self.backend.fillobj(v, ('url',)) self.assertTrue(v.url and v.url.startswith('http://'), 'URL for video "%s" not found: %s' % (v.id, v.url)) + assert self.backend.get_video(v.shorturl) self.backend.browser.openurl(v.url) diff --git a/weboob/backends/youtube/video.py b/weboob/backends/youtube/video.py index 7d118f1d..d3b9f8c2 100644 --- a/weboob/backends/youtube/video.py +++ b/weboob/backends/youtube/video.py @@ -28,3 +28,8 @@ class YoutubeVideo(BaseVideo): @classmethod def id2url(cls, _id): return 'http://www.youtube.com/watch?v=%s' % _id + + def _get_shorturl(self): + return 'http://youtu.be/%s' % self.id + + shorturl = property(_get_shorturl)