Fix and improve Galleroob
This commit is contained in:
parent
afe5db74b4
commit
5eba831497
1 changed files with 74 additions and 7 deletions
|
|
@ -20,29 +20,75 @@
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
from re import search, sub
|
||||||
|
|
||||||
from weboob.tools.application.repl import ReplApplication
|
from weboob.tools.application.repl import ReplApplication
|
||||||
|
from weboob.capabilities.base import NotLoaded
|
||||||
from weboob.capabilities.gallery import ICapGallery
|
from weboob.capabilities.gallery import ICapGallery
|
||||||
from re import search
|
from weboob.tools.application.formatters.iformatter import IFormatter
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['Galleroob']
|
__all__ = ['Galleroob']
|
||||||
|
|
||||||
|
|
||||||
|
class GalleryListFormatter(IFormatter):
|
||||||
|
MANDATORY_FIELDS = ('id', 'title')
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
def flush(self):
|
||||||
|
self.count = 0
|
||||||
|
|
||||||
|
def format_dict(self, item):
|
||||||
|
result = u'%s* (%s) %s%s' % (
|
||||||
|
ReplApplication.BOLD,
|
||||||
|
item['id'],
|
||||||
|
item['title'],
|
||||||
|
ReplApplication.NC)
|
||||||
|
if item['cardinality'] is not NotLoaded:
|
||||||
|
result += u' (%d pages)' % item['cardinality']
|
||||||
|
if item['description'] is not NotLoaded:
|
||||||
|
result += u'\n %-70s' % item['description']
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class Galleroob(ReplApplication):
|
class Galleroob(ReplApplication):
|
||||||
APPNAME = 'galleroob'
|
APPNAME = 'galleroob'
|
||||||
VERSION = '0.8'
|
VERSION = '0.8'
|
||||||
COPYTIGHT = 'Copyright(C) 2011 Noé Rubinstein'
|
COPYTIGHT = 'Copyright(C) 2011 Noé Rubinstein'
|
||||||
DESCRIPTION = 'galleroob browses and downloads web image galleries'
|
DESCRIPTION = 'galleroob browses and downloads web image galleries'
|
||||||
CAPS = ICapGallery
|
CAPS = ICapGallery
|
||||||
|
EXTRA_FORMATTERS = {'gallery_list': GalleryListFormatter}
|
||||||
|
COMMANDS_FORMATTERS = {'search': 'gallery_list'}
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
ReplApplication.__init__(self, *args, **kwargs)
|
ReplApplication.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def do_search(self, pattern=None):
|
||||||
|
"""
|
||||||
|
search PATTERN
|
||||||
|
|
||||||
|
List galleries matching a PATTERN.
|
||||||
|
|
||||||
|
If PATTERN is not given, the command will list all the galleries
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.set_formatter_header(u'Search pattern: %s' %
|
||||||
|
pattern if pattern else u'Latest galleries')
|
||||||
|
for backend, gallery in self.do('iter_search_results',
|
||||||
|
pattern=pattern, max_results=self.options.count):
|
||||||
|
self.add_object(gallery)
|
||||||
|
self.format(gallery)
|
||||||
|
|
||||||
def do_download(self, line):
|
def do_download(self, line):
|
||||||
"""
|
"""
|
||||||
download ID FOLDER
|
download ID [FIRST [FOLDER]]
|
||||||
|
|
||||||
Download a gallery
|
Download a gallery.
|
||||||
|
|
||||||
|
Begins at page FIRST (default: 0) and saves to FOLDER (default: title)
|
||||||
"""
|
"""
|
||||||
_id, dest, first = self.parse_command_args(line, 3, 2)
|
_id, first, dest = self.parse_command_args(line, 3, 1)
|
||||||
|
|
||||||
if first is None:
|
if first is None:
|
||||||
first = 0
|
first = 0
|
||||||
|
|
@ -50,7 +96,8 @@ class Galleroob(ReplApplication):
|
||||||
first = int(first)
|
first = int(first)
|
||||||
|
|
||||||
gallery = None
|
gallery = None
|
||||||
for backend, result in self.do('get_gallery', _id):
|
_id, backend = self.parse_id(_id)
|
||||||
|
for backend, result in self.do('get_gallery', _id, backends=backend):
|
||||||
if result:
|
if result:
|
||||||
backend = backend
|
backend = backend
|
||||||
gallery = result
|
gallery = result
|
||||||
|
|
@ -65,7 +112,11 @@ class Galleroob(ReplApplication):
|
||||||
|
|
||||||
print "Downloading to %s" % dest
|
print "Downloading to %s" % dest
|
||||||
|
|
||||||
os.system('mkdir "%s"' % dest)
|
try:
|
||||||
|
os.mkdir(dest)
|
||||||
|
except OSError:
|
||||||
|
pass # ignore error on existing directory
|
||||||
|
os.chdir(dest) # fail here if dest couldn't be created
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
for img in backend.iter_gallery_images(gallery):
|
for img in backend.iter_gallery_images(gallery):
|
||||||
|
|
@ -87,9 +138,25 @@ class Galleroob(ReplApplication):
|
||||||
ext = "jpg"
|
ext = "jpg"
|
||||||
|
|
||||||
|
|
||||||
name = '%s/%03d.%s' % (dest, i, ext)
|
name = '%03d.%s' % (i, ext)
|
||||||
print 'Writing file %s' % name
|
print 'Writing file %s' % name
|
||||||
|
|
||||||
with open(name, 'w') as f:
|
with open(name, 'w') as f:
|
||||||
f.write(img.data)
|
f.write(img.data)
|
||||||
|
|
||||||
|
os.chdir("..")
|
||||||
|
|
||||||
|
def do_info(self, line):
|
||||||
|
"""
|
||||||
|
info ID
|
||||||
|
|
||||||
|
Get information about a gallery.
|
||||||
|
"""
|
||||||
|
_id, = self.parse_command_args(line, 1, 1)
|
||||||
|
|
||||||
|
gallery = self.get_object(_id, 'get_gallery')
|
||||||
|
if not gallery:
|
||||||
|
print >>sys.gallery, 'Gallery not found: %s' % _id
|
||||||
|
return
|
||||||
|
self.format(gallery)
|
||||||
|
self.flush()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue