# SPDX-License-Identifier: MIT # Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs # Copyright (C) 2012-2014 Bastian Kleineidam # Copyright (C) 2015-2020 Tobias Gruetzmacher # Copyright (C) 2019-2020 Daniel Ring import json from re import compile from urllib.parse import urljoin from lxml import etree from ..scraper import BasicScraper, ParserScraper from ..helpers import indirectStarter from ..util import tagre from .common import ComicControlScraper, WordPressScraper, WordPressNavi class UberQuest(ParserScraper): baseUrl = 'https://uberquest.studiokhimera.com/' url = baseUrl + 'wp-json/keeros_comics/v1/chapters' stripUrl = baseUrl + 'wp-json/wp/v2/cfx_comic_page?page_number=%s' firstStripUrl = stripUrl % 'cover' def starter(self): # Retrieve comic metadata from API data = self.session.get(self.url) data.raise_for_status() return self.stripUrl % data.json()[-1]['pages'][-1]['page_number'] def getPrevUrl(self, url, data): return self.stripUrl % json.loads(data.text_content())[0]['prev_id'] def fetchUrls(self, url, data, urlSearch): return [json.loads(data.text_content())[0]['attachment']] def namer(self, imageUrl, pageUrl): return 'UberQuest-' + pageUrl.rsplit('=', 1)[-1] class Underling(WordPressNavi): url = ('https://web.archive.org/web/20190806120425/' 'http://underlingcomic.com/') firstStripUrl = url + 'page-one/' endOfLife = True class Undertow(BasicScraper): url = 'http://undertow.dreamshards.org/' imageSearch = compile(tagre("img", "src", r'([^"]+\.jpg)')) prevSearch = compile(r'href="(.+?)".+?teynpoint') latestSearch = compile(r'href="(.+?)".+?Most recent page') starter = indirectStarter class unDivine(ComicControlScraper): url = 'https://www.undivinecomic.com/' stripUrl = url + 'comic/%s' firstStripUrl = stripUrl % 'page-1' def namer(self, imageUrl, pageUrl): # Fix inconsistent filenames filename = imageUrl.rsplit('/', 1)[-1].replace(' ', '-') filename = filename.replace('10B311D9-0992-4D74-AEB8-DAB714DA67C6', 'UD-322') filename = filename.replace('99266624-7EF7-4E99-9EC9-DDB5F59CBDFD', 'UD-311') filename = filename.replace('33C6A5A1-F703-4A0A-BCD5-DE1A09359D8E', 'UD-310') filename = filename.replace('6CE01E81-C299-43C7-A221-8DE0670EFA30', 'ch4endbonusq4') filename = filename.replace('DB66D93B-1FE5-49C7-90E0-FFF981DCD6B3', 'bipolar') if len(filename) > 15 and filename[0].isdigit() and filename[10] == '-': filename = filename[11:] return filename class UnicornJelly(BasicScraper): baseUrl = 'http://unicornjelly.com/' url = baseUrl + 'uni666.html' stripUrl = baseUrl + 'uni%s.html' firstStripUrl = stripUrl % '001' imageSearch = compile(r'(?:)?()?