From 89218af7c13423c75c963969bcc704498be2bb42 Mon Sep 17 00:00:00 2001 From: Christophe Benz Date: Mon, 12 Apr 2010 16:31:18 +0200 Subject: [PATCH] new frontend videoob and new backend for youtube --- scripts/videoob | 26 +++++++++++++ weboob/backends/youtube/__init__.py | 21 +++++++++++ weboob/backends/youtube/backend.py | 50 +++++++++++++++++++++++++ weboob/backends/youtube/browser.py | 37 ++++++++++++++++++ weboob/capabilities/video.py | 31 +++++++++++++++ weboob/frontends/videoob/__init__.py | 21 +++++++++++ weboob/frontends/videoob/application.py | 36 ++++++++++++++++++ 7 files changed, 222 insertions(+) create mode 100755 scripts/videoob create mode 100644 weboob/backends/youtube/__init__.py create mode 100644 weboob/backends/youtube/backend.py create mode 100644 weboob/backends/youtube/browser.py create mode 100644 weboob/capabilities/video.py create mode 100644 weboob/frontends/videoob/__init__.py create mode 100644 weboob/frontends/videoob/application.py diff --git a/scripts/videoob b/scripts/videoob new file mode 100755 index 0000000000..5526060c6a --- /dev/null +++ b/scripts/videoob @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# vim: ft=python et softtabstop=4 cinoptions=4 shiftwidth=4 ts=4 ai + +""" +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.frontends.videoob import Videoob + +if __name__ == '__main__': + Videoob.run() diff --git a/weboob/backends/youtube/__init__.py b/weboob/backends/youtube/__init__.py new file mode 100644 index 0000000000..cdaca2fd58 --- /dev/null +++ b/weboob/backends/youtube/__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 .backend import YoutubeBackend diff --git a/weboob/backends/youtube/backend.py b/weboob/backends/youtube/backend.py new file mode 100644 index 0000000000..6b168c1b14 --- /dev/null +++ b/weboob/backends/youtube/backend.py @@ -0,0 +1,50 @@ +# -*- 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.backend import Backend +from weboob.capabilities.video import ICapVideoProvider + +from .browser import YoutubeBrowser + +class YoutubeBackend(Backend, ICapVideoProvider): + NAME = 'youtube' + MAINTAINER = 'Christophe Benz' + EMAIL = 'christophe.benz@gmail.com' + VERSION = '0.1' + DESCRIPTION = 'Youtube videos website' + LICENSE = 'GPLv3' + + CONFIG = {} + browser = None + + def need_browser(func): + def inner(self, *args, **kwargs): + if not self.browser: + self.browser = YoutubeBrowser() + return func(self, *args, **kwargs) + return inner + + @need_browser + def iter_page_urls(self, mozaic_url): + raise NotImplementedError() + + @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 new file mode 100644 index 0000000000..5a64ab1c53 --- /dev/null +++ b/weboob/backends/youtube/browser.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2009-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. + +""" + +import re + +from weboob.tools.browser import Browser + +class YoutubeBrowser(Browser): + regex = re.compile(r'&t=([^ ,&]*)') + def get_video_url(self, page_url): + result = self.openurl(page_url).read() + for _signature in re.finditer(self.regex, result): + signature = _signature.group(1) + break + else: + return None + m = re.match(r'http://.*\.youtube\.com/watch\?v=(.+)', page_url) + video_id = m.group(1) + url = 'http://www.youtube.com/get_video?video_id=%s&t=%s&fmt=18' % (video_id, signature) + return url diff --git a/weboob/capabilities/video.py b/weboob/capabilities/video.py new file mode 100644 index 0000000000..df64836486 --- /dev/null +++ b/weboob/capabilities/video.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon, 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 .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_url(self, page_url): + raise NotImplementedError() diff --git a/weboob/frontends/videoob/__init__.py b/weboob/frontends/videoob/__init__.py new file mode 100644 index 0000000000..4849958e8b --- /dev/null +++ b/weboob/frontends/videoob/__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 .application import Videoob diff --git a/weboob/frontends/videoob/application.py b/weboob/frontends/videoob/application.py new file mode 100644 index 0000000000..d3ef2579f6 --- /dev/null +++ b/weboob/frontends/videoob/application.py @@ -0,0 +1,36 @@ +# -*- 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.capabilities.video import ICapVideoProvider +from weboob.tools.application import ConsoleApplication + +class Videoob(ConsoleApplication): + APPNAME = 'videoob' + CONFIG = {} + + def main(self, argv): + 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(): + print backend.get_video_url(page_url) -- GitLab