diff --git a/weboob/backends/youjizz/backend.py b/weboob/backends/youjizz/backend.py index f03e1dfc..9764c982 100644 --- a/weboob/backends/youjizz/backend.py +++ b/weboob/backends/youjizz/backend.py @@ -45,12 +45,8 @@ class YoujizzBackend(BaseBackend, ICapVideoProvider): return inner @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) + def get_video(self, _id): + return self.browser.get_video(_id) @need_browser def iter_page_urls(self, mozaic_url): diff --git a/weboob/backends/youjizz/browser.py b/weboob/backends/youjizz/browser.py index 466d787c..bd8e1f34 100644 --- a/weboob/backends/youjizz/browser.py +++ b/weboob/backends/youjizz/browser.py @@ -23,22 +23,18 @@ import re from weboob.tools.browser import BaseBrowser +from .pages.video import VideoPage + + +__all__ = ['YoujizzBrowser'] + + class YoujizzBrowser(BaseBrowser): - video_file_regex = re.compile(r'"(http://media[^ ,]+\.flv)"') + PAGES = {r'http://.*youjizz\.com/videos/.+\.html': VideoPage} + + def get_video(self, url): + self.location(url) + return self.page.video 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): - data = self.openurl(page_url).read() - video_file_urls = re.findall(self.video_file_regex, data) - if len(video_file_urls) == 0: - return None - else: - if len(video_file_urls) > 1: - error('Many video file URL found for given URL: %s' % video_file_urls) - return video_file_urls[0] - diff --git a/weboob/backends/youjizz/pages/__init__.py b/weboob/backends/youjizz/pages/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/weboob/backends/youjizz/pages/video.py b/weboob/backends/youjizz/pages/video.py new file mode 100644 index 00000000..87796dc3 --- /dev/null +++ b/weboob/backends/youjizz/pages/video.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Roger Philibert + +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.capabilities.video import Video +from weboob.tools.browser import BasePage + +class VideoPage(BasePage): + URL_REGEX = re.compile(r'http://.*youjizz\.com/videos/.+-(\d+)\.html') + VIDEO_FILE_REGEX = re.compile(r'"(http://media[^ ,]+\.flv)"') + + def on_loaded(self): + details = self.get_details() + self.video = Video(_id=self.get_id(), title=details.get('title', u''), url=self.get_url(), + duration=details.get('duration', 0), nsfw=True) + + def get_id(self): + m = self.URL_REGEX.match(self.url) + if m: + return int(m.group(1)) + warning("Unable to parse ID") + return 0 + + def get_url(self): + video_file_urls = re.findall(self.VIDEO_FILE_REGEX, self.browser.parser.tostring(self.document)) + if len(video_file_urls) == 0: + return None + else: + if len(video_file_urls) > 1: + error('Many video file URL found for given URL: %s' % video_file_urls) + return video_file_urls[0] + + def get_details(self): + results = {} + div = self.document.getroot().cssselect('#video_text')[0] + results['title'] = unicode(div.find('h2').text).strip() + minutes, seconds = [int(v) for v in [e for e in div.cssselect('strong') if e.text.startswith('Runtime')][0].tail.split(':')] + print minutes, seconds + results['duration'] = minutes * 60 + seconds + return results diff --git a/weboob/backends/youporn/backend.py b/weboob/backends/youporn/backend.py index 03b02861..1f2029ae 100644 --- a/weboob/backends/youporn/backend.py +++ b/weboob/backends/youporn/backend.py @@ -60,11 +60,3 @@ class YoupornBackend(BaseBackend, ICapVideoProvider): @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 index 4d8f2c73..07ec5bc4 100644 --- a/weboob/backends/youporn/browser.py +++ b/weboob/backends/youporn/browser.py @@ -25,6 +25,10 @@ from weboob.tools.browser import BaseBrowser from .pages.index import IndexPage from .pages.video import VideoPage + +__all__ = ['YoupornBrowser'] + + class YoupornBrowser(BaseBrowser): DOMAIN = 'youporn.com' PROTOCOL = 'http' @@ -56,11 +60,3 @@ class YoupornBrowser(BaseBrowser): def get_video(self, _id): self.location(self.id2url(_id)) return self.page.video - - def get_video_title(self, _id): - self.location(self.id2url(_id)) - return self.page.video.title - - def get_video_url(self, _id): - self.location(self.id2url(_id)) - return self.page.video.url