dosage/dosagelib/plugins/t.py

269 lines
11 KiB
Python
Raw Normal View History

# -*- coding: iso-8859-1 -*-
# Copyright (C) 2004-2005 Tristan Seligmann and Jonathan Jacobs
2014-01-05 15:50:57 +00:00
# Copyright (C) 2012-2014 Bastian Kleineidam
2012-06-20 19:58:13 +00:00
from re import compile, escape, IGNORECASE
2012-10-11 10:03:12 +00:00
from ..scraper import _BasicScraper
from ..helpers import indirectStarter
from ..util import tagre, fetchUrl, getPageContent
2012-06-20 19:58:13 +00:00
2013-02-06 21:27:40 +00:00
class TheBrads(_BasicScraper):
2013-04-14 07:02:14 +00:00
description = u'ArchiveFirst World Problems Comic - By Brad Colbow'
2013-02-06 21:27:40 +00:00
url = 'http://bradcolbow.com/archive/C4/'
2013-04-10 21:57:09 +00:00
stripUrl = url + '%s/'
firstStripUrl = stripUrl % 'P125'
2013-03-07 18:54:18 +00:00
imageSearch = compile(tagre("img", "src", r'(http://s3\.amazonaws\.com/the_brads/the-?brads[-_][^"]+)'))
2013-02-06 21:27:40 +00:00
prevSearch = compile(tagre("a", "href", r'(http://bradcolbow\.com/archive/C4/[^"]+)', before="prev"))
multipleImagesPerStrip = True
help = 'Index format: a letter and a number'
2012-12-08 20:30:51 +00:00
class TheDevilsPanties(_BasicScraper):
2013-04-14 07:02:14 +00:00
description = u"It's not Satanic Porn"
url = 'http://thedevilspanties.com/'
stripUrl = url + 'archives/%s'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % '300'
2012-12-08 20:30:51 +00:00
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'
2013-04-25 19:20:48 +00:00
class TheDreamlandChronicles(_BasicScraper):
description = u'The Dreamland Chronicles'
url = 'http://www.thedreamlandchronicles.com/'
stripUrl = url + 'comic/%s/'
firstStripUrl = stripUrl % 'page-1'
rurl = escape(url)
2013-05-25 21:24:33 +00:00
imageSearch = compile(tagre("img", "src", r'(http://www\.thedreamlandchronicles\.com/wp-content/uploads/\d+/\d+/\d+-\d+-\d+[^"]*)'))
2013-04-25 19:20:48 +00:00
prevSearch = compile(tagre("a", "href", r'(%s[^"]*)' % rurl, after='navi-prev"'))
help = 'Index format: page-n or chapter-n'
@classmethod
def namer(cls, imageUrl, pageUrl):
"""Remove trailing digit from day number."""
name = imageUrl.split('/')[-1]
base, ext = name.split('.', 1)
bp = base.split('-')
if len(bp[2]) == 3:
bp[2] = bp[2][:-1]
return "%s-%s-%s.%s" % (bp[0], bp[1], bp[2], ext)
class TheGamerCat(_BasicScraper):
description = u"The Gamer Cat"
url = 'http://www.thegamercat.com/'
rurl = escape(url)
stripUrl = url + '%s/'
firstStripUrl = stripUrl % '2011/06/06102011'
imageSearch = compile(tagre("img", "src", r'(%swordpress/comics/[^"/]+)' % rurl))
prevSearch = compile(tagre("a", "href", r'(%s\d+/\d+/[^"/]+/)' % rurl , after="navi navi-prev"))
help = 'Index format: yyyy/mm/mmddyyyy'
2013-04-25 19:20:48 +00:00
2014-01-31 03:32:07 +00:00
class TheGentlemansArmchair(_BasicScraper):
url = 'http://thegentlemansarmchair.com/'
rurl = escape(url)
stripUrl = url + 'comic/%s'
firstStripUrl = stripUrl % 'dora-the-explorer/'
imageSearch = compile(tagre("div", "id", r'comic') + "\s*.*\s*" + tagre("img", "src", r'(%swp-content/uploads/\d+/\d+/[^"]+)' % rurl))
prevSearch = compile(tagre("a", "href", r'(%s[^"]+)' % rurl, after='navi-prev'))
textSearch = compile(r'<h3 class="comic-post-widget-title">(.+)</h3>')
help = 'Index Format: name'
2014-02-18 20:00:43 +00:00
class TheLandscaper(_BasicScraper):
url = 'http://landscaper.visual-assault.net/comic/latest'
rurl = escape(url)
stripUrl = url + 'comic/%s'
firstStripUrl = stripUrl % '1'
imageSearch = compile(tagre("img", "src", r'(/comics/comic/comic_page/[^"]+)'))
prevSearch = compile(tagre("a", "href", r'(/comic/[^"]+)')+'&lsaquo; Previous')
help = 'Index format: name'
2012-06-20 19:58:13 +00:00
class TheNoob(_BasicScraper):
url = 'http://www.thenoobcomic.com/index.php'
stripUrl = url + '?pos=%s'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % '1'
2012-11-25 06:56:46 +00:00
imageSearch = compile(tagre("img", "src", r'(/headquarters/comics/[^"]+)'))
prevSearch = compile(tagre("a", "href", r'(\?pos=\d+)', before="comic_nav_previous_button"))
2012-06-20 19:58:13 +00:00
help = 'Index format: nnnn'
class TheOrderOfTheStick(_BasicScraper):
2013-04-13 18:58:00 +00:00
baseUrl = 'http://www.giantitp.com/'
url = baseUrl + 'comics/oots0863.html'
stripUrl = baseUrl + 'comics/oots%s.html'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % '0001'
2012-12-07 23:45:18 +00:00
imageSearch = compile(r'<IMG src="(/comics/images/[^"]+)">')
2012-06-20 19:58:13 +00:00
prevSearch = compile(r'<A href="(/comics/oots\d{4}\.html)"><IMG src="/Images/redesign/ComicNav_Back.gif"')
help = 'Index format: n (unpadded)'
2013-04-13 18:58:00 +00:00
starter = indirectStarter(baseUrl, compile(r'<A href="(/comics/oots\d{4}\.html)"'))
2012-06-20 19:58:13 +00:00
2012-12-07 23:45:18 +00:00
@classmethod
def namer(cls, imageUrl, pageUrl):
return pageUrl.rsplit('/', 1)[-1][:-5]
2012-06-20 19:58:13 +00:00
class TheParkingLotIsFull(_BasicScraper):
2013-04-13 18:58:00 +00:00
baseUrl = 'http://plif.courageunfettered.com/'
url = baseUrl + 'archive/arch2002.htm'
stripUrl = baseUrl + 'archive/arch%s.htm'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % '1998'
2012-06-20 19:58:13 +00:00
imageSearch = compile(r'<td align="center"><A TARGET=_parent HREF="(wc\d+\..+?)">')
2012-12-04 06:02:40 +00:00
multipleImagesPerStrip = True
prevSearch = compile(r'\d{4} -\s+<A HREF="(arch\d{4}\.htm)">\d{4}')
2012-06-20 19:58:13 +00:00
help = 'Index format: nnn'
class TheWotch(_BasicScraper):
url = 'http://www.thewotch.com/'
stripUrl = url + '?date=%s'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % '2002-11-21'
2012-06-20 19:58:13 +00:00
imageSearch = compile(r"<img.+?src='(comics/.+?)'")
2012-12-04 06:02:40 +00:00
prevSearch = compile(r"<link rel='Previous' href='(/\?date=\d+-\d+-\d+)'")
2012-06-20 19:58:13 +00:00
help = 'Index format: yyyy-mm-dd'
2013-02-06 21:08:36 +00:00
class ThisIsIndexed(_BasicScraper):
url = 'http://thisisindexed.com/'
rurl = escape(url)
2013-02-06 21:08:36 +00:00
stripUrl = url + 'page/%s'
imageSearch = compile(tagre("img", "src", r'(%swp-content/uploads/\d+/\d+/card[^"]+)' % rurl))
2013-02-06 21:08:36 +00:00
multipleImagesPerStrip = True
prevSearch = compile(tagre("div", "class", "nav-previous") +
2013-04-11 16:27:43 +00:00
tagre("a", "href", r'(%spage/\d+/)[^"]*' % rurl))
2013-02-06 21:08:36 +00:00
help = 'Index format: number'
2012-12-08 20:30:51 +00:00
class ThunderAndLightning(_BasicScraper):
2013-02-06 21:08:36 +00:00
url = 'http://www.talcomic.com/wp/'
rurl = escape(url)
2013-02-06 21:08:36 +00:00
stripUrl = url + '%s/'
2013-04-11 16:27:43 +00:00
prevSearch = compile(tagre("a", "href", r'(%s[^"]+)' % rurl, after="prev"))
imageSearch = compile(tagre("img", "src", r'(%scomics/[^"]+)' % rurl))
2012-12-08 20:30:51 +00:00
help = 'Index format: yyyy/mm/dd/page-nn'
2013-02-06 21:08:36 +00:00
@classmethod
def starter(cls):
return cls.url + '?latestcomic'
2012-12-08 20:30:51 +00:00
2012-11-21 20:57:26 +00:00
class TinyKittenTeeth(_BasicScraper):
url = 'http://www.tinykittenteeth.com/'
rurl = escape(url)
stripUrl = url + '%s/'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % '2009/01/26/gene-kelly'
imageSearch = compile(tagre("img", "src", r'(%scomics/[^"]+)' % rurl))
2012-11-21 20:57:26 +00:00
prevSearch = compile(tagre("a", "href", r'([^"]+)', after="Previous"))
2012-11-25 06:56:46 +00:00
help = 'Index format: yyyy/mm/dd/stripname (unpadded)'
2012-11-21 20:57:26 +00:00
2012-06-20 19:58:13 +00:00
2013-02-06 21:08:36 +00:00
class ToonHole(_BasicScraper):
url = 'http://www.toonhole.com/'
rurl = escape(url)
2013-02-06 21:08:36 +00:00
stripUrl = url + '%s/'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % '2009/12/toon-hole-coming-soon-2010'
imageSearch = compile(tagre("img", "src", r'(%scomics/\d+-\d+-\d+[^"]+)' % rurl))
prevSearch = compile(tagre("a", "href", r'(%s\d+/\d+/[^"]+)' % rurl, after="prev"))
2013-02-06 21:08:36 +00:00
help = 'Index format: yyyy/mm/stripname'
def shouldSkipUrl(self, url, data):
2013-03-08 05:47:00 +00:00
return url in (self.stripUrl % "2013/03/if-game-of-thrones-was-animated",)
2013-03-07 17:22:24 +00:00
2013-02-06 21:08:36 +00:00
2012-12-13 20:05:27 +00:00
# XXX disallowed by robots.txt
class _TwoLumps(_BasicScraper):
url = 'http://www.twolumps.net/'
stripUrl = url + 'd/%s.html'
2012-12-08 20:30:51 +00:00
imageSearch = compile(tagre("img", "src", r'(/comics/[^"]+)'))
prevSearch = compile(tagre("a", "href", r'(/d/\d+\.html)', after="prev"))
help = 'Index format: yyyymmdd'
2012-06-20 19:58:13 +00:00
class TwoTwoOneFour(_BasicScraper):
2013-04-14 07:02:14 +00:00
description = u'Artwork, comics, graphic novels, music, articles, and various silliness by Troy McQuinn'
url = 'http://www.nitrocosm.com/go/2214_classic/'
rurl = escape(url)
stripUrl = url + '%s/'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % '1'
2012-11-25 06:56:46 +00:00
imageSearch = compile(tagre("img", "src", r'(http://content\.nitrocosm\.com/[^"]+)', before="gallery_display"))
prevSearch = compile(tagre("a", "href", r'(%s\d+/)' % rurl, after="Previous"))
2012-06-20 19:58:13 +00:00
help = 'Index format: n (unpadded)'
class TheWhiteboard(_BasicScraper):
2013-04-14 07:02:14 +00:00
description = u'The Whiteboard, a somewhat paintball-related webcomic by "Doc" Nickel'
url = 'http://www.the-whiteboard.com/'
stripUrl = url + 'auto%s.html'
2012-06-20 19:58:13 +00:00
imageSearch = compile(r'<img SRC="(autotwb\d{1,4}.+?|autowb\d{1,4}.+?)">', IGNORECASE)
prevSearch = compile(r'&nbsp<a href="(.+?)">previous</a>', IGNORECASE)
help = 'Index format: twb or wb + n wg. twb1000'
class TheOuterQuarter(_BasicScraper):
url = 'http://theouterquarter.com/'
rurl = escape(url)
stripUrl = url + 'comic/%s'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % 'oq-the-first-take/4'
imageSearch = compile(r'<img src="(%scomics/.+?)"' % rurl)
2012-06-20 19:58:13 +00:00
prevSearch = compile(r'<div class="nav-previous"><a href="([^"]+)" rel="prev">')
help = 'Index format: nnn'
2012-12-08 20:30:51 +00:00
2014-07-02 15:11:33 +00:00
class TheThinHLine(_BasicScraper):
description = u'the thin H line. Proudly mediocre. NSFW.'
url = 'http://thinhline.tumblr.com/'
rurl = escape(url)
2014-07-02 15:11:33 +00:00
stripUrl = url + 'post/%s'
firstStripUrl = stripUrl % '3517345105'
imageSearch = compile(tagre('img', 'data-src', r'([^"]+media.tumblr.com/[^"]+)', before='content-image'))
prevSearch = compile(tagre("a", "href", r'([^"]+)') + '&gt;</a>')
starter = indirectStarter(url, compile(tagre("a", "href", r'([^"]+)', after='class="timestamp"')))
2014-07-02 15:11:33 +00:00
adult = True
indirectImageSearch = compile(tagre('a', 'href', r'(%simage/\d+)' % rurl))
def getComicStrip(self, url, data, baseUrl):
"""The comic strip image is in a separate page."""
pageUrl = fetchUrl(url, data, baseUrl, self.indirectImageSearch)
pageData, pageBaseUrl = getPageContent(pageUrl, self.session)
return super(TheThinHLine, self).getComicStrip(pageUrl, pageData, pageBaseUrl)
@classmethod
def namer(cls, imageUrl, pageUrl):
2014-07-03 16:42:06 +00:00
"""Use page URL sequence which is apparently increasing."""
num = pageUrl.split('/')[-1]
ext = imageUrl.rsplit('.', 1)[1]
return "thethinhline-%s.%s" % (num, ext)
2014-07-02 15:11:33 +00:00
2013-02-06 21:08:36 +00:00
class ThreePanelSoul(_BasicScraper):
url = 'http://threepanelsoul.com/'
rurl = escape(url)
2013-02-06 21:08:36 +00:00
stripUrl = url + '%s/'
2013-04-10 21:57:09 +00:00
firstStripUrl = stripUrl % '2006/05/11/a-test-comic'
imageSearch = compile(tagre("img", "src", r'(%scomics/[^"]+)' % rurl))
prevSearch = compile(tagre("a", "href", r'(%s\d+/\d+/\d+/[^"]+)' % rurl, after="prev"))
2013-02-06 21:08:36 +00:00
help = 'Index format: yyyy/mm/dd/stripname'
2012-12-08 20:30:51 +00:00
class TracyAndTristan(_BasicScraper):
url = 'http://tandt.thecomicseries.com/'
rurl = escape(url)
stripUrl = url + 'comics/%s'
imageSearch = compile(tagre("img", "src", r'(%simages/comics/[^"]+)' % rurl))
2012-12-08 20:30:51 +00:00
prevSearch = compile(tagre("a", "href", r'(/comics/\d+)', after="prev"))
help = 'Index format: number'
2013-04-25 19:23:31 +00:00
class TwoGuysAndGuy(_BasicScraper):
description = u"Two Guys and Guy"
url = 'http://www.twogag.com/'
rurl = escape(url)
stripUrl = url + 'archives/%s'
firstStripUrl = stripUrl % '4'
imageSearch = compile(tagre('img', 'src', r'(%scomics/\d{4}-\d{2}-\d{2}[^"]*)' % rurl))
prevSearch = compile(tagre('a', 'href', r'(%sarchives/\d+)' % rurl, after='title="Previous"'))
help = 'Index format: number'
adult = True