From add9fbc13be107dcb3f1737a7d207eae4442d735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Wed, 31 Dec 2025 10:59:32 +0100 Subject: [PATCH] [manganelo] add 'bookmark' extractor (#8776) --- docs/supportedsites.md | 8 ++++---- gallery_dl/extractor/manganelo.py | 34 +++++++++++++++++++++++++++++-- test/results/nelomanga.py | 18 ++++++++++++++++ 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/docs/supportedsites.md b/docs/supportedsites.md index 2672cbec..5fddd1a5 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -1570,25 +1570,25 @@ Consider all listed sites to potentially be NSFW. MangaNelo https://www.nelomanga.net/ - Chapters, Manga + Bookmarks, Chapters, Manga MangaNato https://www.natomanga.com/ - Chapters, Manga + Bookmarks, Chapters, Manga MangaNato https://www.manganato.gg/ - Chapters, Manga + Bookmarks, Chapters, Manga MangaKakalot https://www.mangakakalot.gg/ - Chapters, Manga + Bookmarks, Chapters, Manga diff --git a/gallery_dl/extractor/manganelo.py b/gallery_dl/extractor/manganelo.py index 3d88b2d0..6b68b83d 100644 --- a/gallery_dl/extractor/manganelo.py +++ b/gallery_dl/extractor/manganelo.py @@ -9,8 +9,8 @@ """Extractors for https://www.mangakakalot.gg/ and mirror sites""" -from .common import BaseExtractor, ChapterExtractor, MangaExtractor -from .. import text, util +from .common import BaseExtractor, ChapterExtractor, MangaExtractor, Message +from .. import text, util, exception class ManganeloExtractor(BaseExtractor): @@ -126,3 +126,33 @@ class ManganeloMangaExtractor(ManganeloExtractor, MangaExtractor): "language": "English", })) return results + + +class ManganeloBookmarkExtractor(ManganeloExtractor): + """Extractor for manganelo bookmarks""" + subcategory = "bookmark" + pattern = BASE_PATTERN + r"/bookmark" + example = "https://www.mangakakalot.gg/bookmark" + + def items(self): + data = {"_extractor": ManganeloMangaExtractor} + + url = self.root + "/bookmark" + params = {"page": 1} + + response = self.request(url, params=params) + if response.history: + raise exception.AuthRequired( + "authenticated cookies", "your bookmarks") + page = response.text + last = text.parse_int(text.extr(page, ">Last(", ")")) + + while True: + for bookmark in text.extract_iter( + page, 'class="user-bookmark-item ', ''): + yield Message.Queue, text.extr(bookmark, ' href="', '"'), data + + if params["page"] >= last: + break + params["page"] += 1 + page = self.request(url, params=params).text diff --git a/test/results/nelomanga.py b/test/results/nelomanga.py index 6a917478..76ea3f35 100644 --- a/test/results/nelomanga.py +++ b/test/results/nelomanga.py @@ -5,6 +5,7 @@ # published by the Free Software Foundation. from gallery_dl.extractor import manganelo +from gallery_dl import exception __tests__ = ( @@ -70,4 +71,21 @@ __tests__ = ( "#class" : manganelo.ManganeloMangaExtractor, }, +{ + "#url" : "https://www.nelomanga.net/bookmark", + "#category": ("manganelo", "nelomanga", "bookmark"), + "#class" : manganelo.ManganeloBookmarkExtractor, + "#pattern" : manganelo.ManganeloMangaExtractor.pattern, + "#auth" : "cookies", + "#count" : 23, +}, + +{ + "#url" : "https://nelomanga.net/bookmark", + "#category": ("manganelo", "nelomanga", "bookmark"), + "#class" : manganelo.ManganeloBookmarkExtractor, + "#auth" : False, + "#exception": exception.AuthRequired, +}, + )