diff --git a/dosagelib/plugins/c.py b/dosagelib/plugins/c.py index a84c2e4b6..49341dee1 100644 --- a/dosagelib/plugins/c.py +++ b/dosagelib/plugins/c.py @@ -18,6 +18,15 @@ class CaptainSNES(_BasicScraper): help = 'Index format: yyyy/mm/dd/nnn-stripname' +class CaseyAndAndy(_BasicScraper): + latestUrl = 'http://www.galactanet.com/comic/' + stripUrl = latestUrl + 'view.php?strip=%s' + imageSearch = compile(tagre("img", "src", r'(Strip\d+\.gif)')) + prevSearch = compile(tagre("a", "href", r'(view\.php\?strip=\d+)') + + tagre("img", "src", r'previous\.gif')) + help = 'Index format: number' + + class CaribbeanBlue(_BasicScraper): latestUrl = 'http://cblue.katbox.net/' stripUrl = latestUrl + 'archive/%s' diff --git a/dosagelib/plugins/d.py b/dosagelib/plugins/d.py index f48057994..f24d6e35a 100644 --- a/dosagelib/plugins/d.py +++ b/dosagelib/plugins/d.py @@ -19,6 +19,15 @@ class DailyDose(_BasicScraper): help = 'Index format: stripname' +class Damonk(_BasicScraper): + latestUrl = 'http://www.damonk.com/' + stripUrl = latestUrl + 'd/%s.html' + imageSearch = compile(tagre("img", "src", r'(/comics/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(/d/\d+\.html)') + + tagre("img", "src", r'/images/previous_day\.gif')) + help = 'Index format: yyyymmdd' + + class DandyAndCompany(_BasicScraper): latestUrl = 'http://www.dandyandcompany.com/' stripUrl = None @@ -125,12 +134,11 @@ class DieselSweeties(_BasicScraper): return 'sw%02d' % (index,) - class DominicDeegan(_BasicScraper): latestUrl = 'http://www.dominic-deegan.com/' stripUrl = latestUrl + 'view.php?date=%s' imageSearch = compile(tagre("img", "src", r'(comics/\d+\.gif)')) - prevSearch = compile(r'"(view.php\?date=.+?)".+?prev21') + prevSearch = compile(r'"(view.php\?date=[^"]+)".+?prev21') help = 'Index format: yyyy-mm-dd' diff --git a/dosagelib/plugins/e.py b/dosagelib/plugins/e.py index 5375cb396..513582cd4 100644 --- a/dosagelib/plugins/e.py +++ b/dosagelib/plugins/e.py @@ -9,6 +9,14 @@ from ..scraper import _BasicScraper from ..util import tagre +class EdibleDirt(_BasicScraper): + latestUrl = 'http://eddirt.frozenreality.co.uk/' + stripUrl = latestUrl + 'index.php?id=%s' + imageSearch = compile(tagre("img", "src", r'(strips/[^"]+)')) + prevSearch = compile(tagre("a", "href", r"(index\.php\?id=\d+)")+"Previous") + help = 'Index format: number' + + class EerieCuties(_BasicScraper): latestUrl = 'http://www.eeriecuties.com/' stripUrl = latestUrl + 'strips-ec/%s' @@ -25,6 +33,15 @@ class Eriadan(_BasicScraper): help = 'Index format: yyyy/mm/dd/nnn (unpadded)' +class ElfOnlyInn(_BasicScraper): + latestUrl = 'http://www.elfonlyinn.net/' + stripUrl = latestUrl + 'd/%s.html' + imageSearch = compile(tagre("img", "src", r'(/comics/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(/d/\d+\.html)') + + tagre("img", "src", r'/images/previous_day\.gif')) + help = 'Index format: yyyymmdd' + + class ElGoonishShive(_BasicScraper): name = 'KeenSpot/ElGoonishShive' latestUrl = 'http://www.egscomics.com/' diff --git a/dosagelib/plugins/f.py b/dosagelib/plugins/f.py index 5af89ef7c..9f311dda4 100644 --- a/dosagelib/plugins/f.py +++ b/dosagelib/plugins/f.py @@ -50,6 +50,15 @@ class FlakyPastry(_BasicScraper): help = 'Index format: nnnn' +class Flemcomics(_BasicScraper): + latestUrl = 'http://www.flemcomics.com/' + stripUrl = latestUrl + 'd/%s.html' + imageSearch = compile(tagre("img", "src", r'(/comics/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(/d/\d+\.html)') + + tagre("img", "src", r'/images/previous_day\.jpg')) + help = 'Index format: yyyymmdd' + + class Flipside(_BasicScraper): latestUrl = 'http://flipside.keenspot.com/comic.php' stripUrl = latestUrl + '?i=%s' diff --git a/dosagelib/plugins/j.py b/dosagelib/plugins/j.py index 3594fc597..ee35b2412 100644 --- a/dosagelib/plugins/j.py +++ b/dosagelib/plugins/j.py @@ -7,6 +7,14 @@ from ..scraper import _BasicScraper from ..util import tagre +class JackCannon(_BasicScraper): + latestUrl = 'http://fancyadventures.com/' + stripUrl = latestUrl + '%s/' + imageSearch = compile(tagre("img", "src", r'(http://fancyadventures\.com/comics/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(http://fancyadventures\.com/[^"]+)', after="prev")) + help = 'Index format: yyyy/mm/dd/page-nnn' + + class JerkCity(_BasicScraper): latestUrl = 'http://www.jerkcity.com/' stripUrl = latestUrl + '_jerkcity%s.html' @@ -21,3 +29,12 @@ class JoeAndMonkey(_BasicScraper): imageSearch = compile(r'"(/comic/[^"]+)"') prevSearch = compile(r"Previous") help = 'Index format: nnn' + + +class JustAnotherEscape(_BasicScraper): + latestUrl = 'http://www.justanotherescape.com/' + stripUrl = latestUrl + 'index.cgi?date=%s' + imageSearch = compile(tagre("img", "src", r'(http://www\.justanotherescape\.com/comics/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(http://www\.justanotherescape\.com//index\.cgi\?date=\d+)') + + tagre("img", "alt", "Previous Comic")) + help = 'Index format: yyyymmdd' diff --git a/dosagelib/plugins/k.py b/dosagelib/plugins/k.py index 14573d73c..95e036f20 100644 --- a/dosagelib/plugins/k.py +++ b/dosagelib/plugins/k.py @@ -41,9 +41,27 @@ class KevinAndKell(_BasicScraper): self.currentUrl = self.stripUrl % tuple(map(int, index.split('-'))) +class KhaosKomix(_BasicScraper): + adult = True + latestUrl = 'http://www.khaoskomix.com/' + stripUrl = latestUrl + 'komix/%s' + imageSearch = compile(tagre("img", "src", r'(http://www\.khaoskomix\.com/komiximg/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(http://www\.khaoskomix\.com/komix/[^"]+)', after="Prev")) + help = 'Index format: stripname' + + class KillerKomics(_BasicScraper): latestUrl = 'http://www.killerkomics.com/web-comics/index_ang.cfm' stripUrl = 'http://www.killerkomics.com/web-comics/%s.cfm' imageSearch = compile(r'')) stripUrl = 'http://www.phdcomics.com/comics/archive.php?comicid=%s' @@ -84,6 +91,14 @@ class PiledHigherAndDeeper(_BasicScraper): namer = queryNamer('comicid', usePageUrl=True) +class Pimpette(_BasicScraper): + latestUrl = 'http://pimpette.ca/' + stripUrl = latestUrl + 'index.php?date=%s' + imageSearch = compile(tagre("img", "src", r'(strips/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(index\.php\?date=\d+)') + "Previous") + help = 'Index format: yyyymmdd' + + class Precocious(_BasicScraper): baseUrl = 'http://www.precociouscomic.com/' starter = indirectStarter(baseUrl, @@ -103,32 +118,6 @@ class PvPonline(_BasicScraper): help = 'Index format: yyyy/mm/dd/stripname' - -def pensAndTales(name, baseUrl): - return type('PensAndTales_%s' % name, - (_BasicScraper,), - dict( - name='PensAndTales/' + name, - latestUrl=baseUrl, - stripUrl=baseUrl + '?date=%s', - imageSearch=compile(r']+?src="([^"]*?comics/.+?)"', IGNORECASE), - prevSearch=compile(r'(:?]+?alt=")?Previous Comic', IGNORECASE), - help='Index format: yyyymmdd') - ) - - -# XXX: using custom Wordpress layout -# th = pensAndTales('TreasureHunters', 'http://th.pensandtales.com/') -# XXX: comic broken, no content -# strangekith = pensAndTales('Strangekith', 'http://strangekith.pensandtales.com/') -# XXX: comic broken -# fireflycross = pensAndTales('FireflyCross', 'http://fireflycross.pensandtales.com/') -evilish = pensAndTales('Evilish', 'http://evilish.pensandtales.com/') -# XXX: moved / layout changed -#ynt = pensAndTales('YamiNoTainai', 'http://ynt.pensandtales.com/') - - - class ProperBarn(_BasicScraper): latestUrl = 'http://www.nitrocosm.com/go/gag/' stripUrl = latestUrl + '%s/' @@ -137,7 +126,6 @@ class ProperBarn(_BasicScraper): help = 'Index format: nnn' - class PunksAndNerds(_BasicScraper): latestUrl = 'http://www.punksandnerds.com/' stripUrl = latestUrl + '?p=%s' @@ -146,7 +134,6 @@ class PunksAndNerds(_BasicScraper): help = 'Index format: nnn' - class PunksAndNerdsOld(_BasicScraper): latestUrl = 'http://original.punksandnerds.com/' stripUrl = latestUrl + 'd/%s.html' @@ -155,7 +142,6 @@ class PunksAndNerdsOld(_BasicScraper): help = 'Index format: yyyymmdd' - class PlanescapeSurvival(_BasicScraper): latestUrl = 'http://planescapecomic.com/' stripUrl = latestUrl + '%s.html' diff --git a/dosagelib/plugins/pensandtales.py b/dosagelib/plugins/pensandtales.py new file mode 100644 index 000000000..3634bfeeb --- /dev/null +++ b/dosagelib/plugins/pensandtales.py @@ -0,0 +1,30 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2004-2005 Tristan Seligmann and Jonathan Jacobs +# Copyright (C) 2012 Bastian Kleineidam +from re import compile +from ..scraper import make_scraper +from ..util import tagre + +_imageSearch = compile(tagre("img", "src", r'([^"]*comics/[^"]+)')) + +def add(name, baseUrl, param="date"): + classname = 'PensAndTales_%s' % name + _prevSearch = compile(tagre("a", "href", r'([^"]*\?%s=\d+)' % param) + + '(?:' + tagre("img", "alt", r'Previous Comic') + '|' + + '[^<]+Previous' + ')') + globals()[classname] = make_scraper(classname, + name='PensAndTales/' + name, + latestUrl = baseUrl, + stripUrl = baseUrl + '?' + param + '=%s', + imageSearch = _imageSearch, + prevSearch = _prevSearch, + help='Index format: yyyymmdd' + ) + + +# Most of the comics linked an pensandtales are broken and +# the rest does not have a common layout. It seems they allow +# almost arbitrary HTML layout. + +add('FireflyCross', 'http://www.fireflycross.pensandtales.com/', param="p") +add('Evilish', 'http://evilish.pensandtales.com/') diff --git a/dosagelib/plugins/s.py b/dosagelib/plugins/s.py index 057a32948..feeb6a935 100644 --- a/dosagelib/plugins/s.py +++ b/dosagelib/plugins/s.py @@ -66,6 +66,14 @@ class Sheldon(_BasicScraper): help = 'Index format: yymmdd' +class Shivae(_BasicScraper): + latestUrl = 'http://shivae.net/' + stripUrl = latestUrl + 'blog/%s/' + imageSearch = compile(tagre("img", "src", r'(http://shivae\.net/files/comics/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(http://shivae\.net/blog/[^"]+)', after="Previous")) + help = 'Index format: yyyy/mm/dd/stripname' + + class Shortpacked(_BasicScraper): latestUrl = 'http://www.shortpacked.com/' stripUrl = latestUrl + '%s/' @@ -99,7 +107,6 @@ class SluggyFreelance(_BasicScraper): help = 'Index format: yymmdd' - class SodiumEyes(_BasicScraper): latestUrl = 'http://sodiumeyes.com/' stripUrl = latestUrl + '%s/' @@ -108,6 +115,15 @@ class SodiumEyes(_BasicScraper): help = 'Index format: yyyy/mm/dd/stripname' +class Sorcery101(_BasicScraper): + baseUrl = 'http://www.sorcery101.net/' + latestUrl = baseUrl + 'sorcery-101/' + stripUrl = baseUrl + 'sorcery101/%s/' + imageSearch = compile(tagre("img", "src", r'(http://www\.sorcery101\.net/comics/sorcery101/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(http://www\.sorcery101\.net/sorcery101/[^"]+)', after="previous-comic-link")) + help = 'Index format: stripname' + + class SpareParts(_BasicScraper): baseUrl = 'http://www.sparepartscomics.com/' latestUrl = baseUrl + 'comics/?date=20080328' @@ -117,6 +133,23 @@ class SpareParts(_BasicScraper): help = 'Index format: yyyymmdd' +class SPQRBlues(_BasicScraper): + latestUrl = 'http://spqrblues.com/IV/' + stripUrl = latestUrl + '?p=%s' + imageSearch = compile(tagre("img", "src", r'(http://spqrblues\.com/IV/comics/\d+\.png)')) + prevSearch = compile(tagre("a", "href", r'(http://spqrblues\.com/IV/\?p=\d+)', after="prev")) + help = 'Index format: number' + + +class StationV3(_BasicScraper): + latestUrl = 'http://www.stationv3.com/' + stripUrl = latestUrl + 'd/%s.html' + imageSearch = compile(tagre("img", "src", r'(http://www\.stationv3\.com/comics/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(http://www\.stationv3\.com/d/\d+\.html)') + + tagre("img", "src", r'http://www\.stationv3\.com/images/previous\.gif')) + help = 'Index format: yyyymmdd' + + class Stubble(_BasicScraper): latestUrl = 'http://stubblecomics.com/' stripUrl = latestUrl + '?p=%s' diff --git a/dosagelib/plugins/t.py b/dosagelib/plugins/t.py index cd93a9d1a..63462db77 100644 --- a/dosagelib/plugins/t.py +++ b/dosagelib/plugins/t.py @@ -8,6 +8,14 @@ from ..helpers import indirectStarter from ..util import tagre +class TheDevilsPanties(_BasicScraper): + latestUrl = 'http://thedevilspanties.com/' + stripUrl = latestUrl + 'archives/%s' + imageSearch = compile(tagre("img", "src", r'(http://cdn\.thedevilspanties\.com/comics/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(/archives/\d+)', after="Previous")) + help = 'Index format: number' + + class TheNoob(_BasicScraper): latestUrl = 'http://www.thenoobcomic.com/index.php' stripUrl = latestUrl + '?pos=%s' @@ -46,6 +54,15 @@ class TheWotch(_BasicScraper): help = 'Index format: yyyy-mm-dd' +class ThunderAndLightning(_BasicScraper): + baseUrl = 'http://www.talcomic.com/wp/' + latestUrl = baseUrl + '?latestcomic' + stripUrl = baseUrl + '%s/' + prevSearch = compile(tagre("a", "href", r'(http://www\.talcomic\.com/wp/[^"]+)', after="prev")) + imageSearch = compile(tagre("img", "src", r'(http://www\.talcomic\.com/wp/comics/[^"]+)')) + help = 'Index format: yyyy/mm/dd/page-nn' + + class TinyKittenTeeth(_BasicScraper): latestUrl = 'http://www.tinykittenteeth.com/' stripUrl = latestUrl + '%s/' @@ -54,6 +71,14 @@ class TinyKittenTeeth(_BasicScraper): help = 'Index format: yyyy/mm/dd/stripname (unpadded)' +class TwoLumps(_BasicScraper): + latestUrl = 'http://www.twolumps.net/' + stripUrl = latestUrl + 'd/%s.html' + imageSearch = compile(tagre("img", "src", r'(/comics/[^"]+)')) + prevSearch = compile(tagre("a", "href", r'(/d/\d+\.html)', after="prev")) + help = 'Index format: yyyymmdd' + + class TwoTwoOneFour(_BasicScraper): latestUrl = 'http://www.nitrocosm.com/go/2214_classic/' stripUrl = latestUrl + '%s/' @@ -87,3 +112,11 @@ class TheOuterQuarter(_BasicScraper): imageSearch = compile(r'