diff --git a/docs/supportedsites.md b/docs/supportedsites.md index 9d7e6be1..07f5f55e 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -493,6 +493,12 @@ Consider all sites to be NSFW unless otherwise known. Chapters, Manga + + MangaLife + https://manga4life.com/ + Chapters, Manga + + Manganato https://manganato.com/ diff --git a/gallery_dl/extractor/mangasee.py b/gallery_dl/extractor/mangasee.py index 2bd11ef9..5fa56313 100644 --- a/gallery_dl/extractor/mangasee.py +++ b/gallery_dl/extractor/mangasee.py @@ -35,33 +35,59 @@ class MangaseeBase(): 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", + pattern = (r"(?:https?://)?(mangasee123|manga4life)\.com" + r"(/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, - "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": "", - }, - }) + "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": "", + }, + }), + (("https://manga4life.com/read-online" + "/One-Piece-chapter-1063-page-1.html"), { + "pattern": r"https://[^/]+/manga/One-Piece/1063-0\d\d\.png", + "count": 13, + "keyword": { + "chapter": 1063, + "chapter_minor": "", + "chapter_string": "110630", + "count": 13, + "date": "dt:2022-10-16 17:32:54", + "extension": "png", + "filename": r"re:1063-0\d\d", + "index": "1", + "lang": "en", + "language": "English", + "manga": "One Piece", + "page": int, + "title": "", + }, + }), + ) def __init__(self, match): - ChapterExtractor.__init__(self, match) + if match.group(1) == "manga4life": + self.category = "mangalife" + self.root = "https://manga4life.com" + ChapterExtractor.__init__(self, match, self.root + match.group(2)) self.session.headers["Referer"] = self.gallery_url - domain = "mangasee123.com" + domain = self.root.rpartition("/")[2] cookies = self.session.cookies if not cookies.get("PHPSESSID", domain=domain): cookies.set("PHPSESSID", util.generate_token(13), domain=domain) @@ -96,12 +122,24 @@ class MangaseeChapterExtractor(MangaseeBase, ChapterExtractor): 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", - }) + pattern = r"(?:https?://)?(mangasee123|manga4life)\.com(/manga/[^/?#]+)" + test = ( + (("https://mangasee123.com/manga" + "/Nakamura-Koedo-To-Daizu-Keisuke-Wa-Umaku-Ikanai"), { + "pattern": MangaseeChapterExtractor.pattern, + "count": ">= 17", + }), + ("https://manga4life.com/manga/Ano-Musume-Ni-Kiss-To-Shirayuri-O", { + "pattern": MangaseeChapterExtractor.pattern, + "count": ">= 50", + }), + ) + + def __init__(self, match): + if match.group(1) == "manga4life": + self.category = "mangalife" + self.root = "https://manga4life.com" + MangaExtractor.__init__(self, match, self.root + match.group(2)) def chapters(self, page): slug, pos = text.extract(page, 'vm.IndexName = "', '"') diff --git a/scripts/supportedsites.py b/scripts/supportedsites.py index 3661d9eb..bd9d9d71 100755 --- a/scripts/supportedsites.py +++ b/scripts/supportedsites.py @@ -69,6 +69,7 @@ CATEGORY_MAP = { "mangafox" : "Manga Fox", "mangahere" : "Manga Here", "mangakakalot" : "MangaKakalot", + "mangalife" : "MangaLife", "manganelo" : "Manganato", "mangapark" : "MangaPark", "mangasee" : "MangaSee", @@ -425,6 +426,10 @@ def build_extractor_list(): default["pornimagesxxx"] = default["hentaicosplays"] domains["pornimagesxxx"] = "https://porn-images-xxx.com/" + # add manga4life.com + default["mangalife"] = default["mangasee"] + domains["mangalife"] = "https://manga4life.com/" + return categories, domains