diff --git a/weboob/backends/youporn/__init__.py b/weboob/backends/youporn/__init__.py new file mode 100644 index 00000000..9ffb6a5e --- /dev/null +++ b/weboob/backends/youporn/__init__.py @@ -0,0 +1 @@ +from .backend import YoupornBackend diff --git a/weboob/backends/youporn/backend.py b/weboob/backends/youporn/backend.py new file mode 100644 index 00000000..d0b31eec --- /dev/null +++ b/weboob/backends/youporn/backend.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon + +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 YoupornBrowser + +class YoupornBackend(Backend, ICapVideoProvider): + NAME = 'youporn' + MAINTAINER = 'Romain Bignon' + EMAIL = 'romain@peerfuse.org' + VERSION = '0.1' + DESCRIPTION = 'Youporn videos website' + LICENSE = 'GPLv3' + + CONFIG = {} + _browser = None + + def __getattr__(self, name): + if name == 'browser': + if not self._browser: + self._browser = YoupornBrowser() + return self._browser + raise AttributeError, name + + def need_url(func): + def inner(self, *args, **kwargs): + url = args[0] + if u'youporn.com' not in url: + return None + return func(self, *args, **kwargs) + return inner + + @need_url + def iter_page_urls(self, mozaic_url): + raise NotImplementedError() + + @need_url + def get_video_title(self, page_url): + return self.browser.get_video_title(page_url) + + @need_url + def get_video_url(self, page_url): + return self.browser.get_video_url(page_url) diff --git a/weboob/backends/youporn/browser.py b/weboob/backends/youporn/browser.py new file mode 100644 index 00000000..181dee3c --- /dev/null +++ b/weboob/backends/youporn/browser.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon + +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 + +from .pages.index import IndexPage +from .pages.video import VideoPage + +class YoupornBrowser(Browser): + DOMAIN = 'youporn.com' + PROTOCOL = 'http' + PAGES = {'http://[w\.]*youporn\.com/?': IndexPage, + 'http://[w\.]*youporn\.com/watch/.+': VideoPage, + } + + def __init__(self): + # Disallow arguments + Browser.__init__(self) + + def get_video_title(self, page_url): + self.location(page_url) + return self.page.title + + def get_video_url(self, page_url): + self.location(page_url) + return self.page.url diff --git a/weboob/backends/youporn/pages/__init__.py b/weboob/backends/youporn/pages/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/weboob/backends/youporn/pages/base.py b/weboob/backends/youporn/pages/base.py new file mode 100644 index 00000000..e15a25d6 --- /dev/null +++ b/weboob/backends/youporn/pages/base.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon + +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 ClientForm +from weboob.tools.browser import BasePage + +class PornPage(BasePage): + def loaded(self): + try: + self.browser.select_form(nr=0) + self.browser.submit(name='user_choice') + return False + except ClientForm.ControlNotFoundError, e: + return True diff --git a/weboob/backends/youporn/pages/index.py b/weboob/backends/youporn/pages/index.py new file mode 100644 index 00000000..4d184dd6 --- /dev/null +++ b/weboob/backends/youporn/pages/index.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon + +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 .base import PornPage + +class IndexPage(PornPage): + def loaded(self): + if not PornPage.loaded(self): + return diff --git a/weboob/backends/youporn/pages/video.py b/weboob/backends/youporn/pages/video.py new file mode 100644 index 00000000..e5afba82 --- /dev/null +++ b/weboob/backends/youporn/pages/video.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon + +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 .base import PornPage + +class VideoPage(PornPage): + def loaded(self): + if not PornPage.loaded(self): + return + + el = self.document.getroot().cssselect('div[id=download]') + if el: + self.url = el[0].cssselect('a')[0].attrib['href'] + else: + self.url = None + + el = self.document.getroot().cssselect('h1') + if el: + self.title = unicode(el[0].getchildren()[0].tail).strip()