summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ryuslash2010-02-11 22:05:37 +0100
committerGravatar ryuslash2010-02-11 22:05:37 +0100
commitf09ea95c848a29492b682f954610a23daf753e15 (patch)
treeb4a7a801cbac341f51eea45cf604bc0f18aaf76f
parent420bc469a486d99f62084841428c325ae769b76a (diff)
download4grab-f09ea95c848a29492b682f954610a23daf753e15.tar.gz
4grab-f09ea95c848a29492b682f954610a23daf753e15.zip
Added --thread
With --thread a signle thread ID or thread URL can be entered. If thread is a URL, it will download it. If thread is an ID, a category must also be set.
-rwxr-xr-x4grab.py15
-rw-r--r--download.py5
-rw-r--r--progressbar.py28
3 files changed, 43 insertions, 5 deletions
diff --git a/4grab.py b/4grab.py
index dbefd78..f8cc6af 100755
--- a/4grab.py
+++ b/4grab.py
@@ -25,6 +25,7 @@ import sys
import config
import download
+base_url = "http://boards.4chan.org/"
parser = optparse.OptionParser()
parser.set_usage(
@@ -36,6 +37,7 @@ This is free software, and you are welcome to redistribute it
under certain conditions.""")
parser.add_option("-e", nargs=2, dest="confval", metavar="CONF VALUE", help="Set configuration option CONF to be VALUE")
parser.add_option("-c", "--category", dest="tempcat", metavar="CATEGORY", help="Set the category to CATEGORY only for this run")
+parser.add_option("-t", "--thread", dest="thread", metavar="THREAD", help="""Download only THREAD. If THREAD is only an ID, CATEGORY must also be set. Otherwise, no problem :-)""")
(options, args) = parser.parse_args()
@@ -51,10 +53,21 @@ if options.confval:
config.Configuration().set_option(options.confval[0], options.confval[1])
config.Configuration().save()
exit(0)
+elif options.thread:
+ if options.thread[:7] == "http://":
+ t = download.get_image_links("", [options.thread])
+ elif options.tempcat:
+ url = "%s%s/res/" % (base_url, options.tempcat)
+ t = download.get_image_links(url, [options.thread])
+ else:
+ print "if THREAD is not an absolute URL, CATEGORY must also be specified"
+ exit(1)
+ download.get_images(t)
+ exit(0)
elif options.tempcat:
config.Configuration().set_category(options.tempcat)
-base_url = "http://boards.4chan.org/%s/" % (config.Configuration().get_category())
+base_url = "%s%s/" % (base_url, config.Configuration().get_category())
t = download.get_thread_links(base_url)
t = download.get_image_links(base_url, t)
diff --git a/download.py b/download.py
index d892608..63040c9 100644
--- a/download.py
+++ b/download.py
@@ -58,6 +58,8 @@ def get_thread_links(baseurl):
else:
"\rOpening of", url, "did not succeed, trying next one..."
i += 1
+
+ progress.complete()
return myparser.get_hyperlinks()
def get_image_links(baseurl, t = []):
@@ -87,6 +89,7 @@ def get_image_links(baseurl, t = []):
print "\rOpening of", img_url, "did not succeed, trying next one..."
i += 1
+ progress.complete()
return mysubparser.get_hyperlinks()
def get_images(t = []):
@@ -108,6 +111,8 @@ def get_images(t = []):
else:
print "\rNot downloading", link, "already downloaded"
i += 1
+
+ progress.complete()
if __name__ == "__main__":
# Get a file-like object for the 4chan.org w/imgboard
diff --git a/progressbar.py b/progressbar.py
index 2074f8d..0163c12 100644
--- a/progressbar.py
+++ b/progressbar.py
@@ -30,15 +30,35 @@ class Progress():
self.show_progress(0)
+ def __get_true_maxwidth(self, vallen, maxvallen):
+ return self.maxwidth - 4 - vallen - maxvallen
+
def show_progress(self, value):
str_value = str(value)
str_maxvalue = str(self.maxvalue)
- true_maxwidth = self.maxwidth - 4 - len(str_value) - len(str_maxvalue)
- progress = int(round((true_maxwidth/float(self.maxvalue))*value))
+ #true_maxwidth = self.maxwidth - 4 - len(str_value) - len(str_maxvalue)
+ true_maxwidth = self.__get_true_maxwidth(len(str_value), len(str_maxvalue))
+ #print true_maxwidth, ":", self.maxvalue, ":", value # for debugging purposes
+
+ if self.maxvalue == 0:
+ progress = true_maxwidth
+ else:
+ progress = int(round((true_maxwidth/float(self.maxvalue))*value))
+
+ #self.fd.write("\r%s/%s [%s%s]" % (str_value, str_maxvalue, self.prog_char * progress, self.fill_char * (true_maxwidth - progress)))
+ #self.fd.flush()
+ self.__write_progress(str_value, str_maxvalue, progress, true_maxwidth)
+
+ def __write_progress(self, str_value, str_maxvalue, progress, true_maxwidth):
self.fd.write("\r%s/%s [%s%s]" % (str_value, str_maxvalue, self.prog_char * progress, self.fill_char * (true_maxwidth - progress)))
self.fd.flush()
- if value == self.maxvalue:
- self.fd.write("\n")
+
+ def complete(self):
+ str_maxvalue = str(self.maxvalue)
+ vallen = len(str_maxvalue)
+ true_maxwidth = self.__get_true_maxwidth(vallen, vallen)
+ self.__write_progress(str_maxvalue, str_maxvalue, true_maxwidth, true_maxwidth)
+ self.fd.write("\n")
if __name__ == "__main__":
prog = Progress(200)