implement ICapVideoProvider.iter_search_results()

This commit is contained in:
Romain Bignon 2010-04-16 17:19:19 +02:00
commit e3ad695346
5 changed files with 54 additions and 4 deletions

View file

@ -53,6 +53,9 @@ class YoupornBackend(Backend, ICapVideoProvider):
def get_video(self, _id):
return self.browser.get_video(_id)
def iter_search_results(self, pattern=None):
return self.browser.iter_search_results(pattern)
@need_url
def iter_page_urls(self, mozaic_url):
raise NotImplementedError()

View file

@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
"""
import re
import urllib
from weboob.tools.browser import Browser
@ -29,6 +30,7 @@ class YoupornBrowser(Browser):
DOMAIN = 'youporn.com'
PROTOCOL = 'http'
PAGES = {'http://[w\.]*youporn\.com/?': IndexPage,
'http://[w\.]*youporn\.com/search.*': IndexPage,
'http://[w\.]*youporn\.com/watch/.+': VideoPage,
}
@ -38,10 +40,19 @@ class YoupornBrowser(Browser):
def id2url(self, _id):
if isinstance(_id, int) or isinstance(_id, (str,unicode)) and _id.isdigit():
return 'http://www.youporn.com/watch/%d' % _id
return 'http://www.youporn.com/watch/%d' % int(_id)
else:
return str(_id)
def iter_search_results(self, pattern):
if not pattern:
self.home()
else:
self.location('/search?query=%s' % urllib.quote_plus(pattern))
assert self.is_on_page(IndexPage)
return self.page.iter_videos()
def get_video(self, _id):
self.location(self.id2url(_id))
return self.page.video

View file

@ -19,8 +19,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
"""
from .base import PornPage
from weboob.capabilities.video import Video
class IndexPage(PornPage):
def loaded(self):
if not PornPage.loaded(self):
return
def iter_videos(self):
for h1 in self.document.getiterator('h1'):
a = h1.find('a')
if a is None:
continue
url = a.attrib['href']
_id = url[len('/watch/'):]
_id = _id[:_id.find('/')]
title = a.text
yield Video(int(_id), title)

View file

@ -35,6 +35,15 @@ class ICapVideoProvider(ICap):
def iter_page_urls(self, mozaic_url):
raise NotImplementedError()
def iter_search_results(self, pattern=None):
"""
Iter results of a search on a pattern. Note that if pattern is None,
it get the latest videos.
@param pattern [str] pattern to search on
"""
raise NotImplementedError()
def get_video(self, _id):
"""
Get a Video from an ID.

View file

@ -49,6 +49,24 @@ class Videoob(ConsoleApplication):
print u"| Rating | %s" % video.rating
print u"'-----------------' "
@ConsoleApplication.command('Search videos')
def command_search(self, pattern=None):
print u'.------------------------------------------------------------------------------.'
if pattern:
print u'| %-76s |' % (u'Search: %s' % pattern)
else:
print u'| %-76s |' % 'Last videos'
print u"+------------.-----------------------------------------------------------------'"
for backend in self.weboob.iter_backends():
try:
iterator = backend.iter_search_results(pattern)
except NotImplementedError:
continue
else:
for video in iterator:
print u"| %10d | %-63s |" % (video.id, video.title)
print u"'--------------'---------------------------------------------------------------'"
@ConsoleApplication.command('Get video file URL from page URL')
def command_file_url(self, url):
for backend in self.weboob.iter_backends(ICapVideoProvider):