From ac6111e693ac33b97d633aeaa3f2158701a729f8 Mon Sep 17 00:00:00 2001
From: enduser420 <91022934+enduser420@users.noreply.github.com>
Date: Fri, 21 Oct 2022 20:16:36 +0530
Subject: [PATCH] [mangasee] add support for 'mangalife' (#3086)
---
docs/supportedsites.md | 6 ++
gallery_dl/extractor/mangasee.py | 94 ++++++++++++++++++++++----------
scripts/supportedsites.py | 5 ++
3 files changed, 77 insertions(+), 28 deletions(-)
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