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

Proposed by Tristan Seligmann
Status: Merged
Approved by: Jonathan Jacobs
Approved revision: not available
Merged at revision: not available
Proposed branch: lp:~dosage-dev/dosage/bunch-of-comics-3
Merge into: lp:~dosage-dev/dosage/old
Diff against target: 1141 lines (+247/-307)
22 files modified
dosage/plugins/a.py (+2/-15)
dosage/plugins/b.py (+10/-7)
dosage/plugins/c.py (+0/-8)
dosage/plugins/d.py (+3/-2)
dosage/plugins/e.py (+12/-8)
dosage/plugins/f.py (+0/-6)
dosage/plugins/g.py (+0/-8)
dosage/plugins/h.py (+3/-3)
dosage/plugins/i.py (+3/-2)
dosage/plugins/j.py (+13/-9)
dosage/plugins/k.py (+9/-2)
dosage/plugins/l.py (+18/-45)
dosage/plugins/m.py (+11/-16)
dosage/plugins/n.py (+70/-35)
dosage/plugins/o.py (+17/-21)
dosage/plugins/p.py (+0/-7)
dosage/plugins/q.py (+6/-4)
dosage/plugins/r.py (+7/-20)
dosage/plugins/s.py (+32/-42)
dosage/plugins/t.py (+22/-33)
dosage/plugins/v.py (+4/-3)
dosage/plugins/w.py (+5/-11)
To merge this branch: bzr merge lp:~dosage-dev/dosage/bunch-of-comics-3
Reviewer Review Type Date Requested Status
Jonathan Jacobs Approve
Review via email: mp+17094@code.launchpad.net
To post a comment you must log in.
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
=== modified file 'dosage/plugins/a.py'
--- dosage/plugins/a.py 2010-01-07 02:02:42 +0000
+++ dosage/plugins/a.py 2010-01-10 05:25:22 +0000
@@ -120,14 +120,6 @@
120120
121121
122122
123class AnimeArcadia(BasicScraper):
124 latestUrl = 'http://www.animearcadia.com/index.php?p=comics'
125 imageUrl = 'http://www.animearcadia.com/index.php?p=comics&c=%s'
126 imageSearch = compile(r'(/comics/.+?)"')
127 prevSearch = compile(r'First.+?"(index.php\?p=comics&c=.+?)".+?Back')
128 help = 'Index format: n (unpadded)'
129
130
131class AppleGeeks(BasicScraper):123class AppleGeeks(BasicScraper):
132 latestUrl = 'http://www.applegeeks.com/'124 latestUrl = 'http://www.applegeeks.com/'
133 imageUrl = 'http://www.applegeeks.com/comics/viewcomic.php?issue=%s'125 imageUrl = 'http://www.applegeeks.com/comics/viewcomic.php?issue=%s'
@@ -136,6 +128,7 @@
136 help = 'Index format: n (unpadded)'128 help = 'Index format: n (unpadded)'
137129
138130
131
139class AppleGeeksLite(BasicScraper):132class AppleGeeksLite(BasicScraper):
140 latestUrl = 'http://www.applegeeks.com/lite/'133 latestUrl = 'http://www.applegeeks.com/lite/'
141 imageUrl = 'http://applegeeks.com/lite/index.php?aglitecomic=%s'134 imageUrl = 'http://applegeeks.com/lite/index.php?aglitecomic=%s'
@@ -144,13 +137,6 @@
144 help = 'Index format: yyyy-mm-dd'137 help = 'Index format: yyyy-mm-dd'
145138
146139
147class AsIf(BasicScraper):
148 latestUrl = 'http://asifcomic.com/404.html'
149 imageUrl = 'http://www.asifcomic.com/%s.html'
150 imageSearch = compile(r'<img src="((?:\.\./)*strips/\d+\..+?)"')
151 prevSearch = compile(r'<a href="(?:\.\./)*(\d+\..+?)"><img[^>]*src="(?:\.\./)*previous\.jpg"')
152 help = 'Index format: nn(n) (padded up to a maximum of 2 characters)'
153
154140
155class Achewood(BasicScraper):141class Achewood(BasicScraper):
156 latestUrl = 'http://www.achewood.com/'142 latestUrl = 'http://www.achewood.com/'
@@ -161,6 +147,7 @@
161 namer = regexNamer(compile(r'date%3D(\d{8})'))147 namer = regexNamer(compile(r'date%3D(\d{8})'))
162148
163149
150
164class AstronomyPOTD(BasicScraper):151class AstronomyPOTD(BasicScraper):
165 starter = bounceStarter(152 starter = bounceStarter(
166 'http://antwrp.gsfc.nasa.gov/apod/astropix.html',153 'http://antwrp.gsfc.nasa.gov/apod/astropix.html',
167154
=== modified file 'dosage/plugins/b.py'
--- dosage/plugins/b.py 2010-01-06 19:59:00 +0000
+++ dosage/plugins/b.py 2010-01-10 05:25:22 +0000
@@ -87,6 +87,7 @@
87 help = 'Index format: non'87 help = 'Index format: non'
8888
8989
90
90class Brink(BasicScraper):91class Brink(BasicScraper):
91 latestUrl = 'http://paperfangs.com/brink/'92 latestUrl = 'http://paperfangs.com/brink/'
92 imageUrl = 'http://paperfangs.com/brink/?p=%s'93 imageUrl = 'http://paperfangs.com/brink/?p=%s'
@@ -95,13 +96,6 @@
95 help = 'Index format: non'96 help = 'Index format: non'
9697
9798
98class BrokenMirror(BasicScraper):
99 latestUrl = 'http://www.the-broken-mirror.net/files/story/comic.php'
100 imageUrl = 'http://www.the-broken-mirror.net/files/story/comic.php\?id=%s'
101 imageSearch = compile(r'"(/files/story/.+?)"')
102 prevSearch = compile(r'href="(comic.php\?id=.+?)">&lt;&lt;BACK')
103 help = 'Index format: n'
104
10599
106class BonoboConspiracy(BasicScraper):100class BonoboConspiracy(BasicScraper):
107 latestUrl = 'http://ansuz.sooke.bc.ca/bonobo-conspiracy/'101 latestUrl = 'http://ansuz.sooke.bc.ca/bonobo-conspiracy/'
@@ -189,3 +183,12 @@
189 imageSearch = compile(r'<img src="(http://boxbrown.com/comics/[^"]+)"')183 imageSearch = compile(r'<img src="(http://boxbrown.com/comics/[^"]+)"')
190 prevSearch = compile(r'<a href="(.+?)"><span class="prev">')184 prevSearch = compile(r'<a href="(.+?)"><span class="prev">')
191 help = 'Index format: nnn'185 help = 'Index format: nnn'
186
187
188
189class BlankIt(BasicScraper):
190 latestUrl = 'http://blankitcomics.com/'
191 imageUrl = 'http://blankitcomics.com/%s'
192 imageSearch = compile(r'<img src="(http://blankitcomics.com/bicomics/.+?)"')
193 prevSearch = compile(r'<a href="([^"]+)" rel="prev">')
194 help = 'Index format: yyyy/mm/dd/name'
192195
=== modified file 'dosage/plugins/c.py'
--- dosage/plugins/c.py 2010-01-07 02:02:42 +0000
+++ dosage/plugins/c.py 2010-01-10 05:25:22 +0000
@@ -66,14 +66,6 @@
66 help = 'Index format: n (unpadded)'66 help = 'Index format: n (unpadded)'
6767
6868
69class ChroniclesOfGaras(BasicScraper):
70 latestUrl = 'http://www.chroniclesofgaras.com/default.php'
71 imageUrl = 'http://www.chroniclesofgaras.com/archive_page.php?id=%s'
72 imageSearch = compile(r'<TD ROWSPAN=3 ALIGN="CENTER" VALIGN="CENTER"><img src="(http://www.chroniclesofgaras.com/comics/\d{8}\..+?)"')
73 prevSearch = compile(r'<a href="(http://www\.chroniclesofgaras\.com/archive_page\.php\?id=\d+?)"><img src="images/navbutton1_previous')
74 help = 'Index format: n (unpadded)'
75
76
7769
78class ChugworthAcademy(BasicScraper):70class ChugworthAcademy(BasicScraper):
79 latestUrl = 'http://chugworth.com/'71 latestUrl = 'http://chugworth.com/'
8072
=== modified file 'dosage/plugins/d.py'
--- dosage/plugins/d.py 2010-01-06 21:51:31 +0000
+++ dosage/plugins/d.py 2010-01-10 05:25:22 +0000
@@ -44,9 +44,10 @@
44 help = 'Index format: non'44 help = 'Index format: non'
4545
4646
47
47class DoemainOfOurOwn(BasicScraper):48class DoemainOfOurOwn(BasicScraper):
48 latestUrl = 'http://www.furfolk.com/'49 latestUrl = 'http://www.doemain.com/'
49 imageUrl = 'http://www.furfolk.com/index.cgi/%s'50 imageUrl = 'http://www.doemain.com/index.cgi/%s'
50 imageSearch = compile(r"<img border='0' width='\d+' height='\d+' src='(/strips/\d{4}/\d{6}-[^\']+)'")51 imageSearch = compile(r"<img border='0' width='\d+' height='\d+' src='(/strips/\d{4}/\d{6}-[^\']+)'")
51 prevSearch = compile(r'<a href="(/index\.cgi/\d{4}-\d{2}-\d{2})"><img width="\d+" height="\d+" border="\d+" alt="Previous Strip"')52 prevSearch = compile(r'<a href="(/index\.cgi/\d{4}-\d{2}-\d{2})"><img width="\d+" height="\d+" border="\d+" alt="Previous Strip"')
52 help = 'Index format: yyyy-mm-dd'53 help = 'Index format: yyyy-mm-dd'
5354
=== modified file 'dosage/plugins/e.py'
--- dosage/plugins/e.py 2010-01-06 22:54:50 +0000
+++ dosage/plugins/e.py 2010-01-10 05:25:22 +0000
@@ -21,6 +21,18 @@
2121
2222
2323
24class Eriadan(BasicScraper):
25 imageUrl = 'http://www.shockdom.com/eriadan/?p=%s'
26 imageSearch = compile(r'title="[^"]+?" src="http://www\.shockdom\.com/eriadan/(wp-content/uploads/.+?)"')
27 prevSearch = compile(r"<link rel='prev' title='.+?' href='http://www\.shockdom\.com/eriadan/(\?p=.+?)'")
28 starter = indirectStarter('http://www.shockdom.com/eriadan/', compile(r'<ul class="latest2">[^<]+?<li class="list-title"><a href="(http://www\.shockdom.com/eriadan/\?p=.+?)"'))
29 help = 'Index format: nnn (unpadded)'
30
31 def namer(cls, imageUrl, pageUrl):
32 return '%d' % (int(compile(r'p=(\d+)').search(pageUrl).group(1)))
33
34
35
24class ElGoonishShive(BasicScraper):36class ElGoonishShive(BasicScraper):
25 name = 'KeenSpot/ElGoonishShive'37 name = 'KeenSpot/ElGoonishShive'
26 latestUrl = 'http://www.egscomics.com/'38 latestUrl = 'http://www.egscomics.com/'
@@ -58,14 +70,6 @@
58 help = 'God help us now!'70 help = 'God help us now!'
5971
6072
61class EntertainDome(BasicScraper):
62 latestUrl = 'http://entertain-dome.com/comic.php'
63 imageUrl = 'http://entertain-dome.com/comic.php?strip_id=%s'
64 imageSearch = compile(r'<img src="(img/comics/.+?)"')
65 prevSearch = compile(r'<a href="(\?strip_id=\d+?)"><img src="img/nav/ed_prev.gif"')
66 help = 'Index format: nnn (unpadded)'
67
68
6973
70class ErrantStory(BasicScraper):74class ErrantStory(BasicScraper):
71 latestUrl = 'http://www.errantstory.com/'75 latestUrl = 'http://www.errantstory.com/'
7276
=== modified file 'dosage/plugins/f.py'
--- dosage/plugins/f.py 2010-01-07 00:08:09 +0000
+++ dosage/plugins/f.py 2010-01-10 05:25:22 +0000
@@ -91,12 +91,6 @@
9191
9292
9393
94class Frump(PHPScraper):
95 basePath = 'http://thm.askee.net/comic/'
96 prevSearch = compile(r'<a href="(http://thm\.askee\.net/comic/daily\.php\?date=\d{6})">Previous', IGNORECASE)
97
98
99
100class FantasyRealms(BasicScraper):94class FantasyRealms(BasicScraper):
101 imageUrl = 'http://www.fantasyrealmsonline.com/manga/%s.php'95 imageUrl = 'http://www.fantasyrealmsonline.com/manga/%s.php'
102 imageSearch = compile(r'<img src="(\d{1,4}.\w{3,4})" width="540"', IGNORECASE)96 imageSearch = compile(r'<img src="(\d{1,4}.\w{3,4})" width="540"', IGNORECASE)
10397
=== modified file 'dosage/plugins/g.py'
--- dosage/plugins/g.py 2010-01-07 01:51:19 +0000
+++ dosage/plugins/g.py 2010-01-10 05:25:22 +0000
@@ -64,14 +64,6 @@
6464
6565
6666
67class GlueMeat(BasicScraper):
68 latestUrl = 'http://www.gluemeat.com/'
69 imageUrl = 'http://www.gluemeat.com/archives/%s.html'
70 imageSearch = compile(r'<img.+?src="(http://www.gluemeat.com/comics/\d{8}\..+?)"')
71 prevSearch = compile(r'(?:<a|<link rel="prev") href="(http://www.gluemeat.com/archives/\d{6}\.html)"(?!>Comment on this comic)(?:.+?</a> \]</font>)?')
72 help = 'Index format: nnnnnn'
73
74
75class Goats(BasicScraper):67class Goats(BasicScraper):
76 latestUrl = 'http://www.goats.com/'68 latestUrl = 'http://www.goats.com/'
77 imageUrl = 'http://www.goats.com/archive/%s.html'69 imageUrl = 'http://www.goats.com/archive/%s.html'
7870
=== modified file 'dosage/plugins/h.py'
--- dosage/plugins/h.py 2010-01-06 01:01:32 +0000
+++ dosage/plugins/h.py 2010-01-10 05:25:22 +0000
@@ -16,14 +16,14 @@
16class Heliothaumic(BasicScraper):16class Heliothaumic(BasicScraper):
17 latestUrl = 'http://thaumic.net/'17 latestUrl = 'http://thaumic.net/'
18 imageUrl = 'http://thaumic.net/%s'18 imageUrl = 'http://thaumic.net/%s'
19 imageSearch = compile(r'"(http://thaumic.net/comics/.+?)"')19 imageSearch = compile(r'<img src="(http://thaumic.net/comics/.+?)"')
20 prevSearch = compile(r'"(http://thaumic.net/.+?)".+?="prev"')20 prevSearch = compile(r'<div class="nav-previous"><a href="(http://thaumic.net/.+?)">')
21 help = 'Index format: yyyy/mm/dd/n(unpadded)-comicname'21 help = 'Index format: yyyy/mm/dd/n(unpadded)-comicname'
2222
2323
2424
25class Housd(BasicScraper):25class Housd(BasicScraper):
26 latestUrl = 'http://www.housd.net/'26 latestUrl = 'http://housd.net/archive_page.php?comicID=1284'
27 imageUrl = 'http://housd.net/archive_page.php?comicID=%s'27 imageUrl = 'http://housd.net/archive_page.php?comicID=%s'
28 imageSearch = compile(r'"(.+?/comics/.+?)"')28 imageSearch = compile(r'"(.+?/comics/.+?)"')
29 prevSearch = compile(r'"(h.+?comicID=.+?)".+?prev')29 prevSearch = compile(r'"(h.+?comicID=.+?)".+?prev')
3030
=== modified file 'dosage/plugins/i.py'
--- dosage/plugins/i.py 2009-12-15 06:55:27 +0000
+++ dosage/plugins/i.py 2010-01-10 05:25:22 +0000
@@ -46,8 +46,9 @@
46swo = inkTank('SorryWereOpen', 'SWO')46swo = inkTank('SorryWereOpen', 'SWO')
4747
4848
49
49class IlmanNaista(BasicScraper):50class IlmanNaista(BasicScraper):
50 latestUrl = 'http://kvantti.tky.fi/in/archive_end.shtml'51 latestUrl = 'http://kvantti.tky.fi/in/archive_end.shtml'
51 imageUrl = 'http://kvantti.tky.fi/in/%s.shtml'52 imageUrl = 'http://kvantti.tky.fi/in/%s.shtml'
52 imageSearch = compile(r'<img src="(kuvat/in_\d+_web.png)" alt="Ilman naista -strippi" />', IGNORECASE)53 imageSearch = compile(r'<img src="(kuvat/in_.+?)"', IGNORECASE)
53 prevSearch = compile(r'<a href="(\d+.shtml)"><img width="90" height="45" src="deco/edellinen.png" alt="Edellinen"/></a>', IGNORECASE)54 prevSearch = compile(r'<a href="(\d+.shtml)"><img width="90" height="45" src="deco/edellinen.png" alt="Edellinen"/></a>')
5455
=== modified file 'dosage/plugins/j.py'
--- dosage/plugins/j.py 2009-12-15 06:55:27 +0000
+++ dosage/plugins/j.py 2010-01-10 05:25:22 +0000
@@ -1,16 +1,18 @@
1from re import compile1from re import compile, MULTILINE
22
3from dosage.helpers import BasicScraper3from dosage.helpers import BasicScraper
44
55
6
6class Jack(BasicScraper):7class Jack(BasicScraper):
7 latestUrl = 'http://www.pholph.com/'8 latestUrl = 'http://www.pholph.com/'
8 imageUrl = 'http://www.pholph.com/index.php?Strip=%s'9 imageUrl = 'http://www.pholph.com/strip.php?id=5&sid=%s'
9 imageSearch = compile(r'<img src="(strips/Jack\d{8}\..+?)"')10 imageSearch = compile(r'<img src="(./artwork/.+?/Jack.+?)"')
10 prevSearch = compile(r'<a href="(index\.php\?Strip=\d+)">Previous Strip</a>')11 prevSearch = compile(r'\|<a href="(.+?)">Previous Strip</a>')
11 help = 'Index format: n (unpadded)'12 help = 'Index format: n (unpadded)'
1213
1314
15
14class JerkCity(BasicScraper):16class JerkCity(BasicScraper):
15 latestUrl = 'http://www.jerkcity.com/'17 latestUrl = 'http://www.jerkcity.com/'
16 imageUrl = 'http://www.jerkcity.com/jerkcity%s'18 imageUrl = 'http://www.jerkcity.com/jerkcity%s'
@@ -19,17 +21,19 @@
19 help = 'Index format: unknown'21 help = 'Index format: unknown'
2022
2123
24
22class JoeAndMonkey(BasicScraper):25class JoeAndMonkey(BasicScraper):
23 latestUrl = 'http://www.joeandmonkey.com/'26 latestUrl = 'http://www.joeandmonkey.com/'
24 imageUrl = 'http://www.joeandmonkey.com/index.php?pageNum_Recordset2=%s'27 imageUrl = 'http://www.joeandmonkey.com/%s'
25 imageSearch = compile(r'"(comic/.+?)"')28 imageSearch = compile(r'"(/comic/[^"]+)"')
26 prevSearch = compile(r'"(/index.php\?.+?)">Previous')29 prevSearch = compile(r"<a href='(/\d+)'>Previous")
27 help = 'Index format: nnn'30 help = 'Index format: nnn'
2831
2932
33
30class JoyOfTech(BasicScraper):34class JoyOfTech(BasicScraper):
31 latestUrl = 'http://www.geekculture.com/joyoftech/index.html'35 latestUrl = 'http://www.geekculture.com/joyoftech/index.html'
32 imageUrl = 'http://www.geekculture.com/joyoftech/joyarchives/%s.html'36 imageUrl = 'http://www.geekculture.com/joyoftech/joyarchives/%s.html'
33 imageSearch = compile(r'<img src="((?:\.\./)?joyimages/.+?)" alt="The Joy of tech comic"')37 imageSearch = compile(r'<img src="(joyimages/.+?|../joyimages/.+?)" alt="The Joy')
34 prevSearch = compile(r'<a href="((?:joyarchives/)?\d+\.html)">(?:<font[^>]*>)?<img[^>]*><br>[\s\n]*Previous Joy')38 prevSearch = compile(r'<a href="((?:joyarchives/)?\w+\.\w{3,4})">(?:<font[^>]*>)?<img[^>]*><br>[\s\n]*Previous Joy', MULTILINE)
35 help = 'Index format: nnn'39 help = 'Index format: nnn'
3640
=== modified file 'dosage/plugins/k.py'
--- dosage/plugins/k.py 2009-12-15 06:55:27 +0000
+++ dosage/plugins/k.py 2010-01-10 05:25:22 +0000
@@ -3,13 +3,18 @@
3from dosage.helpers import BasicScraper3from dosage.helpers import BasicScraper
44
55
6
6class KernelPanic(BasicScraper):7class KernelPanic(BasicScraper):
7 latestUrl = 'http://www.ubersoft.net/kpanic/'8 latestUrl = 'http://www.ubersoft.net/kpanic/'
8 imageUrl = 'http://www.ubersoft.net/kpanic/d/%s'9 imageUrl = 'http://www.ubersoft.net/kpanic/d/%s'
9 imageSearch = compile(r'"(/.+?comics/.+?)" ')10 imageSearch = compile(r'src="(.+?/kp/kp.+?)" ')
10 prevSearch = compile(r'</a>.+?"(.+?)".+?Previous')11 prevSearch = compile(r'<li class="previous"><a href="(.+?)">')
11 help = 'Index format: yyyymmdd.html'12 help = 'Index format: yyyymmdd.html'
1213
14 def namer(cls, imageUrl, pageUrl):
15 return imageUrl.split('/')[-1].split('.')[0]
16
17
1318
14class Key(BasicScraper):19class Key(BasicScraper):
15 latestUrl = 'http://key.shadilyn.com/latestpage.html'20 latestUrl = 'http://key.shadilyn.com/latestpage.html'
@@ -19,6 +24,7 @@
19 help = 'Index format: nnn'24 help = 'Index format: nnn'
2025
2126
27
22class Krakow(BasicScraper):28class Krakow(BasicScraper):
23 latestUrl = 'http://www.krakowstudios.com/'29 latestUrl = 'http://www.krakowstudios.com/'
24 imageUrl = 'http://www.krakowstudios.com/archive.php?date=%s'30 imageUrl = 'http://www.krakowstudios.com/archive.php?date=%s'
@@ -27,6 +33,7 @@
27 help = 'Index format: yyyymmdd'33 help = 'Index format: yyyymmdd'
2834
2935
36
30class KevinAndKell(BasicScraper):37class KevinAndKell(BasicScraper):
31 latestUrl = 'http://www.kevinandkell.com/'38 latestUrl = 'http://www.kevinandkell.com/'
32 imageUrl = 'http://www.kevinandkell.com/%s/kk%s%s.html'39 imageUrl = 'http://www.kevinandkell.com/%s/kk%s%s.html'
3340
=== modified file 'dosage/plugins/l.py'
--- dosage/plugins/l.py 2010-01-06 00:52:47 +0000
+++ dosage/plugins/l.py 2010-01-10 05:25:22 +0000
@@ -17,10 +17,11 @@
17 latestUrl = 'http://www.lastblood.net/main/'17 latestUrl = 'http://www.lastblood.net/main/'
18 imageUrl = 'http://www.lastblood.net/main/%s'18 imageUrl = 'http://www.lastblood.net/main/%s'
19 imageSearch = compile(r'(/comicfolder/.+?)" alt')19 imageSearch = compile(r'(/comicfolder/.+?)" alt')
20 prevSearch = compile(r'Previous C.+?"(http://www.lastblood.net/main/.+?)".+?</a>')20 prevSearch = compile(r'Previous Comic:</small><br />&laquo; <a href="(.+?)">')
21 help = 'Index format: yyyy/mm/dd/(page number and name)'21 help = 'Index format: yyyy/mm/dd/(page number and name)'
2222
2323
24
24class LesbianPiratesFromOuterSpace(BasicScraper):25class LesbianPiratesFromOuterSpace(BasicScraper):
25 latestUrl = 'http://rosalarian.com/lesbianpirates/'26 latestUrl = 'http://rosalarian.com/lesbianpirates/'
26 imageUrl = 'http://rosalarian.com/lesbianpirates/?p=%s'27 imageUrl = 'http://rosalarian.com/lesbianpirates/?p=%s'
@@ -29,6 +30,7 @@
29 help = 'Index format: n'30 help = 'Index format: n'
3031
3132
33
32class LethalDosesClassic(BasicScraper):34class LethalDosesClassic(BasicScraper):
33 latestUrl = 'http://www.lethaldoses.com/archives.php?stripnum=99'35 latestUrl = 'http://www.lethaldoses.com/archives.php?stripnum=99'
34 imageUrl = 'http://www.lethaldoses.com/archives.php?stripnum=%s'36 imageUrl = 'http://www.lethaldoses.com/archives.php?stripnum=%s'
@@ -37,69 +39,40 @@
37 help = 'Index format: n (unpadded)'39 help = 'Index format: n (unpadded)'
3840
3941
40class LifeOfConvenience(BasicScraper):
41 latestUrl = 'http://comic.idle-me.com/'
42 imageUrl = 'http://comic.idle-me.com/?strip_id=%s'
43 imageSearch = compile(r'<img src="(comics/\d{6}\..+?)"')
44 prevSearch = compile(r'<a href="(\?strip_id=\d+)">Previous</a>')
45 help = 'Index format: n (unpadded)'
46
4742
48class Lint(BasicScraper):43class Lint(BasicScraper):
49 latestUrl = 'http://www.purnicellin.com/lint/'44 latestUrl = 'http://www.purnicellin.com/lint/'
50 imageUrl = 'http://www.purnicellin.com/lint/%s'45 imageUrl = 'http://www.purnicellin.com/lint/%s'
51 imageSearch = compile(r'(http:.+?comics/.+?)"')46 imageSearch = compile(r'<img src="(http://www.purnicellin.com/lint/comics/.+?)"')
52 prevSearch = compile(r'First.+?"(http.+?)".+?Previous</a>')47 prevSearch = compile(r'\| <a href="([^"]+)" rel="prev">')
53 help = 'Index format: nnn (yyyy/mm/dd/ddmmyyyy)'48 help = 'Index format: yyyy/mm/dd/num-name'
49
5450
5551
56class LookingForGroup(BasicScraper):52class LookingForGroup(BasicScraper):
57 latestUrl = 'http://www.lfgcomic.com/page/latest'53 latestUrl = 'http://www.lfgcomic.com/page/latest'
58 imageUrl = 'http://www.lfgcomic.com/page/%s'54 imageUrl = 'http://www.lfgcomic.com/page/%s'
59 imageSearch = compile(r'<img src="(http://archive.lfgcomic.com/.+?)"')55 imageSearch = compile(r'<img src="(http://archive.lfgcomic.com/.+?)"')
60 prevSearch = compile(r'"(/page/.+?)".+?="Previous')56 prevSearch = compile(r'<a href="(.+?)"><img[^>]+?src="http://images.lfgcomic.com/comic-nav-top_0_1.jpg"')
61 help = 'Index format: nnn'57 help = 'Index format: nnn'
6258
6359
60
64class Loserz(BasicScraper):61class Loserz(BasicScraper):
65 latestUrl = 'http://loserz.scribblekid.org/'62 latestUrl = 'http://bukucomics.com/loserz/'
66 imageUrl = 'http://loserz.scribblekid.org/index.php?id=%s'63 imageUrl = 'http://bukucomics.com/loserz/go/%s'
67 imageSearch = compile(r"<img src=\'(comics/\d{8}\..+?)\' border=1>")64 imageSearch = compile(r'<img src="(http://bukucomics.com/loserz/comics/.+?)"')
68 prevSearch = compile(r"<a href=\'(index\.php\?id=\d+)\'><img src=\'elements/back.gif\' alt=\'Previous Comic\'")65 prevSearch = compile(r'<a href="(.+?)"> &nbsp;&lt;&nbsp;')
69 help = 'Index format: n (unpadded)'66 help = 'Index format: n (unpadded)'
7067
7168
69
72class LittleGamers(BasicScraper):70class LittleGamers(BasicScraper):
73 latestUrl = 'http://www.little-gamers.com/'71 latestUrl = 'http://www.little-gamers.com/'
74 imageUrl = 'http://www.little-gamers.com/index.php?id=%s'72 imageUrl = 'http://www.little-gamers.com/%s'
75 imageSearch = compile(r'<img src="(http://www.little-gamers.com/comics/\d+\..+?)"')73 imageSearch = compile(r'<img src="(http://www.little-gamers.com/comics/[^"]+)"')
76 prevSearch = compile(r'<a href="(index.php\?comicID=\d+?)">(?:Previous|PREVIOUS)</a>')74 prevSearch = compile(r'href="(.+?)"><img id="comic-nav-prev"')
77 help = 'Index format: n (unpadded)'75 help = 'Index format: yyyy/mm/dd/name'
78
79 def namer(cls, imageUrl, pageUrl):
80 return '%d' % (int(imageUrl.split('/')[-1].split('.')[0]),)
81
82
83# XXX: This comic no longer appears to be (easily) traversable.
84#lethalDoses = BasicScraper(
85# name='LethalDoses',
86# latestUrl='http://www.lethaldoses.com/',
87# imageUrl='http://www.lethaldoses.com/view.php?date=%s',
88# imageSearch=compile(r'<img src="(comics/strip_\d{3}\..*?)"[^>]*>')
89# prevSearch=compile(r'<a href=[\'"](/?index2\.php\?strip_id=\d+)[\'"]><img.+?src=[\'"]\./images/nav_prev.gif[\'"]'),
90# help='Index format: yyyy-mm-dd',
91# namer=queryNamer('date', usePageUrl=True))
92
93# XXX: not quite sure what's going on here, but there seem to be two comics at
94# this site now, not one
95#laurasComics = BasicScraper(
96# name='LaurasComics',
97# latestUrl='http://www.laurascomics.com/',
98# imageUrl='http://www.laurascomics.com/index.php?comicid=%s',
99# imageSearch=compile(r'<img src=(/showcomic.php\?comicid=\d+)>', IGNORECASE),
100# prevSearch=compile(r'<a href="(index.php\?comicid=\d+)"><img src="/images/gprev.gif"', IGNORECASE),
101# help='Index format: n (unpadded)',
102# namer=queryNamer('comicid'))
10376
10477
10578
10679
=== modified file 'dosage/plugins/m.py'
--- dosage/plugins/m.py 2009-12-15 06:55:27 +0000
+++ dosage/plugins/m.py 2010-01-10 05:25:22 +0000
@@ -11,6 +11,7 @@
11 help = 'Index format: (none)'11 help = 'Index format: (none)'
1212
1313
14
14class MagicHigh(BasicScraper):15class MagicHigh(BasicScraper):
15 latestUrl = 'http://www.doomnstuff.com/magichigh/index.php'16 latestUrl = 'http://www.doomnstuff.com/magichigh/index.php'
16 imageUrl = 'http://www.doomnstuff.com/magichigh/index.php?strip_id=%s'17 imageUrl = 'http://www.doomnstuff.com/magichigh/index.php?strip_id=%s'
@@ -19,13 +20,6 @@
19 help = 'Index format: n'20 help = 'Index format: n'
2021
2122
22class MakeWithTheFunny(BasicScraper):
23 latestUrl = 'http://www.mwtfunny.com/'
24 imageUrl = 'http://www.mwtfunny.com/index.php?ComicID=%s'
25 imageSearch = compile(r'<img src=".+?(strips/\d{4}-\d{2}-\d{2}\..+?)">')
26 prevSearch = compile(r'href="(index.php\?ComicID=.+?)" alt=".+?previous')
27 help = 'Index format: n (unpadded)'
28
2923
30class Marilith(BasicScraper):24class Marilith(BasicScraper):
31 latestUrl = 'http://www.marilith.com/'25 latestUrl = 'http://www.marilith.com/'
@@ -35,14 +29,16 @@
35 help = 'Index format: yyyymmdd'29 help = 'Index format: yyyymmdd'
3630
3731
32
38class MarryMe(BasicScraper):33class MarryMe(BasicScraper):
39 latestUrl = 'http://marrymemovie.com/main/'34 latestUrl = 'http://marrymemovie.com/main/'
40 imageUrl = 'http://marrymemovie.com/main/%s'35 imageUrl = 'http://marrymemovie.com/main/%s'
41 imageSearch = compile(r'(/comicfolder/.+?)"')36 imageSearch = compile(r'(/comicfolder/.+?)"')
42 prevSearch = compile(r'Previous.+?(/main/.+?)">Page')37 prevSearch = compile(r'Previous Comic:</small><br />&#171; <a href="(.+?)">')
43 help = 'Index format: good luck !'38 help = 'Index format: good luck !'
4439
4540
41
46class MegaTokyo(BasicScraper):42class MegaTokyo(BasicScraper):
47 latestUrl = 'http://www.megatokyo.com/'43 latestUrl = 'http://www.megatokyo.com/'
48 imageUrl = 'http://www.megatokyo.com/strip/%s'44 imageUrl = 'http://www.megatokyo.com/strip/%s'
@@ -59,12 +55,14 @@
59 help = 'Index format: mm/dd/yyyy'55 help = 'Index format: mm/dd/yyyy'
6056
6157
58
62class MacHall(BasicScraper):59class MacHall(BasicScraper):
63 latestUrl = 'http://www.machall.com/'60 latestUrl = 'http://www.machall.com/'
64 imageUrl = 'http://www.machall.com/index.php?strip_id=%s'61 imageUrl = 'http://www.machall.com/view.php?date=%s'
65 imageSearch = compile(r'<img src="(comics/\d{4}\d{2}\d{2}\..*?)" border=0>')62 imageSearch = compile(r'<img src="(comics/.+?)"')
66 prevSearch = compile(r'<a href="(view\.php\?date=\d{4}-\d{2}-\d{2})"><img border=0 src=\'drop_shadow/previous.gif\'>')63 prevSearch = compile(r'<a href="(.+?)"><img[^>]+?src=\'drop_shadow/previous.gif\'>')
67 help = 'Index format: n (unpadded)'64 help = 'Index format: yyyy-mm-dd'
65
6866
6967
70class Misfile(BasicScraper):68class Misfile(BasicScraper):
@@ -76,10 +74,6 @@
76 namer = queryNamer('pageCalled')74 namer = queryNamer('pageCalled')
7775
7876
79class MinesBigger(BasicScraper):
80 basePath = 'http://minesbigger.novablade.com/phpcomic/'
81 prevSearch = compile(r'<a href="(http://minesbigger\.novablade\.com/phpcomic/daily\.php\?date=\d{6})"><img src="../../images/phpprevious.gif')
82
8377
84class MysteriesOfTheArcana(BasicScraper):78class MysteriesOfTheArcana(BasicScraper):
85 latestUrl = 'http://mysteriesofthearcana.com/'79 latestUrl = 'http://mysteriesofthearcana.com/'
@@ -89,6 +83,7 @@
89 help = 'Index format: n (unpadded)'83 help = 'Index format: n (unpadded)'
9084
9185
86
92class MysticRevolution(BasicScraper):87class MysticRevolution(BasicScraper):
93 latestUrl = 'http://www.mysticrev.com/index.php'88 latestUrl = 'http://www.mysticrev.com/index.php'
94 imageUrl = 'http://www.mysticrev.com/index.php?cid=%s'89 imageUrl = 'http://www.mysticrev.com/index.php?cid=%s'
9590
=== modified file 'dosage/plugins/n.py'
--- dosage/plugins/n.py 2010-01-06 00:59:37 +0000
+++ dosage/plugins/n.py 2010-01-10 05:25:22 +0000
@@ -1,6 +1,6 @@
1from re import compile, IGNORECASE1from re import compile, IGNORECASE
22
3from dosage.helpers import BasicScraper, indirectStarter3from dosage.helpers import BasicScraper, indirectStarter, PHPScraper
44
55
6class NamirDeiter(BasicScraper):6class NamirDeiter(BasicScraper):
@@ -19,12 +19,14 @@
19 help = 'Index format: yyyy-mm-dd'19 help = 'Index format: yyyy-mm-dd'
2020
2121
22
22class NeoEarth(BasicScraper):23class NeoEarth(BasicScraper):
23 latestUrl = 'http://www.neo-earth.com/latest.php'24 latestUrl = 'http://www.neo-earth.com/NE/'
24 imageUrl = 'http://www.neo-earth.com/daily.php?date=%s'25 imageUrl = 'http://www.neo-earth.com/NE/index.php?date=%s'
25 imageSearch = compile(r'(/comics/.+?)"')26 imageSearch = compile(r'<img src="(strips/.+?)"')
26 prevSearch = compile(r'first.+?(/daily.+?)".+?prev')27 prevSearch = compile(r'<a href="(.+?)">Previous</a>')
27 help = 'Index format: yymmdd'28 help = 'Index format: yyyy-mm-dd'
29
2830
2931
30class Nervillsaga(BasicScraper):32class Nervillsaga(BasicScraper):
@@ -35,20 +37,23 @@
35 help = 'Index format: nnn'37 help = 'Index format: nnn'
3638
3739
40
38class NewAdventuresOfBobbin(BasicScraper):41class NewAdventuresOfBobbin(BasicScraper):
39 latestUrl = 'http://bobbin-comic.com/'42 latestUrl = 'http://bobbin-comic.com/'
40 imageUrl = 'http://bobbin-comic.com/show.php?id=%s'43 imageUrl = 'http://www.bobbin-comic.com/wordpress/?p=%s'
41 imageSearch = compile(r'"(\./strips/.*?)"')44 imageSearch = compile(r'<img src="(http://www.bobbin-comic.com/wordpress/comics/.+?)"')
42 prevSearch = compile(r'"(show.php\?[^"\r\n]+)">PREVIOUS')45 prevSearch = compile(r'<a href="(.+?)"><span class="prev">')
43 help = 'Index format: n (unpadded)'46 help = 'Index format: n'
47
4448
4549
46class NewWorld(BasicScraper):50class NewWorld(BasicScraper):
47 latestUrl = 'http://www.tfsnewworld.com/'51 latestUrl = 'http://www.tfsnewworld.com/'
48 imageUrl = 'http://www.tfsnewworld.com/index.php?date=%s'52 imageUrl = 'http://www.tfsnewworld.com/%s'
49 imageSearch = compile(r'<(?:img|embed)[^>]+src="([^"]+/\w+/\d+\.[^"]+)"')53 imageSearch = compile(r'<img src="(http://www.tfsnewworld.com/comics/.+?)"')
50 prevSearch = compile(r'class="nav_back"[^>]+href="(/index\.php\?date=\d+)"')54 prevSearch = compile(r'<div class="nav-previous"><a href="([^"]+)" rel="prev">')
51 help = 'Index format: yyyymmdd'55 help = 'Index format: yyyy/mm/dd/stripn'
56
5257
5358
54class Nicky510(BasicScraper):59class Nicky510(BasicScraper):
@@ -59,20 +64,14 @@
59 help = 'Index format: non'64 help = 'Index format: non'
6065
6166
62class Nihilism(BasicScraper):
63 latestUrl = 'http://nihilism.danseibi.net/'
64 imageUrl = 'http://nihilism.danseibi.net/?date=%s'
65 imageSearch = compile(r'"(strips/.+?)"')
66 prevSearch = compile(r'"(.+?)">previous')
67 help = 'Index format: yyyymmdd'
68
6967
70class NoNeedForBushido(BasicScraper):68class NoNeedForBushido(BasicScraper):
71 latestUrl = 'http://www.noneedforbushido.com/archive.php'69 latestUrl = 'http://www.noneedforbushido.com/latest/'
72 imageUrl = 'http://www.noneedforbushido.com/archive.php?strip_id=%s'70 imageUrl = 'http://www.noneedforbushido.com/%s'
73 imageSearch = compile(r'"(istrip_files/strips/.+?)"')71 imageSearch = compile(r'<div class="comics"><img src="([^"]+)"')
74 prevSearch = compile(r'</a><a href="(archive.php\?strip_id=.+?)".+?_back')72 prevSearch = compile(r'<a href="([^"]+)" title="[^"]*" class="previous-comic-link')
75 help = 'Index format: nnn'73 help = 'Index format: yyyy/comic/nnn'
74
7675
7776
78class Nukees(BasicScraper):77class Nukees(BasicScraper):
@@ -83,20 +82,56 @@
83 help = 'Index format: yyyymmdd.html'82 help = 'Index format: yyyymmdd.html'
8483
8584
85
86class NuklearPower(BasicScraper):86class NuklearPower(BasicScraper):
87 basePath = 'http://www.nuklearpower.com/'87 abstract = True
88 prevSearch = compile(r'<a href="(http://www\.nuklearpower\.com/daily\.php\?date=\d{6})" class="nav3">Previous Comic')88 imageSearch = compile(r'<img src="(http://www.nuklearpower.com/comics/.+?)"')
8989 prevSearch = compile(r'><a href="(.+?)">Previous</a>')
9090 help = 'Index format: yyyy/mm/dd/name'
91class NekoTheKitty(BasicScraper):91
92 @property
93 def baseUrl(self):
94 return 'http://www.nuklearpower.com/%s/' % (self.shortName,)
95
96 def starter(self):
97 return self.baseUrl
98
99 @property
100 def imageUrl(self):
101 return self.baseUrl + '%s'
102
103
104
105class NP8BitTheater(NuklearPower):
106 name = 'NuklearPower/8BitTheater'
107 shortName = '8-bit-theater'
108
109
110
111class NPWarbot(NuklearPower):
112 name = 'NuklearPower/Warbot'
113 shortName = 'warbot'
114
115
116
117class NPHIKYM(NuklearPower):
118 name = 'NuklearPower/HowIKilledYourMaster'
119 shortName = 'hikym'
120
121
122
123class NPAtomicRobo(NuklearPower):
124 name = 'NuklearPower/AtomicRobo'
125 shortName = 'atomic-robo'
126
127
128
129class NekoTheKitty(PHPScraper):
92 basePath = 'http://www.nekothekitty.net/cusp/'130 basePath = 'http://www.nekothekitty.net/cusp/'
131 latestUrl = 'latest.php'
93 prevSearch = compile(r"<a href=\"(http://www\.nekothekitty\.net/cusp/daily\.php\?date=\d+)\"><img[^>]+alt='Previous Comic'")132 prevSearch = compile(r"<a href=\"(http://www\.nekothekitty\.net/cusp/daily\.php\?date=\d+)\"><img[^>]+alt='Previous Comic'")
94133
95134
96class NeoGreenwood(BasicScraper):
97 basePath = 'http://neogreenwood.1upshop.com/'
98 prevSearch = compile(r'<a href="(http://neogreenwood\.1upshop\.com/daily\.php\?date=\d{6})"><img src="http://neogreenwood.1upshop.com/nav/sbac.gif')
99
100135
101class NichtLustig(BasicScraper):136class NichtLustig(BasicScraper):
102 imageUrl = 'http://www.nichtlustig.de/toondb/%s.html'137 imageUrl = 'http://www.nichtlustig.de/toondb/%s.html'
103138
=== modified file 'dosage/plugins/o.py'
--- dosage/plugins/o.py 2010-01-06 19:43:17 +0000
+++ dosage/plugins/o.py 2010-01-10 05:25:22 +0000
@@ -11,36 +11,32 @@
11 help = 'Index format: yyyy-mm-dd/n-name/'11 help = 'Index format: yyyy-mm-dd/n-name/'
1212
1313
14
14class OddFish(BasicScraper):15class OddFish(BasicScraper):
15 latestUrl = 'http://www.odd-fish.net/'16 latestUrl = 'http://www.odd-fish.net/'
16 imageUrl = 'http://www.odd-fish.net/viewing.php?comic_id=%s'17 imageUrl = 'http://www.odd-fish.net/viewing.php?&comic_id=%s'
17 imageSearch = compile(r'<img src="(images/.+?)"')18 imageSearch = compile(r'<img src="(images/\d{1,4}.\w{3,4})" ')
18 prevSearch = compile(r'"(viewing.php.+?)".+?older')19 prevSearch = compile(r'<a href="(.+?)"><img src="http://www.odd-fishing.net/i/older.gif" ')
19 help = 'Index format: n (unpadded)'20 help = 'Index format: n (unpadded)'
2021
2122
23
22class OhMyGods(BasicScraper):24class OhMyGods(BasicScraper):
23 latestUrl = 'http://ohmygods.timerift.net/'25 latestUrl = 'http://ohmygods.co.uk/'
24 imageUrl = 'http://ohmygods.timerift.net/strips/%s.php'26 imageUrl = 'http://ohmygods.co.uk/strips/%s'
25 imageSearch = compile(r'<\!-- \#BeginEditable "strip" --><img src="((?:strips/\d{4}/\d{2}/)?\d{2}\..+?)" width="\d+" height="\d+" border="\d+">')27 imageSearch = compile(r'<p class="omgs-strip"><img src="(/system/files/.+?)"')
26 prevSearch = compile(r'<a href="((?:strips/\d{4}/\d{2}/)?\d{2}\.php)">previous')28 prevSearch = compile(r'<li class="custom_pager_prev"><a href="(/strips/.+?)"')
27 help = 'Index format: yyyy/mm/dd'29 help = 'Index format: yyyy-mm-dd'
2830
29
30class OkayPants(BasicScraper):
31 latestUrl = 'http://www.okaypants.com/comic.php'
32 imageUrl = 'http://www.okaypants.com/comic.php?st=%s'
33 imageSearch = compile(r'"(comic/.+?)"')
34 prevSearch = compile(r'"(.+?)".+previous')
35 help = 'Index format: unknown'
3631
3732
38class OnTheEdge(BasicScraper):33class OnTheEdge(BasicScraper):
39 latestUrl = 'http://www.ontheedgecomics.com'34 latestUrl = 'http://www.ontheedgecomics.com/'
40 imageUrl = 'http://www.ontheedgecomics.com/comic/%s'35 imageUrl = 'http://ontheedgecomics.com/comic/ote%s'
41 imageSearch = compile(r'ontheedgecomics.com(/comics/.+?)"')36 imageSearch = compile(r'<img src="(http://ontheedgecomics.com/comics/.+?)"')
42 prevSearch = compile(r'previous"><a href="http://ontheedgecomics.com(/comic.+?)">&lsaquo; Previous<')37 prevSearch = compile(r'<a href="([^"]+)" rel="prev">')
43 help = 'Index format: non'38 help = 'Index format: nnn (unpadded)'
39
4440
4541
46class OneQuestion(BasicScraper):42class OneQuestion(BasicScraper):
4743
=== modified file 'dosage/plugins/p.py'
--- dosage/plugins/p.py 2010-01-06 19:26:02 +0000
+++ dosage/plugins/p.py 2010-01-10 05:25:22 +0000
@@ -74,13 +74,6 @@
74 help = 'Index format: nnn'74 help = 'Index format: nnn'
7575
7676
77class PockyBot(BasicScraper):
78 latestUrl = 'http://www.pockybot.com/home/index.php'
79 imageUrl = 'http://www.pockybot.com/home/archive.php?did=%s'
80 imageSearch = compile(r'<img src="(\.\./strips/comic\d+\..+?)">')
81 prevSearch = compile(r'<a href="(\.\./home/archive\.php\?bdid=\d+)">')
82 help = 'Index format: n (unpadded)'
83
8477
85class PiledHigherAndDeeper(BasicScraper):78class PiledHigherAndDeeper(BasicScraper):
86 starter = bounceStarter('http://www.phdcomics.com/comics/archive.php', compile(r'<a href=(archive\.php\?comicid=\d+)><img height=52 width=49 src=images/next_button\.gif border=0 align=middle>'))79 starter = bounceStarter('http://www.phdcomics.com/comics/archive.php', compile(r'<a href=(archive\.php\?comicid=\d+)><img height=52 width=49 src=images/next_button\.gif border=0 align=middle>'))
8780
=== modified file 'dosage/plugins/q.py'
--- dosage/plugins/q.py 2009-12-15 06:55:27 +0000
+++ dosage/plugins/q.py 2010-01-10 05:25:22 +0000
@@ -3,6 +3,7 @@
3from dosage.helpers import BasicScraper3from dosage.helpers import BasicScraper
44
55
6
6class QuestionableContent(BasicScraper):7class QuestionableContent(BasicScraper):
7 latestUrl = 'http://www.questionablecontent.net/'8 latestUrl = 'http://www.questionablecontent.net/'
8 imageUrl = 'http://www.questionablecontent.net/view.php?comic=%s'9 imageUrl = 'http://www.questionablecontent.net/view.php?comic=%s'
@@ -11,9 +12,10 @@
11 help = 'Index format: n (unpadded)'12 help = 'Index format: n (unpadded)'
1213
1314
15
14class Qwantz(BasicScraper):16class Qwantz(BasicScraper):
15 latestUrl = 'http://www.qwantz.com/'17 latestUrl = 'http://www.qwantz.com/index.php'
16 imageUrl = 'http://www.qwantz.com/index.pl?comic=%s'18 imageUrl = 'http://www.qwantz.com/index.php?comic=%s'
17 imageSearch = compile(r'"(http://www.qwantz.com/comics/.+?)"')19 imageSearch = compile(r'<img src="(http://www.qwantz.com/comics/.+?)" class="comic"')
18 prevSearch = compile(r'(/archive/.+?)">previous')20 prevSearch = compile(r'"><a href="(.+?)">&larr; previous</a>')
19 help = 'Index format: n'21 help = 'Index format: n'
2022
=== modified file 'dosage/plugins/r.py'
--- dosage/plugins/r.py 2009-12-15 06:55:27 +0000
+++ dosage/plugins/r.py 2010-01-10 05:25:22 +0000
@@ -3,21 +3,6 @@
3from dosage.helpers import BasicScraper, bounceStarter3from dosage.helpers import BasicScraper, bounceStarter
44
55
6class RWWR(BasicScraper):
7 latestUrl = 'http://www.rwwr.com/'
8 imageUrl = 'http://www.rwwr.com/view.php?comic=%s'
9 imageSearch = compile(r'(http.+?/strips/.+?)>')
10 prevSearch = compile(r'"(view.+?)".+?back')
11 help = 'Index format: nnn'
12
13
14class RabidMonkeys(BasicScraper):
15 latestUrl = 'http://www.rabid-monkeys.com/'
16 imageUrl = 'http://rabid-monkeys.com/?file=%s'
17 imageSearch = compile(r"\'(comics/.*?)\'")
18 prevSearch = compile(r"</a><a href=\'(\?file=.*?)\'.*?nav-prev")
19 help = 'Index format: nnnn'
20
216
22class RadioactivePanda(BasicScraper):7class RadioactivePanda(BasicScraper):
23 latestUrl = 'http://www.radioactivepanda.com/'8 latestUrl = 'http://www.radioactivepanda.com/'
@@ -43,12 +28,14 @@
43 help = 'Index format: yymmdd)'28 help = 'Index format: yymmdd)'
4429
4530
31
46class RedString(BasicScraper):32class RedString(BasicScraper):
47 latestUrl = 'http://redstring.strawberrycomics.com/index.html'33 latestUrl = 'http://www.redstring.strawberrycomics.com/'
48 imageUrl = 'http://redstring.strawberrycomics.com/comic/%s.html'34 imageUrl = 'http://www.redstring.strawberrycomics.com/?p=%s'
49 imageSearch = compile(r'<IMG SRC="(.+?.jpg)" width="50')35 imageSearch = compile(r'<img src="(http://www.redstring.strawberrycomics.com/comics/.+?)"')
50 prevSearch = compile(r'\* <a href="(.+?)">PREVIOUS')36 prevSearch = compile(r'<a href="(.+?)">Previous Comic</a>')
51 help = 'Index format: chnn-pnn'37 help = 'Index format: nnn'
38
5239
5340
54class Roza(BasicScraper):41class Roza(BasicScraper):
5542
=== modified file 'dosage/plugins/s.py'
--- dosage/plugins/s.py 2010-01-06 20:31:05 +0000
+++ dosage/plugins/s.py 2010-01-10 05:25:22 +0000
@@ -12,30 +12,34 @@
12 help = 'Index format: n (unpadded)'12 help = 'Index format: n (unpadded)'
1313
1414
15
15class SamAndFuzzy(BasicScraper):16class SamAndFuzzy(BasicScraper):
16 latestUrl = 'http://www.samandfuzzy.com/'17 latestUrl = 'http://www.samandfuzzy.com/'
17 imageUrl = 'http://www.samandfuzzy.com/archive.php?comicID=%s'18 imageUrl = 'http://samandfuzzy.com/%s'
18 imageSearch = compile(r'(/comics/.+?)" alt')19 imageSearch = compile(r'(/comics/.+?)" alt')
19 prevSearch = compile(r'(/archive.php\?comicID=.+?)".+?nav_prev')20 prevSearch = compile(r'"><a href="(.+?)"><img src="imgint/nav_prev.gif"')
20 help = 'Index format: n'21 help = 'Index format: nnnn'
22
2123
2224
23class SarahZero(BasicScraper):25class SarahZero(BasicScraper):
24 latestUrl = 'http://www.sarahzero.com/'26 latestUrl = 'http://www.sarahzero.com/'
25 imageUrl = 'http://www.sarahzero.com/sz_%s.html'27 imageUrl = 'http://www.sarahzero.com/sz_%s.html'
26 imageSearch = compile(r'<img src="(z_(?:(?:spreads)|(?:temp)).+?)" alt=""')28 imageSearch = compile(r'<img src="(z_(?:(?:spreads)|(?:temp)).+?)" alt=""')
27 prevSearch = compile(r'href="(.+?)".+?sz_05_nav')29 prevSearch = compile(r'onmouseout="changeImages\(\'sz_05_nav\',\'z_site/sz_05_nav.gif\'\);return true" href="(sz_.+?)">')
28 help = 'Index format: nnnn'30 help = 'Index format: nnnn'
2931
3032
33
31class ScaryGoRound(BasicScraper):34class ScaryGoRound(BasicScraper):
32 latestUrl = 'http://www.scarygoround.com/'35 latestUrl = 'http://www.scarygoround.com/'
33 imageUrl = 'http://www.scarygoround.com/?date=%s'36 imageUrl = 'http://www.scarygoround.com/?date=%s'
34 imageSearch = compile(r'<img src="(strips/\d{8}\..{3})"')37 imageSearch = compile(r'<img src="(strips/\d{8}\..{3})"')
35 prevSearch = compile(r'<a href="(\?date=\d{8})" class=\'newmenus\'>Previous')38 prevSearch = compile(r'f><a href="(.+?)"><img src="site-images/previous.png"')
36 help = 'Index format: n (unpadded)'39 help = 'Index format: n (unpadded)'
3740
3841
42
39class SchoolBites(BasicScraper):43class SchoolBites(BasicScraper):
40 latestUrl = 'http://www.schoolbites.net/'44 latestUrl = 'http://www.schoolbites.net/'
41 imageUrl = 'http://www.schoolbites.net/d/%s.html'45 imageUrl = 'http://www.schoolbites.net/d/%s.html'
@@ -61,14 +65,16 @@
61 help = 'Index format: n (unpadded)'65 help = 'Index format: n (unpadded)'
6266
6367
68
64class SluggyFreelance(BasicScraper):69class SluggyFreelance(BasicScraper):
65 latestUrl = 'http://www.sluggy.com/'70 latestUrl = 'http://www.sluggy.com/'
66 imageUrl = 'http://www.sluggy.com/daily.php?date=%s'71 imageUrl = 'http://www.sluggy.com/comics/archives/daily/%s'
67 imageSearch = compile(r'<img[^>]+src="((?:http://www\.sluggy\.com|\.\.)/images/comics/\d{6}.*?\..+?)"')72 imageSearch = compile(r'<img src="(/images/comics/.+?)"')
68 prevSearch = compile(r'<a href="(http://www\.sluggy\.com/daily\.php\?date=\d{6})"><img border="." src="[^"]+" alt="Previous Comic">')73 prevSearch = compile(r'<a href="(.+?)"[^>]+?><span class="ui-icon ui-icon-seek-prev">')
69 help = 'Index format: yymmdd'74 help = 'Index format: yymmdd'
7075
7176
77
72class SodiumEyes(BasicScraper):78class SodiumEyes(BasicScraper):
73 imageUrl = 'http://sodiumeyes.com/%s'79 imageUrl = 'http://sodiumeyes.com/%s'
74 imageSearch = compile(r'(/comic/.+?)"')80 imageSearch = compile(r'(/comic/.+?)"')
@@ -78,13 +84,6 @@
78 compile(r'<a href="http://sodiumeyes.com/(\d\d\d\d.+?/)">'))84 compile(r'<a href="http://sodiumeyes.com/(\d\d\d\d.+?/)">'))
7985
8086
81class Sokora(BasicScraper):
82 latestUrl = 'http://www.sokora.com/'
83 imageUrl = 'http://www.sokora.com/index.php?strip_id=%s'
84 imageSearch = compile(r'<img.+?src="(istrip_files/strips/.+?)"')
85 prevSearch = compile(r'<a href="(/?index\.php\?strip_id=\d+?)"[^>]+><img[^>]+src="images/back_off.jpg"')
86 help = 'Index format: nnnn'
87
8887
89class SpareParts(BasicScraper):88class SpareParts(BasicScraper):
90 latestUrl = 'http://www.sparepartscomics.com/'89 latestUrl = 'http://www.sparepartscomics.com/'
@@ -94,30 +93,16 @@
94 help = 'Index format: yyyymmdd'93 help = 'Index format: yyyymmdd'
9594
9695
97class Spoonies(BasicScraper):
98 latestUrl = 'http://www.spoonies.net/main.htm'
99 imageUrl = 'http://www.spoonies.net/d/%s.htm'
100 imageSearch = compile(r'<img border="0" src="(.*?comics/\d{4}/\d{4}%20\d{3}\..+?)"')
101 prevSearch = compile(r'<a href="(.*?\d{6}\.htm)">')
102 help = 'Index format: yyyy/mmddyy'
103
104
105class Sternstaub(BasicScraper):
106 latestUrl = 'http://www.sternstaub.com/'
107 imageUrl = 'http://www.sternstaub.com/?page=archive&comicid=%s'
108 imageSearch = compile(r'<img src="(comics/.+?)" /><br />')
109 prevSearch = compile(r'<a href="(\?page=archive&comicid=\d{10})">Previous')
110 help = 'Index format: yyyymmddnn'
111
11296
113class Stubble(BasicScraper):97class Stubble(BasicScraper):
114 latestUrl = 'http://www.stubblecomics.com/'98 latestUrl = 'http://www.stubblecomics.com/d/20051230.html'
115 imageUrl = 'http://www.stubblecomics.com/d/%s.html'99 imageUrl = 'http://www.stubblecomics.com/d/%s.html'
116 imageSearch = compile(r'"(/comics/.*?)"')100 imageSearch = compile(r'"(/comics/.*?)"')
117 prevSearch = compile(r'"(.*?)".*?backarrow')101 prevSearch = compile(r'"(.*?)".*?backarrow')
118 help = 'Index format: yyyymmdd'102 help = 'Index format: yyyymmdd'
119103
120104
105
121class StrawberryDeathCake(BasicScraper):106class StrawberryDeathCake(BasicScraper):
122 latestUrl = 'http://rainchildstudios.com/strawberry/'107 latestUrl = 'http://rainchildstudios.com/strawberry/'
123 imageUrl = 'http://rainchildstudios.com/strawberry/?p=%s'108 imageUrl = 'http://rainchildstudios.com/strawberry/?p=%s'
@@ -126,22 +111,25 @@
126 help = 'Index format: n (good luck)'111 help = 'Index format: n (good luck)'
127112
128113
114
129class SuburbanTribe(BasicScraper):115class SuburbanTribe(BasicScraper):
130 latestUrl = 'http://www.suburbantribe.net/'116 latestUrl = 'http://www.pixelwhip.com/'
131 imageUrl = 'http://www.suburbantribe.net/showArchive.asp?archive=%s'117 imageUrl = 'http://www.pixelwhip.com/?p%s'
132 imageSearch = compile(r'<img src="(strips/\d+?.+?)"')118 imageSearch = compile(r'<img src="(http://www.pixelwhip.com/comics/.+?)"')
133 prevSearch = compile(r'<a href="(showArchive\.asp\?archive=\d+?)"><img src="images/PreviousStrip.gif"')119 prevSearch = compile(r'<div class="nav-previous"><a href="([^"]+)" rel="prev">')
134 help = 'Index format: yyyymmdd'120 help = 'Index format: nnnn'
121
135122
136123
137class SuccubusJustice(BasicScraper):124class SuccubusJustice(BasicScraper):
138 latestUrl = 'http://www.succubus-justice.com/Com%20main%20frame.htm'125 latestUrl = 'http://www.succubus-justice.com/Com%20main%20frame.htm'
139 imageUrl = 'http://www.succubus-justice.com/%s%%20frame.htm'126 imageUrl = 'http://www.succubus-justice.com/%s%%20frame.htm'
140 imageSearch = compile(r'<p align="center"><img src="((?:reworked%20gifs/)?[\w%]+\.\w+)"')127 imageSearch = compile(r'<p align="center"><img src="(/\d+.\w{3,4})"')
141 prevSearch = compile(r'<a href="([\w%]+\.htm)"[^>]*><img src="124.gif"')128 prevSearch = compile(r'<a href="(/[\w%]+\.htm|[\w%]+\.htm)"[^>]+?><img src="124.gif"')
142 help = 'Index format: nnn'129 help = 'Index format: nnn'
143130
144131
132
145class Supafine(BasicScraper):133class Supafine(BasicScraper):
146 latestUrl = 'http://www.supafine.com/comics/view.shtml'134 latestUrl = 'http://www.supafine.com/comics/view.shtml'
147 imageUrl = 'http://www.supafine.com/comics/news-archive-%s.shtml'135 imageUrl = 'http://www.supafine.com/comics/news-archive-%s.shtml'
@@ -150,24 +138,26 @@
150 help = 'Index format: dd-mm-yyyy'138 help = 'Index format: dd-mm-yyyy'
151139
152140
141
153class SomethingPositive(BasicScraper):142class SomethingPositive(BasicScraper):
154 starter = bounceStarter('http://www.somethingpositive.net/', compile(r'<a\s*\n?\s*href="(sp\d{8}\.shtml)">Next<br>Comic', MULTILINE | IGNORECASE))143 latestUrl = 'http://www.somethingpositive.net/'
155 imageUrl = 'http://www.somethingpositive.net/sp%s.shtml'144 imageUrl = 'http://www.somethingpositive.net/sp%s.shtml'
156 imageSearch = compile(r'<img src="(/?arch/.+\..+?)"')145 imageSearch = compile(r'<img src="(/arch/sp\d+.\w{3,4}|/sp\d+.\w{3,4})"')
157 prevSearch = compile(r'<a \n?href="(sp\d{8}\.shtml)">(?:<font size=1\nface=".+?"\nSTYLE=".+?">)?(?:Previous|<img src="images2/previous)', MULTILINE | IGNORECASE)146 prevSearch = compile(r'<a \n?href="(sp\d{8}\.shtml)">(<font size=1\nface=".+?"\nSTYLE=".+?">Previous|<img src="images2/previous|<img src="images/previous.gif")', MULTILINE | IGNORECASE)
158 help = 'Index format: mmddyyyy'147 help = 'Index format: mmddyyyy'
159148
160 def namer(cls, imageUrl, pageUrl):149 def namer(cls, imageUrl, pageUrl):
161 return pageUrl.split('/')[-1].split('.')[0]150 return pageUrl.split('/')[-1].split('.')[0]
162151
163152
153
164class SexyLosers(BasicScraper):154class SexyLosers(BasicScraper):
165 imageUrl = 'http://www.sexylosers.com/%s.html'155 imageUrl = 'http://www.sexylosers.com/%s.html'
166 imageSearch = compile(r'<img src\s*=\s*"\s*(comics/[\w\.]+?)"', IGNORECASE)156 imageSearch = compile(r'<img src\s*=\s*"\s*(comics/[\w\.]+?)"', IGNORECASE)
167 prevSearch = compile(r'<a href="(/\d{3}\.\w+?)"><font color = FFAAAA><<', IGNORECASE)157 prevSearch = compile(r'<a href="(/\d{3}\.\w+?)"><font color = FFAAAA><<', IGNORECASE)
168 help = 'Index format: nnn'158 help = 'Index format: nnn'
169 starter = indirectStarter('http://www.sexylosers.com/',159 starter = indirectStarter('http://www.sexylosers.com/',
170 compile(r'latest comic</b>: <a href = "(/[\w\.]+?)">', IGNORECASE))160 compile(r'SEXY LOSERS <A HREF="(.+?)">Latest SL Comic \(#\d+\)</A>', IGNORECASE))
171161
172 def namer(cls, imageUrl, pageUrl):162 def namer(cls, imageUrl, pageUrl):
173 index = pageUrl.split('/')[-1].split('.')[0]163 index = pageUrl.split('/')[-1].split('.')[0]
174164
=== modified file 'dosage/plugins/t.py'
--- dosage/plugins/t.py 2009-12-15 06:55:27 +0000
+++ dosage/plugins/t.py 2010-01-10 05:25:22 +0000
@@ -2,20 +2,24 @@
22
3from dosage.helpers import BasicScraper, indirectStarter3from dosage.helpers import BasicScraper, indirectStarter
44
5
6
5class TalesOfPylea(BasicScraper):7class TalesOfPylea(BasicScraper):
6 latestUrl = 'http://talesofpylea.com/'8 latestUrl = 'http://talesofpylea.com/'
7 imageUrl = 'http://talesofpylea.com/?p=%s'9 imageUrl = 'http://talesofpylea.com/%s/'
8 imageSearch = compile(r"/(comics/.+?)'")10 imageSearch = compile(r'<img src="(istrip_files/strips/.+?)"')
9 prevSearch = compile(r'\|.+?(\?p=.+?)">Back')11 prevSearch = compile(r' <a href="(.+?)">Back</a>')
10 help = 'Index format: non'12 help = 'Index format: nnn'
13
1114
1215
13class TheNoob(BasicScraper):16class TheNoob(BasicScraper):
14 latestUrl = 'http://www.thenoobcomic.com/'17 latestUrl = 'http://www.thenoobcomic.com/index.php'
15 imageUrl = 'http://www.thenoobcomic.com/daily/strip%s.html'18 imageUrl = 'http://www.thenoobcomic.com/index.php?pos=%'
16 imageSearch = compile(r'<img src="((\.\.)?/images/\d{8}\.jpg)"')19 imageSearch = compile(r'<img src="(/headquarters/comics/.+?)"')
17 prevSearch = compile(r'<a href="((/daily/)?strip\d+\.html)">Previous</a>')20 prevSearch = compile(r'<a class="comic_nav_previous_button" href="(.+?)"></a>')
18 help = 'Index format: n (unpadded)'21 help = 'Index format: nnnn'
22
1923
2024
21class TheOrderOfTheStick(BasicScraper):25class TheOrderOfTheStick(BasicScraper):
@@ -51,34 +55,19 @@
51 help = 'Index format: nnn'55 help = 'Index format: nnn'
5256
5357
58
54class TwoTwoOneFour(BasicScraper):59class TwoTwoOneFour(BasicScraper):
55 latestUrl = 'http://www.nitrocosm.com/comic.php'60 latestUrl = 'http://www.nitrocosm.com/go/2214_classic/'
56 imageUrl = 'http://www.nitrocosm.com/comic.php?page=%s'61 imageUrl = 'http://www.nitrocosm.com/go/2214_classic/%s/'
57 imageSearch = compile(r'<img src="(comic/\d{3}.+?)"')62 imageSearch = compile(r'<img class="gallery_display" src="([^"]+)"')
58 prevSearch = compile(r'<a href="(comic.php\?page=\d+)"><img src="http://www.nitrocosm.com/skins/07/back.gif"')63 prevSearch = compile(r'<a href="([^"]+)"[^>]*><button type="submit" class="nav_btn_previous">')
59 help = 'Index format: n (unpadded)'64 help = 'Index format: n (unpadded)'
6065
6166
62def theFray():
63 class TheFray(BasicScraper):
64 imageUrl = 'http://www.funnybonecomics.com/thefray/thefray_%s.shtml'
65 imageSearch = compile(r'<img src="(images/archive/thefray_\d{8}\..+?)"')
66 prevSearch = compile(r'<area href="(thefray_\d{8}\.shtml)" shape="rect" coords="[\d, ]+" alt="Previous">')
67 help = 'Index format: yyyymmdd'
68
69 comics = {
70 'ThePreface': 'thepreface',
71 'TheHole': 'thehole',
72 }
73
74 return dict((name, TheFray.make('TheFray/' + name, latestUrl='http://www.funnybonecomics.com/thefray/%s.html' % value)) for name, value in comics.iteritems())
75
76globals().update(theFray())
77
7867
79class TheWhiteboard(BasicScraper):68class TheWhiteboard(BasicScraper):
80 latestUrl = 'http://www.the-whiteboard.com/'69 latestUrl = 'http://www.the-whiteboard.com/'
81 imageUrl = 'http://www.the-whiteboard.com/autowb%s.html'70 imageUrl = 'http://www.the-whiteboard.com/auto%s.html'
82 imageSearch = compile(r'SRC="(auto.+?)">', IGNORECASE)71 imageSearch = compile(r'<img SRC="(autotwb\d{1,4}.+?|autowb\d{1,4}.+?)">', IGNORECASE)
83 prevSearch = compile(r'p<a href="(auto.+?.html)">prev', IGNORECASE)72 prevSearch = compile(r'&nbsp<a href="(.+?)">previous</a>', IGNORECASE)
84 help = 'Index format: n'73 help = 'Index format: twb or wb + n wg. twb1000'
8574
=== modified file 'dosage/plugins/v.py'
--- dosage/plugins/v.py 2010-01-07 02:02:42 +0000
+++ dosage/plugins/v.py 2010-01-10 05:25:22 +0000
@@ -1,4 +1,4 @@
1from re import compile, IGNORECASE1from re import compile, IGNORECASE, MULTILINE
22
3from dosage.helpers import BasicScraper3from dosage.helpers import BasicScraper
44
@@ -31,5 +31,6 @@
31class ViiviJaWagner(BasicScraper):31class ViiviJaWagner(BasicScraper):
32 latestUrl = 'http://www.hs.fi/viivijawagner/'32 latestUrl = 'http://www.hs.fi/viivijawagner/'
33 imageUrl = 'http://www.hs.fi/viivijawagner/%s'33 imageUrl = 'http://www.hs.fi/viivijawagner/%s'
34 imageSearch = compile(r'<img src="(/kuvat/iso_webkuva/\d+\.gif)" align="center" BORDER="0" ALT="" TITLE="">', IGNORECASE)34 imageSearch = compile(r'<img id="strip\d+"\s+src="([^"]+)"', IGNORECASE)
35 prevSearch = compile(r'<a href="(/viivijawagner/\d+)" class="pro85"><img src="http://www\.hs\.fi/static/hs/img/viivitaakse\.gif" width="60" height="56" border="0" alt="edellinen" title="edellinen">EDELLINEN</a>', IGNORECASE)35 prevSearch = compile(r'<a href="(.+?)"[^>]+?>\nEdellinen&nbsp;\n<img src="http://www.hs.fi/static/hs/img/viivitaakse.gif"', MULTILINE | IGNORECASE)
36 help = 'Index format: shrugs!'
3637
=== modified file 'dosage/plugins/w.py'
--- dosage/plugins/w.py 2010-01-06 00:34:04 +0000
+++ dosage/plugins/w.py 2010-01-10 05:25:22 +0000
@@ -27,14 +27,16 @@
27 help = 'Index format: n'27 help = 'Index format: n'
2828
2929
30
30class WhyTheLongFace(BasicScraper):31class WhyTheLongFace(BasicScraper):
31 latestUrl = 'http://www.absurdnotions.org/'32 latestUrl = 'http://www.absurdnotions.org/wtlf200709.html'
32 imageUrl = 'http://www.absurdnotions.org/wtlf%s.html'33 imageUrl = 'http://www.absurdnotions.org/wtlf%s.html'
33 imageSearch = compile(r'<IMG SRC="(lf\d+\..+?)"')34 imageSearch = compile(r'<img src="(http://www.absurdnotions.org/wtlf.+?|lf\d+.\w{1,4})"', IGNORECASE)
34 prevSearch = compile(r'<A.*?HREF="(wtlf\d+\.html)"><img SRC="nprev\.gif"')35 prevSearch = compile(r'HREF="(.+?)"><IMG SRC="nprev.gif" ')
35 help = 'Index format: yyyymm'36 help = 'Index format: yyyymm'
3637
3738
39
38class Wigu(BasicScraper):40class Wigu(BasicScraper):
39 latestUrl = 'http://www.wigu.com/wigu/'41 latestUrl = 'http://www.wigu.com/wigu/'
40 imageUrl = 'http://www.wigu.com/wigu/?date=%s'42 imageUrl = 'http://www.wigu.com/wigu/?date=%s'
@@ -58,14 +60,6 @@
58 help = 'Index format: n (unpadded)'60 help = 'Index format: n (unpadded)'
5961
6062
61class Winter(BasicScraper):
62 latestUrl = 'http://www.wintercomic.com/'
63 imageUrl = 'http://www.wintercomic.com/index.php?strip_id=%s'
64 imageSearch = compile(r'<img src=\'(/index\.php\?do_command=show_strip&strip_id=\d+.+?)\'')
65 prevSearch = compile(r'<a href=[\'"](/?index\.php\?strip_id=\d+)[\'"]><img.+?src=[\'"]\./img/lastpage.gif[\'"]')
66 help = 'Index format: n (unpadded)'
67 namer = queryNamer('strip_id')
68
6963
70class WorldOfWarcraftEh(BasicScraper):64class WorldOfWarcraftEh(BasicScraper):
71 latestUrl = 'http://woweh.com/'65 latestUrl = 'http://woweh.com/'

Subscribers

People subscribed via source and target branches

to all changes: