diff --git a/docs/supportedsites.md b/docs/supportedsites.md index eed7aa107e..3e088e72a7 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -433,6 +433,12 @@ Consider all sites to be NSFW unless otherwise known. Chapters, Manga + + MangaSee + https://mangasee123.com/ + Chapters, Manga + + Mangoxo https://www.mangoxo.com/ diff --git a/gallery_dl/extractor/__init__.py b/gallery_dl/extractor/__init__.py index d07c063686..d74d06d2f6 100644 --- a/gallery_dl/extractor/__init__.py +++ b/gallery_dl/extractor/__init__.py @@ -74,6 +74,7 @@ "mangakakalot", "manganelo", "mangapark", + "mangasee", "mangoxo", "myhentaigallery", "myportfolio", diff --git a/gallery_dl/extractor/mangasee.py b/gallery_dl/extractor/mangasee.py new file mode 100644 index 0000000000..1b3dd18765 --- /dev/null +++ b/gallery_dl/extractor/mangasee.py @@ -0,0 +1,112 @@ +# -*- coding: utf-8 -*- + +# Copyright 2021 Mike Fährmann +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. + +"""Extractors for https://mangasee123.com/""" + +from .common import ChapterExtractor, MangaExtractor +from .. import text +import json + + +class MangaseeBase(): + category = "mangasee" + browser = "firefox" + root = "https://mangasee123.com" + + @staticmethod + def _transform_chapter(data): + chapter = data["Chapter"] + return { + "title" : data["ChapterName"] or "", + "index" : chapter[0], + "chapter" : int(chapter[1:-1]), + "chapter_minor": "" if chapter[-1] == "0" else "." + chapter[-1], + "chapter_string": chapter, + "lang" : "en", + "language": "English", + "date" : text.parse_datetime( + data["Date"], "%Y-%m-%d %H:%M:%S"), + } + + +class MangaseeChapterExtractor(MangaseeBase, ChapterExtractor): + pattern = r"(?:https?://)?mangasee123\.com(/read-online/[^/?#]+\.html)" + test = (("https://mangasee123.com/read-online" + "/Tokyo-Innocent-chapter-4.5-page-1.html"), { + "pattern": r"https://[^/]+/manga/Tokyo-Innocent/0004\.5-00\d\.png", + "count": 8, + "keyword": { + "chapter": 4, + "chapter_minor": ".5", + "chapter_string": "100045", + "count": 8, + "date": "dt:2020-01-20 21:52:53", + "extension": "png", + "filename": r"re:0004\.5-00\d", + "index": "1", + "lang": "en", + "language": "English", + "manga": "Tokyo Innocent", + "page": int, + "title": "", + }, + }) + + def metadata(self, page): + extr = text.extract_from(page) + self.chapter = data = json.loads(extr("vm.CurChapter =", ";\r\n")) + self.domain = extr('vm.CurPathName = "', '"') + self.slug = extr('vm.IndexName = "', '"') + + data = self._transform_chapter(data) + data["manga"] = extr('vm.SeriesName = "', '"') + return data + + def images(self, page): + chapter = self.chapter["Chapter"][1:] + if chapter[-1] == "0": + chapter = chapter[:-1] + else: + chapter = chapter[:-1] + "." + chapter[-1] + + base = "https://{}/manga/{}/".format(self.domain, self.slug) + if self.chapter["Directory"]: + base += self.chapter["Directory"] + "/" + base += chapter + "-" + + return [ + ("{}{:>03}.png".format(base, i), None) + for i in range(1, int(self.chapter["Page"]) + 1) + ] + + +class MangaseeMangaExtractor(MangaseeBase, MangaExtractor): + chapterclass = MangaseeChapterExtractor + pattern = r"(?:https?://)?mangasee123\.com(/manga/[^/?#]+)" + test = (("https://mangasee123.com/manga" + "/Nakamura-Koedo-To-Daizu-Keisuke-Wa-Umaku-Ikanai"), { + "pattern": MangaseeChapterExtractor.pattern, + "count": ">= 17", + }) + + def chapters(self, page): + slug, pos = text.extract(page, 'vm.IndexName = "', '"') + chapters = json.loads(text.extract( + page, "vm.Chapters = ", ";\r\n", pos)[0]) + + result = [] + for data in map(self._transform_chapter, chapters): + url = "{}/read-online/{}-chapter-{}{}".format( + self.root, slug, data["chapter"], data["chapter_minor"]) + if data["index"] != "1": + url += "-index-" + data["index"] + url += "-page-1.html" + + data["manga"] = slug + result.append((url, data)) + return result diff --git a/scripts/supportedsites.py b/scripts/supportedsites.py index 1bb5d654d2..92e703084f 100755 --- a/scripts/supportedsites.py +++ b/scripts/supportedsites.py @@ -68,6 +68,7 @@ "mangakakalot" : "MangaKakalot", "manganelo" : "Manganato", "mangapark" : "MangaPark", + "mangasee" : "MangaSee", "mangastream" : "Manga Stream", "mastodon.social": "mastodon.social", "myhentaigallery": "My Hentai Gallery",