diff --git a/gallery_dl/extractor/dokireader.py b/gallery_dl/extractor/dokireader.py index cfff5a65..a559b08f 100644 --- a/gallery_dl/extractor/dokireader.py +++ b/gallery_dl/extractor/dokireader.py @@ -17,7 +17,7 @@ class DokireaderChapterExtractor(foolslide.FoolslideChapterExtractor): pattern = foolslide.chapter_pattern(r"kobato\.hologfx\.com/reader") test = [(("https://kobato.hologfx.com/reader/read/" "hitoribocchi_no_oo_seikatsu/en/3/34"), { - "keyword": "1dc1ec8264df4126552dbe53f42c5643fd2a4cf3", + "keyword": "998d1d523da028284b8dd4b7b54ceae4af6cb65a", })] @@ -28,4 +28,5 @@ class DokireaderMangaExtractor(foolslide.FoolslideMangaExtractor): test = [(("https://kobato.hologfx.com/reader/series/" "boku_ha_ohimesama_ni_narenai/"), { "url": "1c1f5a7258ce4f631f5fc32be548d78a6a57990d", + "keyword": "614d89a6045b85c822cbd3e67578ea7577dfc995", })] diff --git a/gallery_dl/extractor/foolslide.py b/gallery_dl/extractor/foolslide.py index 3b2bbd11..64ba5125 100644 --- a/gallery_dl/extractor/foolslide.py +++ b/gallery_dl/extractor/foolslide.py @@ -34,28 +34,44 @@ def manga_pattern(domain_re): return [r"(?:https?://)?(" + domain_re + MANGA_RE] -class FoolslideChapterExtractor(SharedConfigExtractor): - """Base class for chapter extractors for FoOlSlide based sites""" +class FoolslideExtractor(SharedConfigExtractor): + """Base class for FoOlSlide extractors""" basecategory = "foolslide" + scheme = "https" + + def request(self, url): + return SharedConfigExtractor.request( + self, url, encoding="utf-8", method="post", data={"adult": "true"}) + + @staticmethod + def parse_chapter_url(url, data): + info = url.partition("/read/")[2].split("/") + data["lang"] = info[1] + data["language"] = util.code_to_language(info[1]) + data["volume"] = util.safe_int(info[2]) + data["chapter"] = util.safe_int(info[3]) + data["chapter_minor"] = "." + info[4] if len(info) >= 6 else "" + return data + + +class FoolslideChapterExtractor(FoolslideExtractor): + """Base class for chapter extractors for FoOlSlide based sites""" subcategory = "chapter" directory_fmt = ["{category}", "{manga}", "{chapter_string}"] filename_fmt = "{manga}_{chapter:>03}_{page:>03}.{extension}" - scheme = "https" single = True def __init__(self, match, url=None): - SharedConfigExtractor.__init__(self) + FoolslideExtractor.__init__(self) self.url = url or self.scheme + "://" + match.group(1) - self.data = match.groupdict(default="") def items(self): - page = self.request(self.url, encoding="utf-8", - method="post", data={"adult": "true"}).text + page = self.request(self.url).text data = self.get_metadata(page) imgs = self.get_images(page) data["count"] = len(imgs) - data["chapter_id"] = imgs[0]["chapter_id"] + data["chapter_id"] = util.safe_int(imgs[0]["chapter_id"]) yield Message.Version, 1 yield Message.Directory, data @@ -63,9 +79,12 @@ class FoolslideChapterExtractor(SharedConfigExtractor): try: url = image["url"] del image["url"] + del image["chapter_id"] del image["thumb_url"] except KeyError: pass + for key in ("height", "id", "size", "width"): + image[key] = util.safe_int(image[key]) data.update(image) text.nameext_from_url(data["filename"], data) yield Message.Url, url, data @@ -75,14 +94,12 @@ class FoolslideChapterExtractor(SharedConfigExtractor): _ , pos = text.extract(page, '