implement ICapVideoProvider.iter_search_results()
This commit is contained in:
parent
15625b9fa7
commit
e3ad695346
5 changed files with 54 additions and 4 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue