#/usr/bin/python2 import urllib2 import random import Image import os.path import re class Comic(object): def __init__(self, comicurl, filenformat, updateurl, updatere): self.comicurl = comicurl self.filenformat = filenformat self.updateurl = updateurl self.updatere = updatere self.last = 0 def update_last(self): opener = urllib2.build_opener() opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko')] url = opener.open(self.updateurl) data = url.read() url.close() result = re.search(self.updatere, data).group('link') # search for last image link if(not result.startswith('http')): result = self.comicurl + result self.last = int(re.search(r'(?P\d+)\.(?i)(jpg|png|gif|bmp)$', result).group('id')) # get file name's content before '.' def get_link(self, number = -1): opener = urllib2.build_opener() # for a UA opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko')] if(number == -1): urlstr = self.randomurl else: urlstr = self.comicurl + (self.filenformat % number) filere = re.compile(r'.*?[^\s/]+\.(?i)(jpg|png|gif|bmp)$') if(filere.match(urlstr)): return urlstr url = opener.open(urlstr) data = url.read() # download web page url.close() result = re.search(self.updatere, data) # search for image link if(result): return result.group('link') else: print "Please check your regular expression: no matches found" return None def display_random(self): # urlstr: url # picstr: random number; appended to url # pref: prefix for file name; e.g. Comics/xkcd/ # srcre: regular expression in case url + picstr is not a direct link urlstr = self.get_link(random.randrange(0, self.last)) # get direct image download link by RE fname = "Comics/" + self.comicurl.replace("http://", "").replace("/", "") + int(re.search(r'(?P\d+)\.(?i)(jpg|png|gif|bmp)$', result).group('id')) opener = urllib2.build_opener() # for a UA opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko')] directory = "Comics/" if not os.path.exists(directory): # create subdirectory if needed os.makedirs(directory) if not os.path.isfile(fname): # download picture and open if not done yet url = opener.open(urlstr) data = url.read() url.close() pic = open(fname, 'w') pic.write(data) pic.close() Image.open(fname).show() ruthe = Comic("http://ruthe.de/cartoons/", "strip_%d.jpg", "http://ruthe.de", r'Cartoon') ruthe.update_last() ruthe.display_random() xkcd = Comic("xkcd.com", "imgs.%s.com/comics/", r'Permanent link to this comic: (?P.*?)') xkcd.update_last() xkcd.display_random("/1/")