From 4d82163b41ba3fd9a69f1734d79dce9f6d89bca3 Mon Sep 17 00:00:00 2001 From: Christophe Benz Date: Tue, 13 Apr 2010 15:58:40 +0200 Subject: [PATCH] add video title command --- weboob/backends/youtube/backend.py | 4 +++ weboob/backends/youtube/browser.py | 15 +++++++++++- weboob/backends/youtube/pages/__init__.py | 21 ++++++++++++++++ weboob/backends/youtube/pages/video.py | 30 +++++++++++++++++++++++ weboob/capabilities/video.py | 6 ++--- weboob/frontends/videoob/application.py | 12 ++++++--- 6 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 weboob/backends/youtube/pages/__init__.py create mode 100644 weboob/backends/youtube/pages/video.py diff --git a/weboob/backends/youtube/backend.py b/weboob/backends/youtube/backend.py index 6b168c1b..60214c07 100644 --- a/weboob/backends/youtube/backend.py +++ b/weboob/backends/youtube/backend.py @@ -45,6 +45,10 @@ class YoutubeBackend(Backend, ICapVideoProvider): def iter_page_urls(self, mozaic_url): raise NotImplementedError() + @need_browser + def get_video_title(self, page_url): + return self.browser.get_video_title(page_url) + @need_browser def get_video_url(self, page_url): return self.browser.get_video_url(page_url) diff --git a/weboob/backends/youtube/browser.py b/weboob/backends/youtube/browser.py index 5a64ab1c..daa0018e 100644 --- a/weboob/backends/youtube/browser.py +++ b/weboob/backends/youtube/browser.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ -Copyright(C) 2009-2010 Christophe Benz +Copyright(C) 2010 Christophe Benz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,9 +21,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import re from weboob.tools.browser import Browser +from weboob.tools.parser import LxmlHtmlParser + +from .pages import VideoPage class YoutubeBrowser(Browser): regex = re.compile(r'&t=([^ ,&]*)') + + def __init__(self, *args, **kwargs): + kwargs['parser'] = LxmlHtmlParser + self.PAGES = {r'http://.*\.youtube\.com/watch\?v=(.+)': VideoPage} + Browser.__init__(self, *args, **kwargs) + + def get_video_title(self, page_url): + self.location(page_url) + return self.page.title + def get_video_url(self, page_url): result = self.openurl(page_url).read() for _signature in re.finditer(self.regex, result): diff --git a/weboob/backends/youtube/pages/__init__.py b/weboob/backends/youtube/pages/__init__.py new file mode 100644 index 00000000..7d739457 --- /dev/null +++ b/weboob/backends/youtube/pages/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Christophe Benz + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +""" + +from .video import VideoPage diff --git a/weboob/backends/youtube/pages/video.py b/weboob/backends/youtube/pages/video.py new file mode 100644 index 00000000..8d4c3fca --- /dev/null +++ b/weboob/backends/youtube/pages/video.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Christophe Benz + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +""" + +from weboob.tools.browser import BasePage + +class VideoPage(BasePage): + def loaded(self): + found = self.document.getroot().cssselect('meta[name=title]') + if found: + content = found[0].attrib['content'] + self.title = unicode(content).strip() + else: + self.title = None diff --git a/weboob/capabilities/video.py b/weboob/capabilities/video.py index df648364..401f3555 100644 --- a/weboob/capabilities/video.py +++ b/weboob/capabilities/video.py @@ -21,11 +21,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. from .cap import ICap class ICapVideoProvider(ICap): - #def can_handle_url(self, url): - #raise NotImplementedError() - def iter_page_urls(self, mozaic_url): raise NotImplementedError() + def get_video_title(self, page_url): + raise NotImplementedError() + def get_video_url(self, page_url): raise NotImplementedError() diff --git a/weboob/frontends/videoob/application.py b/weboob/frontends/videoob/application.py index d3ef2579..f595ed44 100644 --- a/weboob/frontends/videoob/application.py +++ b/weboob/frontends/videoob/application.py @@ -29,8 +29,12 @@ class Videoob(ConsoleApplication): self.weboob.load_backends(ICapVideoProvider) return self.process_command(*argv[1:]) - @ConsoleApplication.command('Get video URL from page URL') - def command_video_url(self, page_url): - self.weboob.load_backends(ICapVideoProvider) - for name, backend in self.weboob.iter_backends(): + @ConsoleApplication.command('Get video file URL from page URL') + def command_file_url(self, page_url): + for name, backend in self.weboob.iter_backends(ICapVideoProvider): print backend.get_video_url(page_url) + + @ConsoleApplication.command('Get video title from page URL') + def command_title(self, page_url): + for name, backend in self.weboob.iter_backends(ICapVideoProvider): + print backend.get_video_title(page_url)