Merge lp:~dosage-dev/dosage/bunch-of-comics-2 into lp:~dosage-dev/dosage/old

Proposed by Tristan Seligmann
Status: Merged
Merged at revision: 605
Proposed branch: lp:~dosage-dev/dosage/bunch-of-comics-2
Merge into: lp:~dosage-dev/dosage/old
Diff against target: 954 lines (+326/-124)
20 files modified
dosage/comic.py (+7/-2)
dosage/mainline.py (+6/-1)
dosage/plugins/a.py (+48/-15)
dosage/plugins/b.py (+3/-1)
dosage/plugins/c.py (+59/-33)
dosage/plugins/d.py (+12/-9)
dosage/plugins/e.py (+18/-3)
dosage/plugins/f.py (+39/-24)
dosage/plugins/g.py (+25/-15)
dosage/plugins/h.py (+9/-0)
dosage/plugins/keenspot.py (+0/-1)
dosage/plugins/l.py (+4/-2)
dosage/plugins/n.py (+9/-0)
dosage/plugins/o.py (+10/-0)
dosage/plugins/p.py (+14/-5)
dosage/plugins/s.py (+41/-9)
dosage/plugins/u.py (+1/-1)
dosage/plugins/uc.py (+1/-1)
dosage/plugins/v.py (+19/-1)
dosage/plugins/w.py (+1/-1)
To merge this branch: bzr merge lp:~dosage-dev/dosage/bunch-of-comics-2
Reviewer Review Type Date Requested Status
Jonathan Jacobs Approve
Review via email: mp+16942@code.launchpad.net
To post a comment you must log in.
647. By Tristan Seligmann

Use inheritance instead of make for static variations.

Revision history for this message
Jonathan Jacobs (jjacobs) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'dosage/comic.py'
2--- dosage/comic.py 2009-12-15 06:55:27 +0000
3+++ dosage/comic.py 2010-01-07 02:09:17 +0000
4@@ -7,15 +7,20 @@
5 locale.setlocale(locale.LC_ALL, '')
6
7 from dosage.output import out
8-from dosage.util import urlopen, saneDataSize
9+from dosage.util import urlopen, saneDataSize, normaliseURL
10 from dosage.progress import progressBar, OperationComplete
11 from dosage.events import handler
12
13+
14+
15 class FetchComicError(IOError): pass
16
17+
18+
19 class Comic(object):
20 def __init__(self, moduleName, url, referrer=None, filename=None):
21 self.moduleName = moduleName
22+ url = normaliseURL(url)
23
24 out.write('Getting headers for %s...' % (url,), 2)
25 try:
26@@ -86,7 +91,7 @@
27 speed = saneDataSize(size / (endTime - startTime))
28 else:
29 speed = '???'
30- out.write('Saved "%(fn)s" (%(bytes)s bytes, %(speed)s/sec).' % locals(), 1)
31+ out.write('Saved "%s" (%s bytes, %s/sec).' % (fn, bytes, speed), 1)
32 handler.comicDownloaded(self.moduleName, fn)
33 self.urlobj.close()
34 finally:
35
36=== modified file 'dosage/mainline.py'
37--- dosage/mainline.py 2009-12-15 06:55:27 +0000
38+++ dosage/mainline.py 2010-01-07 02:09:17 +0000
39@@ -55,6 +55,8 @@
40 def safeOp(self, fp, *args, **kwargs):
41 try:
42 fp(*args, **kwargs)
43+ except KeyboardInterrupt:
44+ raise
45 except:
46 type, value, tb = sys.exc_info()
47 out.write('Traceback (most recent call last):', 1)
48@@ -209,7 +211,10 @@
49 parser = setupOptions()
50 options, args = parser.parse_args()
51 d = Dosage()
52- d.run(options.__dict__, args)
53+ try:
54+ d.run(options.__dict__, args)
55+ except KeyboardInterrupt:
56+ pass
57
58 if __name__ == '__main__':
59 main()
60
61=== modified file 'dosage/plugins/a.py'
62--- dosage/plugins/a.py 2010-01-04 20:12:43 +0000
63+++ dosage/plugins/a.py 2010-01-07 02:09:17 +0000
64@@ -15,8 +15,8 @@
65 class ASofterWorld(BasicScraper):
66 latestUrl = 'http://www.asofterworld.com/'
67 imageUrl = 'http://www.asofterworld.com/index.php?id=%s'
68- imageSearch = compile(r'<img src="(http://www.asofterworld.com/clean/.*?)"')
69- prevSearch = compile(r'"(.*?)">.*?back')
70+ imageSearch = compile(r'<img src="(http://www.asofterworld.com/clean/[^"]+)"')
71+ prevSearch = compile(r'"([^"]+)">back')
72 help = 'Index format: n (unpadded)'
73
74
75@@ -45,11 +45,27 @@
76
77
78 class AbsurdNotions(BasicScraper):
79- latestUrl = 'http://www.absurdnotions.org/'
80+ latestUrl = 'http://www.absurdnotions.org/page129.html'
81 imageUrl = 'http://www.absurdnotions.org/page%s.html'
82- imageSearch = compile(r'<IMG SRC="(an\d+.?\..+?)"')
83- prevSearch = compile(r'<A.*?HREF="(page\d+\.html)"><img SRC="nprev\.gif"')
84- help = 'Index format: n (unpadded)'
85+ imageSearch = compile(r'<IMG SRC="(an[^"]+)"')
86+ prevSearch = compile(r'HREF="([^"]+)"><IMG SRC="nprev\.gif"')
87+ help = 'Index format: n (unpadded)'
88+
89+
90+
91+class AbstruseGoose(BasicScraper):
92+ starter = bounceStarter('http://abstrusegoose.com/',
93+ compile(r'<a href = "(http://abstrusegoose.com/\d+)">Next &raquo;</a>'))
94+ imageUrl = 'http://abstrusegoose.com/c%s.html'
95+ imageSearch = compile(r'<img[^<]+src="(http://abstrusegoose.com/strips/[^<>"]+)"')
96+ prevSearch = compile(r'<a href = "(http://abstrusegoose.com/\d+)">&laquo; Previous</a>')
97+ help = 'Index format: n (unpadded)'
98+
99+ def namer(cls, imageUrl, pageUrl):
100+ index = int(pageUrl.rstrip('/').split('/')[-1])
101+ name = imageUrl.split('/')[-1].split('.')[0]
102+ return 'c%03d-%s' % (index, name)
103+
104
105
106 class AcademyVale(BasicScraper):
107@@ -81,19 +97,27 @@
108
109
110 class Altermeta(BasicScraper):
111- latestUrl = 'http://www.altermeta.com/'
112- imageUrl = 'http://www.altermeta.com/index.php?PS=viewComic.php&comic=%s'
113- imageSearch = compile(r'<img.+?src="(comics/\d+_\d+\..+?)"')
114- prevSearch = compile(r'<a href="(index\.php\?PS=viewComic\.php&comic=\d+)">Previous')
115+ latestUrl = 'http://altermeta.net/'
116+ imageUrl = 'http://altermeta.net/archive.php?comic=%s&view=showfiller'
117+ imageSearch = compile(r'<img src="(comics/[^"]+)" />')
118+ prevSearch = compile(r'<a href="([^"]+)"><img src="http://altermeta\.net/template/default/images/sasha/back\.png')
119 help = 'Index format: n (unpadded)'
120
121
122+
123+class AltermetaOld(Altermeta):
124+ name = 'Altermeta/Old'
125+ latestUrl = 'http://altermeta.net/oldarchive/index.php'
126+ imageUrl = 'http://altermeta.net/oldarchive/archive.php?comic=%s'
127+ prevSearch = compile(r'<a href="([^"]+)">Back')
128+
129+
130+
131 class Angels2200(BasicScraper):
132- latestUrl = 'http://peter.haynes.iconz.co.nz/'
133- imageUrl = 'http://peter.haynes.iconz.co.nz/Default.asp?ID=%s'
134- imageSearch = compile(r'(/archives/.+?)"')
135- prevSearch = compile(r'(/Default.asp\?ID=\d+?)".+previous.jpg')
136- help = 'Index format: nnn'
137+ latestUrl = 'http://www.janahoffmann.com/angels/'
138+ imageSearch = compile(r"<img src='(http://www.janahoffmann.com/angels/comics/[^']+)'>")
139+ prevSearch = compile(r'<a href="([^"]+)">&laquo; Previous</a>')
140+
141
142
143 class AnimeArcadia(BasicScraper):
144@@ -149,3 +173,12 @@
145 def namer(cls, imageUrl, pageUrl):
146 return '%s-%s' % (pageUrl.split('/')[-1].split('.')[0][2:],
147 imageUrl.split('/')[-1].split('.')[0])
148+
149+
150+
151+class AfterStrife(BasicScraper):
152+ latestUrl = 'http://afterstrife.com/?p=262'
153+ imageUrl = 'http://afterstrife.com/?p=%s'
154+ imageSearch = compile(r'<img src="(http://afterstrife.com/strips/.+?)"')
155+ prevSearch = compile(r'<a href="(.+?)" class="navi navi-prev"')
156+ help = 'Index format: nnn'
157
158=== modified file 'dosage/plugins/b.py'
159--- dosage/plugins/b.py 2010-01-04 20:12:43 +0000
160+++ dosage/plugins/b.py 2010-01-07 02:09:17 +0000
161@@ -119,14 +119,16 @@
162 help = 'Index format: yyyy-mm-dd'
163
164
165+
166 class BoyOnAStickAndSlither(BasicScraper):
167 latestUrl = 'http://www.boasas.com/'
168 imageUrl = 'http://www.boasas.com/?c=%s'
169 imageSearch = compile(r'"(boasas/\d+\..+?)"')
170- prevSearch = compile(r'<a href="(.*?)">.*?arrow_left')
171+ prevSearch = compile(r'<a href="(.+?)"><img src="images/left_20.png"')
172 help = 'Index format: n (unpadded)'
173
174
175+
176 class ButternutSquash(BasicScraper):
177 latestUrl = 'http://www.butternutsquash.net/assets/pages/bns-current.html'
178 imageUrl = 'http://www.butternutsquash.net/assets/pages/bns-comic%s.html'
179
180=== modified file 'dosage/plugins/c.py'
181--- dosage/plugins/c.py 2010-01-05 23:26:58 +0000
182+++ dosage/plugins/c.py 2010-01-07 02:09:17 +0000
183@@ -13,22 +13,25 @@
184 help = 'Index format: nnnnnn'
185
186
187+
188 class CaptainSNES(BasicScraper):
189 latestUrl = 'http://captainsnes.com/'
190 imageUrl = 'http://captainsnes.com/?date=%s'
191- imageSearch = compile(r'<img src="(Archive/.+?)"')
192- prevSearch = compile(r'<a href="(\?date=\d+?)"><img border="0" src="images/previous_day.gif"')
193+ imageSearch = compile(r'<img src=\'(http://www.captainsnes.com/comics/.+?)\'')
194+ prevSearch = compile(r'<a href="http://www.captainsnes.com/(.+?)"><span class="prev">')
195 help = 'Index format: yyyymmdd'
196
197
198+
199 class CaribbeanBlue(BasicScraper):
200- latestUrl = 'http://www.katbox.net/cblueen/'
201- imageUrl = 'http://www.katbox.net/cblueen/index.php?strip_id=%s'
202+ latestUrl = 'http://cblue.katbox.net/'
203+ imageUrl = 'http://cblue.katbox.net/index.php?strip_id=%s'
204 imageSearch = compile(r'="(.+?strips/.+?)"')
205- prevSearch = compile(r'(index.php\?strip_id=.+?)".+?navigation_back')
206+ prevSearch = compile(r'<a href="(.+?)"><img src="images/navigation_back.png"')
207 help = 'Index format: n (unpadded)'
208
209
210+
211 class Catena(BasicScraper):
212 latestUrl = 'http://catenamanor.com/'
213 imageUrl = 'http://catenamanor.com/index.php?comic=%s'
214@@ -45,14 +48,16 @@
215 help = 'Index format: yymmdd-<your guess>.html'
216
217
218+
219 class ChasingTheSunset(BasicScraper):
220 latestUrl = 'http://www.fantasycomic.com/'
221 imageUrl = 'http://www.fantasycomic.com/index.php?p=c%s'
222 imageSearch = compile(r'(/cmsimg/.+?)".+?comic-img')
223- prevSearch = compile(r'(/index.php\?p=.+?)".+?cn-prev')
224+ prevSearch = compile(r'<a href="(.+?)" title="" ><img src="(images/eye-prev.png|images/cn-prev.png)"')
225 help = 'Index format: n'
226
227
228+
229 class Chisuji(BasicScraper):
230 latestUrl = 'http://www.chisuji.com/'
231 imageUrl = 'http://www.chisuji.com/index.php?id=%s'
232@@ -69,22 +74,34 @@
233 help = 'Index format: n (unpadded)'
234
235
236+
237 class ChugworthAcademy(BasicScraper):
238 latestUrl = 'http://chugworth.com/'
239- imageUrl = 'http://chugworth.com/?strip_id=%s'
240- imageSearch = compile(r"<img src=(comics/\d+\..+?) width=\"700\" height=\"350\">")
241- prevSearch = compile(r"<a href=\'(\?strip_id=\d+)\'><img src=\'images/previous\.gif\'")
242+ imageUrl = 'http://chugworth.com/?p=%s'
243+ imageSearch = compile(r'<img src="(.+?)" alt="Comic')
244+ prevSearch = compile(r'<a href="(http://chugworth.com/\?p=\d{1,4})"[^>]+?title="Previous">')
245 help = 'Index format: n (unpadded)'
246
247
248+
249+class ChugworthAcademyArchive(BasicScraper):
250+ latestUrl = 'http://chugworth.com/archive/?strip_id=422'
251+ imageUrl = 'http://chugworth.com/archive/?strip_id=%s'
252+ imageSearch = compile(r'<img src=(comics/\d+.+?.\w{1,4})')
253+ prevSearch = compile(r'<a href=\'(.+?)\'><img src=\'images/previous.gif')
254+ help = 'Index format: nnn'
255+
256+
257+
258 class CombustibleOrange(BasicScraper):
259 latestUrl = 'http://www.combustibleorange.com/'
260 imageUrl = 'http://www.combustibleorange.com/index.php?current=%s'
261 imageSearch = compile(r'<img src="(/images/comics/\d+?\.gif)"')
262- prevSearch = compile(r'<a href="(index.php\?current=\d+?)"><img src="images/button_toplast.gif" border="0">')
263+ prevSearch = compile(r'><a href="(.+?)"><img src="images/button-last.gif" border="0">')
264 help = 'Index format: n (unpadded)'
265
266
267+
268 class Comedity(BasicScraper):
269 latestUrl = 'http://www.comedity.com/'
270 imageUrl = 'http://www.comedity.com/index.php?strip_id=%s'
271@@ -101,14 +118,16 @@
272 help = 'Index format: n (unpadded)'
273
274
275+
276 class Commissioned(BasicScraper):
277 latestUrl = 'http://www.commissionedcomic.com/'
278 imageUrl = 'http://www.commissionedcomic.com/index.php?strip=%s'
279- imageSearch = compile(r'<img src="(strips/.+?)">')
280- prevSearch = compile(r'<a href="(index.php\?strip=.+?)".+?arr-prev')
281+ imageSearch = compile(r'<img src="(http://www.commissionedcomic.com/comics/.+?)"')
282+ prevSearch = compile(r'<a href="(.+?)">&lsaquo;</a>')
283 help = 'Index format: n'
284
285
286+
287 class CoolCatStudio(BasicScraper):
288 latestUrl = 'http://www.coolcatstudio.com/'
289 imageUrl = 'http://www.coolcatstudio.com/index.php?p=%s'
290@@ -117,29 +136,42 @@
291 help = 'Index format: n'
292
293
294+
295 class CourtingDisaster(BasicScraper):
296 latestUrl = 'http://www.courting-disaster.com/'
297- imageUrl = 'http://www.courting-disaster.com/d/%s'
298+ imageUrl = 'http://www.courting-disaster.com/archive/%s.html'
299 imageSearch = compile(r'(/comics/.+?)"')
300- prevSearch = compile(r'first_day.gif"></a> <a href="(.+?)"')
301- help = 'Index format: yyyymmdd.html'
302+ prevSearch = compile(r'</a><a href="(.+?)"><img src="/images/previous.gif"[^>]+?>')
303+ help = 'Index format: yyyymmdd'
304+
305
306
307 class CrapIDrewOnMyLunchBreak(BasicScraper):
308 latestUrl = 'http://crap.jinwicked.com/'
309- imageUrl = 'http://crap.jinwicked.com/imgs/comics/%s'
310- imageSearch = compile(r'<img src="(imgs/comics/.+?)"')
311- prevSearch = compile(r'<a href=\'(\?comic\=.*?)\'><img src="imgs/oldercrap.jpg"')
312- help = 'Index format: yyyymmdd'
313+ imageUrl = 'http://crap.jinwicked.com/%s'
314+ imageSearch = compile(r'<img src="(http://crap.jinwicked.com/comics/.+?)"')
315+ prevSearch = compile(r'<a href="(.+?)"><img src="http://comics.jinwicked.com/images/navigation_back.png"')
316+ help = 'Index format: yyyy/mm/dd/name'
317+
318
319
320 class CtrlAltDel(BasicScraper):
321- latestUrl = 'http://www.ctrlaltdel-online.com/comic.php'
322- imageUrl = 'http://www.ctrlaltdel-online.com/comic.php?d=%s'
323- imageSearch = compile(r'<img src="(/comics/\d{8}\..+?)"')
324- prevSearch = compile(r'<a href="(/comic.php\?d=\d{8})"><img src="/_common/images/comicnav/back1.jpg"')
325+ latestUrl = 'http://www.cad-comic.com/cad/'
326+ imageSearch = compile(r'<img src="(/comics/\w+/\d{8}\..+?)"')
327+ prevSearch = compile(r'<a href="(/\w+/\d{8})" class="nav-back')
328 help = 'Index format: yyyymmdd'
329
330+ @property
331+ def imageUrl(self):
332+ return self.latestUrl + '%s'
333+
334+
335+
336+class CtrlAltDelSillies(CtrlAltDel):
337+ name = 'CtrlAltDel/Sillies'
338+ latestUrl = 'http://www.cad-comic.com/sillies/'
339+
340+
341
342 def cloneManga(name, shortName, lastStrip=None):
343 baseUrl = 'http://manga.clone-army.org/%s.php' % (shortName,)
344@@ -173,16 +205,10 @@
345
346 class CatAndGirl(BasicScraper):
347 latestUrl = 'http://catandgirl.com/'
348- imageUrl = 'http://catandgirl.com/view.php?loc=%s'
349- imageSearch = compile(r'<img src="((?:http://catandgirl.com/)?archive/[^"\n]+)')
350- prevSearch = compile(r'<a href="(view.php\?loc=\d+)"><img src="arrow_left.gif"')
351- help = 'Index format: n'
352-
353- def namer(cls, imageUrl, pageUrl):
354- filename = imageUrl.split('/')[-1].split('.')[0]
355- assert filename.startswith('cg')
356- index = int(filename[2:6])
357- return '%03d-%s' % (index, filename[6:])
358+ imageUrl = 'http://catandgirl.com/?p=%s'
359+ imageSearch = compile(r'<img src="(http://catandgirl.com/archive/.+?)"')
360+ prevSearch = compile(r'\s+<a href="(.+?)">&#9668; Previous</a>')
361+ help = 'Index format: n (unpadded)'
362
363
364 def comicsDotCom(name, section):
365
366=== modified file 'dosage/plugins/d.py'
367--- dosage/plugins/d.py 2009-12-15 06:55:27 +0000
368+++ dosage/plugins/d.py 2010-01-07 02:09:17 +0000
369@@ -52,22 +52,25 @@
370 help = 'Index format: yyyy-mm-dd'
371
372
373+
374 class DrFun(BasicScraper):
375- latestUrl = 'http://www.ibiblio.org/Dave/this-week.html'
376- imageUrl = 'http://www.ibiblio.org/Dave/this-week.html'
377- imageSearch = compile(r'<A HREF=\s?"(Dr-Fun/df\d{6}/df\d{8}\.jpg)">')
378- prevSearch = compile(r'<a href="(ar\d+.htm)#banner">Previous Week,\s?<\/A>')
379- help = 'Index format: yyyymmdd'
380+ latestUrl = 'http://www.ibiblio.org/Dave/ar00502.htm'
381+ imageUrl = 'http://www.ibiblio.org/Dave/ar%s.htm'
382+ imageSearch = compile(r'<A HREF= "(Dr-Fun/df\d{6}/df.+?)">')
383+ prevSearch = compile(r'<A HREF="(.+?)">Previous Week,')
384+ help = 'Index format: nnnnn'
385+
386
387
388 class Dracula(BasicScraper):
389- latestUrl = 'http://www.coyotepuck.dragoncity.net/dracula/index.php'
390- imageUrl = 'http://www.coyotepuck.dragoncity.net/dracula/index.php?p=%s'
391- imageSearch = compile(r'"(story/.+?)"')
392- prevSearch = compile(r'(index.php\?p=.+?)">.+?back')
393+ latestUrl = 'http://draculacomic.net/'
394+ imageUrl = 'http://draculacomic.net/comic.php?comicID=%s'
395+ imageSearch = compile(r'<img src="(comics/.+?)"')
396+ prevSearch = compile(r'&nbsp;<a class="archivelink" href="(.+?)">&laquo; Prev</a>')
397 help = 'Index format: nnn'
398
399
400+
401 class DragonTails(BasicScraper):
402 latestUrl = 'http://www.dragon-tails.com/'
403 imageUrl = 'http://www.dragon-tails.com/archive.php?date=%s'
404
405=== modified file 'dosage/plugins/e.py'
406--- dosage/plugins/e.py 2009-12-15 06:55:27 +0000
407+++ dosage/plugins/e.py 2010-01-07 02:09:17 +0000
408@@ -20,6 +20,7 @@
409 help = 'Index format: mmddyyyy or name'
410
411
412+
413 class ElGoonishShive(BasicScraper):
414 name = 'KeenSpot/ElGoonishShive'
415 latestUrl = 'http://www.egscomics.com/'
416@@ -29,14 +30,26 @@
417 help = 'Index format: yyyy-mm-dd'
418
419
420+
421+class ElGoonishShiveNP(BasicScraper):
422+ name = 'KeenSpot/ElGoonishShiveNP'
423+ latestUrl = 'http://www.egscomics.com/egsnp/'
424+ imageUrl = 'http://www.egscomics.com/egsnp/?date=%s'
425+ imageSearch = compile(r'<div class=\'comic2\'><img src=\'(comics/\d{4}/\d{2}.+?)\'')
426+ prevSearch = compile(r'<a href=\'(.+?)\'[^>]+?onmouseover=\'\$\("navimg(6|2)"\)')
427+ help = 'Index format: yyyy-mm-dd'
428+
429+
430+
431 class ElsieHooper(BasicScraper):
432 latestUrl = 'http://www.elsiehooper.com/todaysserial.htm'
433 imageUrl = 'http://www.elsiehooper.com/comics/comic%s.htm'
434- imageSearch = compile(r'<img\s+?src="(/comics/elsieh\d{3}\w+\.\w{3}|/images/.+?_cover.+?)"')
435- prevSearch = compile(r'<a href="(.+?)"><img.+?src="/images/previous.gif"')
436+ imageSearch = compile(r'<img src="(/comics_/.+?)">')
437+ prevSearch = compile(r'<A href="(.+?)"><IMG (height=27 src="/images/previous.gif"|src="/images/previous.gif")', IGNORECASE)
438 help = 'Index format: nnn'
439
440
441+
442 class EmergencyExit(BasicScraper):
443 latestUrl = 'http://www.eecomics.net/'
444 imageUrl = ''
445@@ -53,14 +66,16 @@
446 help = 'Index format: nnn (unpadded)'
447
448
449+
450 class ErrantStory(BasicScraper):
451 latestUrl = 'http://www.errantstory.com/'
452 imageUrl = 'http://www.errantstory.com/archive.php?date=%s'
453 imageSearch = compile(r'<img[^>]+?src="([^"]*?comics/.+?)"')
454- prevSearch = compile(r'"(comic.php.+?)" title.+?content_button_back.gif')
455+ prevSearch = compile(r'><a href="(.+?)">&lt;Previous</a>')
456 help = 'Index format: yyyy-mm-dd'
457
458
459+
460 class EternalVenture(BasicScraper):
461 latestUrl = 'http://pulledpunches.com/index2.php'
462 imageUrl = 'http://pulledpunches.com/archive.php?date=%s.jpg'
463
464=== modified file 'dosage/plugins/f.py'
465--- dosage/plugins/f.py 2009-12-15 06:55:27 +0000
466+++ dosage/plugins/f.py 2010-01-07 02:09:17 +0000
467@@ -28,20 +28,23 @@
468 compile(r'(comic/page.php\?id.+?)"'))
469
470
471+
472 class FightCastOrEvade(BasicScraper):
473 latestUrl = 'http://www.fightcastorevade.net/'
474 imageUrl = 'http://www.fightcastorevade.net/d/%s'
475- imageSearch = compile(r'"(.+?/comics/.+?)"')
476+ imageSearch = compile(r'<img src="(http://www.fightcastorevade.net/comics/.+?)"')
477 prevSearch = compile(r'"(.+?/d/.+?)".+?previous')
478 help = 'Index format: yyyymmdd.html'
479
480
481+
482 class FilibusterCartoons(BasicScraper):
483 latestUrl = 'http://www.filibustercartoons.com/'
484- imageUrl = 'http://www.filibustercartoons.com/archive?id=%s'
485- imageSearch = compile(r'<img src="(comics/\d{8}\..+?)"')
486- prevSearch = compile(r'<a href="(archive.php\?id=\d{8})".+?\'images/comic_nav_prev_2.gif\'')
487- help = 'Index format: n (unpadded)'
488+ imageUrl = 'http://www.filibustercartoons.com/index.php/%s'
489+ imageSearch = compile(r'<img src="(http://www.filibustercartoons.com/comics/.+?)"')
490+ prevSearch = compile(r'<a href="(.+?)"><img src=\'(.+?/arrow-left.gif)\'')
491+ help = 'Index format: yyyy/mm/dd/name'
492+
493
494
495 class FlakyPastry(BasicScraper):
496@@ -69,20 +72,23 @@
497 help = 'Index format: n (unpadded)'
498
499
500+
501 class FragileGravity(BasicScraper):
502 latestUrl = 'http://www.fragilegravity.com/'
503 imageUrl = 'http://www.fragilegravity.com/core.php?archive=%s'
504- imageSearch = compile(r'<img src="(strips/\d{8}\..+?)"')
505- prevSearch = compile(r'<a href="(core.php\?archive=\d{8})"\nonmouseover="window.status=\'Previous Strip.+?\'; return true"')
506+ imageSearch = compile(r'<IMG SRC="(strips/.+?)"')
507+ prevSearch = compile(r'<A HREF="(.+?)"\nonMouseover="window.status=\'Previous Strip', MULTILINE | IGNORECASE)
508 help = 'Index format: yyyymmdd'
509
510
511+
512 class Freefall(BasicScraper):
513 latestUrl = 'http://freefall.purrsia.com/default.htm'
514- imageUrl = 'http://freefall.purrsia.com/ff1100/fv%s.htm'
515- imageSearch = compile(r'<img src="(/ff\d{3}\d?/fv\d{5}\..+?)"')
516- prevSearch = compile(r'<a href="(/ff\d{3}\d?/fv\d{5}\.htm)">Previous')
517- help = 'Index format: nnnnn'
518+ imageUrl = 'http://freefall.purrsia.com/ff%s/fc%s.htm'
519+ imageSearch = compile(r'<img src="(/ff\d+/.+?.\w{3,4})"')
520+ prevSearch = compile(r'<A HREF="(/ff\d+/.+?.htm)">Previous</A>')
521+ help = 'Index format: nnnn/nnnnn'
522+
523
524
525 class Frump(PHPScraper):
526@@ -90,18 +96,15 @@
527 prevSearch = compile(r'<a href="(http://thm\.askee\.net/comic/daily\.php\?date=\d{6})">Previous', IGNORECASE)
528
529
530+
531 class FantasyRealms(BasicScraper):
532- # This module may not get the latest comic, since the front page references to
533- # the first page of the last update. If an update consists of multiple pages,
534- # only the first one is fetched, the others are fetched on the next
535- # update...
536-
537- imageUrl = 'http://www.fantasyrealmsonline.com/manga/%s.html'
538- imageSearch = compile(r'<div align="center"><a href="[^"]+\.html"><img src="(\w+\.jpg)"')
539- prevSearch = compile(r'<a href="([^"]+\.html)"><img src="\.\./\.\./images/nav-back')
540- help = 'Index format: ii/pp (issue/page)'
541+ imageUrl = 'http://www.fantasyrealmsonline.com/manga/%s.php'
542+ imageSearch = compile(r'<img src="(\d{1,4}.\w{3,4})" width="540"', IGNORECASE)
543+ prevSearch = compile(r'<a href="(.+?)"><img src="../images/nav-back.gif"', IGNORECASE)
544+ help = 'Index format: nnn'
545 starter = indirectStarter('http://www.fantasyrealmsonline.com/',
546- compile(r'<a href = "(manga/\d+/\w+\.html)"><img src="latest\.jpg"'))
547+ compile(r'<a href="(manga/.+?)"><img src="preview.jpg"', IGNORECASE))
548+
549
550
551 class FullFrontalNerdity(BasicScraper):
552@@ -119,17 +122,29 @@
553 help = 'Index format: n (unpadded)'
554
555
556+
557 class Fallen(BasicScraper):
558 imageUrl = 'http://www.fallencomic.com/pages/part%s/%s-p%s.htm'
559- imageSearch = compile(r'<IMG SRC="(page/\d+-p\d+\..+?)"', IGNORECASE)
560- prevSearch = compile(r'<A HREF="(\d+-p\d+.htm)"><FONT FACE="Courier">Back', IGNORECASE)
561+ imageSearch = compile(r'<IMG SRC="(page/.+?)"', IGNORECASE)
562+ prevSearch = compile(r'<A HREF="(.+?)"><FONT FACE="Courier">Back', IGNORECASE)
563 help = 'Index format: nn-m (comicNumber-partNumber)'
564 starter = indirectStarter('http://www.fallencomic.com/fal-page.htm',
565 compile(r'\(NEW \d{2}/\d{2}/\d{2}\)\s*\n*\s*<a href="(pages/part\d+/\d+-p\d+\.htm)">\d+</a>', MULTILINE))
566
567 def namer(cls, imageUrl, pageUrl):
568- return imageUrl.split('/')[-1].split('.')[0]
569+ num = pageUrl.split('/')[-1].split('-')[0]
570+ part = pageUrl.split('-')[-1].split('.')[0]
571+ return '%s-%s' % (part, num)
572
573 def setStrip(self, index):
574 index, part = index.split('-')
575 self.currentUrl = self.imageUrl % (part, index, part)
576+
577+
578+
579+class FoxTails(BasicScraper):
580+ latestUrl = 'http://www.magickitsune.com/strips/current.html'
581+ imageUrl = 'http://www.magickitsune.com/strips/%s'
582+ imageSearch = compile(r'<img src=(img/.+?)[ |>]', IGNORECASE)
583+ prevSearch = compile(r'(?<=first.gif)*(?<=</td>)*<a.*href=\'(.+?)\'.+?<img.+?src=\'../img/prev.gif\'>', IGNORECASE)
584+ help = 'Index format: yyyymmdd'
585
586=== modified file 'dosage/plugins/g.py'
587--- dosage/plugins/g.py 2010-01-04 20:12:43 +0000
588+++ dosage/plugins/g.py 2010-01-07 02:09:17 +0000
589@@ -1,6 +1,6 @@
590 from re import compile
591
592-from dosage.helpers import BasicScraper
593+from dosage.helpers import BasicScraper, indirectStarter
594
595
596 class Galaxion(BasicScraper):
597@@ -27,12 +27,14 @@
598 help = 'Index format: yyyymmdd'
599
600
601+
602 class GenrezvousPoint(BasicScraper):
603- latestUrl = 'http://www.iccomics.com/chapters/genrezvouspoint/index.php?id=120'
604- imageUrl = 'http://www.iccomics.com/chapters/genrezvouspoint/index.php?id=%s'
605- imageSearch = compile(r'src="(.*?gp-comics/.*?)"')
606- prevSearch = compile(r'</a><a href="(.+?index.php\?id=.*?)".*?navbar_03')
607- help = 'Index format: n (unpadded)'
608+ latestUrl = 'http://genrezvouspoint.com/'
609+ imageUrl = 'http://genrezvouspoint.com/index.php?comicID=%s'
610+ imageSearch = compile(r'<img src=\'(comics/.+?)\'')
611+ prevSearch = compile(r' <a[^>]+?href="(.+?)">PREVIOUS</a>')
612+ help = 'Index format: nnn'
613+
614
615
616 class GirlGenius(BasicScraper):
617@@ -43,22 +45,25 @@
618 help = 'Index format: yyyymmdd'
619
620
621+
622 class GirlsWithSlingshots(BasicScraper):
623 latestUrl = 'http://www.daniellecorsetto.com/gws.html'
624 imageUrl = 'http://www.daniellecorsetto.com/GWS%s.html'
625 imageSearch = compile(r'<img src="(images/gws/GWS\d{3}.jpg)"')
626- prevSearch = compile(r'<a href="(GWS\d{3}.html)" onMouseOver="imgOn\(\'img2\'\)"')
627+ prevSearch = compile(r'(archive.php\?today=\d{3}&comic=\d{3})"[^>]*><img[^>]+src="images/gwsmenu/back_off.jpg"')
628 help = 'Index format: nnn'
629
630
631+
632 class Girly(BasicScraper):
633- latestUrl = 'http://go-girly.com/'
634- imageUrl = 'http://go-girly.com/go/%s'
635- imageSearch = compile(r'"(http://comics.go-girly.com/.*?)"')
636- prevSearch = compile(r"<a href=\'(/go/.*?)\'.+?nav_girly_prev.gif")
637+ latestUrl = 'http://girlyyy.com/'
638+ imageUrl = 'http://girlyyy.com/go/%s'
639+ imageSearch = compile(r'<img src="(http://girlyyy.com/comics/.+?)"')
640+ prevSearch = compile(r'<a href="(.+?)"> &nbsp;&lt;&nbsp;prev')
641 help = 'Index format: nnn'
642
643
644+
645 class GlueMeat(BasicScraper):
646 latestUrl = 'http://www.gluemeat.com/'
647 imageUrl = 'http://www.gluemeat.com/archives/%s.html'
648@@ -75,13 +80,18 @@
649 help = 'Index format: yymmdd'
650
651
652+
653 class GoneWithTheBlastwave(BasicScraper):
654- latestUrl = 'http://www.blastwavecomic.com/'
655- imageUrl = 'http://www.blastwavecomic.com/index.php?strip_id=%s'
656- imageSearch = compile(r'<img.+?src="(istrip_files/strips/\d{8}\..+?)"')
657- prevSearch = compile(r'<a href="/(index.php\?strip_id=\d+)"><img src="images/previous.jpg"')
658+ starter = indirectStarter('http://www.blastwave-comic.com/index.php?p=comic&nro=1',
659+ compile(r'href="(index.php\?p=comic&amp;nro=\d+)"><img src="images/page/default/latest'))
660+ imageUrl = 'http://www.blastwave-comic.com/index.php?p=comic&nro=%s'
661+ imageSearch = compile(r'<img.+src=".+(/comics/.+?)"')
662+ prevSearch = compile(r'href="(index.php\?p=comic&amp;nro=\d+)"><img src="images/page/default/previous')
663 help = 'Index format: n'
664
665+ def namer(cls, imageUrl, pageUrl):
666+ return '%02d' % int(compile(r'nro=(\d+)').search(pageUrl).group(1))
667+
668
669
670 class GunnerkrigCourt(BasicScraper):
671
672=== modified file 'dosage/plugins/h.py'
673--- dosage/plugins/h.py 2010-01-04 20:13:22 +0000
674+++ dosage/plugins/h.py 2010-01-07 02:09:17 +0000
675@@ -46,3 +46,12 @@
676 imageSearch = compile(r'src="(/comics/.+?)"')
677 prevSearch = compile(r'(\d+\.html)"><img[^>]+?src="/images/previous_day.png"')
678 help = 'Index format: yyyy/mm/dd'
679+
680+
681+
682+class HelpDesk(BasicScraper):
683+ latestUrl = 'http://www.ubersoft.net/'
684+ imageUrl = 'http://www.ubersoft.net/comic/hd/%s/%s/%s'
685+ imageSearch = compile(r'src="(http://www.ubersoft.net/files/comics/hd/hd\d{8}.png)')
686+ prevSearch = compile(r'<a href="(/comic/.+?)">(.+?)previous</a>')
687+ help = 'Index format: yyyy/mm/name'
688
689=== modified file 'dosage/plugins/keenspot.py'
690--- dosage/plugins/keenspot.py 2010-01-03 17:49:04 +0000
691+++ dosage/plugins/keenspot.py 2010-01-07 02:09:17 +0000
692@@ -406,7 +406,6 @@
693 'ElCieloDeLosEspermatozoides': 'http://fjgarcia.comicgenesis.com/',
694 'Eldritch': 'http://eldritch.comicgenesis.com/',
695 'ElfOnlyInn': 'http://www.elfonlyinn.net/',
696- 'ElGoonishShiveNP': 'http://www.egscomics.com/egsnp/',
697 'ElleAndAllTheOthers': 'http://elle.comicgenesis.com/',
698 'ElSuenoDeLaRazonProduceMonstruos': 'http://cubanaloca.comicgenesis.com/',
699 'ElvenExploration': 'http://www.theelven.com/',
700
701=== modified file 'dosage/plugins/l.py'
702--- dosage/plugins/l.py 2010-01-04 20:12:43 +0000
703+++ dosage/plugins/l.py 2010-01-07 02:09:17 +0000
704@@ -3,12 +3,14 @@
705 from dosage.helpers import BasicScraper
706
707
708+
709 class LasLindas(BasicScraper):
710 latestUrl = 'http://www.katbox.net/laslindas/'
711 imageUrl = 'http://www.katbox.net/laslindas/index.php?strip_id=%s'
712 imageSearch = compile(r'"(istrip_files/strips/.+?)"')
713- prevSearch = compile(r'</a><a href="/laslindas/(.+?)".+?prev')
714- help = 'Index format: nn'
715+ prevSearch = compile(r'<a href="(.+?)"><[^>]+?alt="Back"')
716+ help = 'Index format: n (unpadded)'
717+
718
719
720 class LastBlood(BasicScraper):
721
722=== modified file 'dosage/plugins/n.py'
723--- dosage/plugins/n.py 2009-12-15 06:55:27 +0000
724+++ dosage/plugins/n.py 2010-01-07 02:09:17 +0000
725@@ -124,3 +124,12 @@
726 prevSearch = compile(r'<a href="(index.php\?date=[0-9-]*)"><img src="back.jpg"', IGNORECASE)
727 starter = indirectStarter('http://nodwick.humor.gamespy.com/gamespyarchive/index.php', prevSearch)
728 help = 'Index format: None'
729+
730+
731+
732+class NekkoAndJoruba(BasicScraper):
733+ latestUrl = 'http://www.nekkoandjoruba.com/'
734+ imageUrl = 'http://www.nekkoandjoruba.com/?p=%s'
735+ imageSearch = compile(r'<img src="(http://www.nekkoandjoruba.com/comics/.+?)"')
736+ prevSearch = compile(r'<a href="(.+?)">&lsaquo;</a>')
737+ help = 'Index format: nnn'
738
739=== modified file 'dosage/plugins/o.py'
740--- dosage/plugins/o.py 2009-12-15 06:55:27 +0000
741+++ dosage/plugins/o.py 2010-01-07 02:09:17 +0000
742@@ -73,3 +73,13 @@
743 prevSearch = compile(r'<div class="previous"><a href="(http://www.ok-cancel.com/comic/\d{1,4}.html)">', IGNORECASE)
744 starter = indirectStarter('http://www.ok-cancel.com/', prevSearch)
745 help = 'Index format: yyyymmdd'
746+
747+
748+
749+class Oglaf(BasicScraper):
750+ starter = indirectStarter('http://oglaf.com/',
751+ compile(r'<a href="(.+?)"><img src="over18.gif"', IGNORECASE))
752+ imageUrl = 'http://oglaf.com/%s.html'
753+ imageSearch = compile(r'/><img src="(.+?)"[^>]+?width="760" height="596"', IGNORECASE)
754+ prevSearch = compile(r'<a href="(.+?)"[^>]+?><img src="prev.gif"', IGNORECASE)
755+ help = 'Index format: nn'
756
757=== modified file 'dosage/plugins/p.py'
758--- dosage/plugins/p.py 2009-12-15 06:55:27 +0000
759+++ dosage/plugins/p.py 2010-01-07 02:09:17 +0000
760@@ -35,13 +35,20 @@
761 help = 'Index format: n (unpadded)'
762
763
764+
765 class PennyArcade(BasicScraper):
766- latestUrl = 'http://www.penny-arcade.com/comic/'
767+ starter = bounceStarter('http://www.penny-arcade.com/comic/',
768+ compile(r'<a href="(/comic/[^"]+)">Next</a>'))
769 imageUrl = 'http://www.penny-arcade.com/comic/%s/'
770- imageSearch = compile(r'(?<!<!--)<img src="(/images/\d{4}/\d{8}..+?)"')
771- prevSearch = compile(r'<a href="(/comic/\d{1,4}/\d{1,2}/\d{1,2})/"><img alt="Back"')
772+ imageSearch = compile(r'(?<!<!--)<img src="(http://art\.penny-arcade\.com/photos/[^"]+)"')
773+ prevSearch = compile(r'<a href="(/comic/[^"]+)">Back</a>')
774 help = 'Index format: yyyy/mm/dd'
775
776+ def namer(cls, imageUrl, pageUrl):
777+ yyyy, mm, dd = pageUrl.split('/')[-4:-1]
778+ return '%04d%02d%02d' % (int(yyyy), int(mm), int(dd))
779+
780+
781
782 class PeppermintSaga(BasicScraper):
783 latestUrl = 'http://www.pepsaga.com/'
784@@ -84,14 +91,16 @@
785 namer = queryNamer('comicid', usePageUrl=True)
786
787
788+
789 class PvPonline(BasicScraper):
790 latestUrl = 'http://www.pvponline.com/'
791 imageUrl = None
792- imageSearch = compile(r"<img src='(http://www.pvponline.com/comics/pvp\d{8}\..+?)'", IGNORECASE)
793- prevSearch = compile(r'<a href="(http://www.pvponline.com/[^"]+)"[^>]*><img src="http://www.pvponline.com/newsite/images/(?:yesterday|left)_curl.jpg"', IGNORECASE)
794+ imageSearch = compile(r'<img src="(http://www.pvponline.com/comics/pvp\d{8}\..+?)"', IGNORECASE)
795+ prevSearch = compile(r'<a href="(http://www.pvponline.com/[^"]+)"[^>]*>&lsaquo; Previous', IGNORECASE)
796 help = 'Index format: yyyymmdd'
797
798
799+
800 def pensAndTales(name, baseUrl):
801 return BasicScraper.make(
802 'PensAndTales/' + name,
803
804=== modified file 'dosage/plugins/s.py'
805--- dosage/plugins/s.py 2009-12-15 06:55:27 +0000
806+++ dosage/plugins/s.py 2010-01-07 02:09:17 +0000
807@@ -250,10 +250,11 @@
808 starter = indirectStarter('http://spamusement.com/', prevSearch)
809
810
811+
812 def snafuComics():
813 class SnafuComics(BasicScraper):
814- imageSearch = compile(r'"(comics/.*?)"')
815- prevSearch = compile(r'<a href="(\?strip_id=.*?)".+?[^>].+PREVIOUS')
816+ imageSearch = compile(r'<img src=http://\w+\.snafu-comics\.com/(comics/\d{6}_\w*\.\w{3,4})')
817+ prevSearch = compile(r'<a href="(\?comic_id=\d+)">Previous</a>')
818 help = 'Index format: n (unpadded)'
819
820 @property
821@@ -261,21 +262,52 @@
822 return self.latestUrl + 'index.php?strip_id=%s'
823
824 comics = {
825- 'Grim': 'http://grim.snafu-comics.com/',
826- 'KOF': 'http://kof.snafu-comics.com/',
827- 'PowerPuffGirls': 'http://ppg.snafu-comics.com/',
828- 'Snafu': 'http://www.snafu-comics.com/',
829- 'Tin': 'http://tin.snafu-comics.com/',
830- 'TW': 'http://tw.snafu-comics.com/',
831+ 'Grim': 'grim',
832+ 'KOF': 'kof',
833+ 'PowerPuffGirls': 'ppg',
834+ 'Snafu': 'www',
835+ 'Tin': 'tin',
836+ 'TW': 'tw',
837+ 'Sugar': 'sugar',
838+ 'SF': 'sf',
839+ 'Titan': 'titan',
840+ 'EA': 'ea',
841+ 'Zim': 'zim',
842+ 'Soul': 'soul',
843+ 'FT': 'ft',
844+ 'Bunnywith': 'bunnywith',
845+ 'Braindead': 'braindead',
846 }
847
848- return dict((name, SnafuComics.make('SnafuComics/' + name, latestUrl=latestUrl)) for name, latestUrl in comics.iteritems())
849+ url = 'http://%s.snafu-comics.com/'
850+ return dict((name, SnafuComics.make('SnafuComics/' + name,
851+ latestUrl=url % host))
852+ for name, host in comics.iteritems())
853
854 globals().update(snafuComics())
855
856
857+
858 class SosiaalisestiRajoittuneet(BasicScraper):
859 latestUrl = 'http://sosiaalisestirajoittuneet.fi/index_nocomment.php'
860 imageUrl = 'http://sosiaalisestirajoittuneet.fi/index_nocomment.php?date=%s'
861 imageSearch = compile(r'<img src="(strips/web/\d+.jpg)" alt=".*?" />')
862 prevSearch = compile(r'<a href="(index_nocomment\.php\?date=\d+)"><img\s+src="images/active_edellinen\.gif"', MULTILINE)
863+
864+
865+
866+class StrangeCandy(BasicScraper):
867+ latestUrl = 'http://www.strangecandy.net/'
868+ imageUrl = 'http://www.strangecandy.net/d/%s.html'
869+ imageSearch = compile(r'src="(http://www.strangecandy.net/comics/\d{8}.\w{1,4})"')
870+ prevSearch = compile(r'<a href="(http://www.strangecandy.net/d/\d{8}.html)"><img[^>]+?src="http://www.strangecandy.net/images/previous_day.gif"')
871+ help = 'Index format: yyyyddmm'
872+
873+
874+
875+class SMBC(BasicScraper):
876+ latestUrl = 'http://www.smbc-comics.com/'
877+ imageUrl = 'http://www.smbc-comics.com/index.php?db=comics&id=%s'
878+ imageSearch = compile(r'<img src=\'(.+?\d{8}.\w{1,4})\'>')
879+ prevSearch = compile(r'131,13,216,84"\n\s+href="(.+?)#comic"\n>', MULTILINE)
880+ help = 'Index format: nnnn'
881
882=== modified file 'dosage/plugins/u.py'
883--- dosage/plugins/u.py 2009-12-15 06:55:27 +0000
884+++ dosage/plugins/u.py 2010-01-07 02:09:17 +0000
885@@ -1,6 +1,6 @@
886 from re import compile, IGNORECASE
887
888-from dosage.helpers import BasicScraper, bounceStarter, indirectStarter, regexNamer
889+from dosage.helpers import BasicScraper, bounceStarter, indirectStarter
890 from dosage.util import getQueryParams
891
892
893
894=== modified file 'dosage/plugins/uc.py'
895--- dosage/plugins/uc.py 2009-12-15 06:55:27 +0000
896+++ dosage/plugins/uc.py 2010-01-07 02:09:17 +0000
897@@ -10,7 +10,7 @@
898 homepage = 'http://content.uclick.com/a2z.html'
899 baseUrl = 'http://www.uclick.com/client/zzz/%s/'
900 imageUrl = property(lambda self: self.latestUrl + '%s/')
901- imageSearch = compile(r'<img.+?src="(/feature/\d{2}/\d{2}/\d{2}/[^"]+\.gif|http://images\.ucomics\.com/comics/\w+/\d{4}/[^"]+\.gif)">', IGNORECASE)
902+ imageSearch = compile(r'<img[^>]+src="(http://synd.imgsrv.uclick.com/comics/\w+/\d{4}/[^"]+\.gif)"', IGNORECASE)
903 prevSearch = compile(r'<a href="(/client/zzz/\w+/\d{4}/\d{2}/\d{2}/)">Previous date', IGNORECASE)
904 help = 'Index format: yyyy/mm/dd'
905
906
907=== modified file 'dosage/plugins/v.py'
908--- dosage/plugins/v.py 2009-12-15 06:55:27 +0000
909+++ dosage/plugins/v.py 2010-01-07 02:09:17 +0000
910@@ -2,13 +2,31 @@
911
912 from dosage.helpers import BasicScraper
913
914+
915+
916 class VGCats(BasicScraper):
917 latestUrl = 'http://www.vgcats.com/comics/'
918- imageUrl = 'http://www.vgcats.com/comics/?strip_id=%s'
919 imageSearch = compile(r'<img src="(images/\d{6}\..+?)"')
920 prevSearch = compile(r'<a href="(\?strip_id=\d+)"><img src="back.gif" border="0"')
921 help = 'Index format: n (unpadded)'
922
923+ @property
924+ def imageUrl(self):
925+ return self.latestUrl + '?strip_id=%s'
926+
927+
928+
929+class Super(VGCats):
930+ name = 'VGCats/Super'
931+ latestUrl = 'http://www.vgcats.com/super/'
932+
933+
934+
935+class Adventure(VGCats):
936+ name = 'VGCats/Adventure'
937+ latestUrl = 'http://www.vgcats.com/ffxi/'
938+
939+
940
941 class ViiviJaWagner(BasicScraper):
942 latestUrl = 'http://www.hs.fi/viivijawagner/'
943
944=== modified file 'dosage/plugins/w.py'
945--- dosage/plugins/w.py 2010-01-03 16:02:21 +0000
946+++ dosage/plugins/w.py 2010-01-07 02:09:17 +0000
947@@ -79,7 +79,7 @@
948 latestUrl = 'http://www.wulffmorgenthaler.com/'
949 imageUrl = 'http://www.wulffmorgenthaler.com/Default.aspx?id=%s'
950 imageSearch = compile(r'img id="ctl00_content_Strip1_imgStrip".+?class="strip" src="(striphandler\.ashx\?stripid=[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})"')
951- prevSearch = compile(r'<a href="(/Default\.aspx\?id=[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})" id="ctl00_content_Strip1_aPrev">')
952+ prevSearch = compile(r'<a href="(/default\.aspx\?id=[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})" id="ctl00_content_Strip1_aPrev">')
953 help = 'Index format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (GUID)'
954 namer = queryNamer('stripid')
955

Subscribers

People subscribed via source and target branches

to all changes: