diff --git a/docs/configuration.rst b/docs/configuration.rst index 8a1fd504..ecbe980b 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -2389,6 +2389,17 @@ Description You can follow `this guide `__ to get a token. +extractor.dynastyscans.anthology.metadata +----------------------------------------- +Type + ``bool`` +Default + ``false`` +Description + Extract ``alert``, ``description``, and ``status`` metadata + from an anthology's HTML page. + + extractor.[E621].metadata ------------------------- Type diff --git a/docs/gallery-dl.conf b/docs/gallery-dl.conf index 5f4e868f..51f7e054 100644 --- a/docs/gallery-dl.conf +++ b/docs/gallery-dl.conf @@ -253,6 +253,12 @@ "subfolders": true } }, + "dynastyscans": + { + "anthology": { + "metadata": false + } + }, "exhentai": { "username": "", diff --git a/docs/supportedsites.md b/docs/supportedsites.md index 85d7ee78..08e8cdc7 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -220,7 +220,7 @@ Consider all listed sites to potentially be NSFW. Dynasty Reader https://dynasty-scans.com/ - Chapters, individual Images, Manga, Search Results + Anthologies, Chapters, individual Images, Manga, Search Results diff --git a/gallery_dl/extractor/dynastyscans.py b/gallery_dl/extractor/dynastyscans.py index 583869f1..c34c1520 100644 --- a/gallery_dl/extractor/dynastyscans.py +++ b/gallery_dl/extractor/dynastyscans.py @@ -10,6 +10,7 @@ from .common import ChapterExtractor, MangaExtractor, Extractor, Message from .. import text, util +from xml.etree import ElementTree import re BASE_PATTERN = r"(?:https?://)?(?:www\.)?dynasty-scans\.com" @@ -133,3 +134,44 @@ class DynastyscansImageExtractor(DynastyscansSearchExtractor): def images(self): return (self.query,) + + +class DynastyscansAnthologyExtractor(DynastyscansSearchExtractor): + """Extractor for dynasty-scans anthologies""" + subcategory = "anthology" + pattern = BASE_PATTERN + r"/anthologies/([^/?#]+)" + example = "https://dynasty-scans.com/anthologies/TITLE" + + def items(self): + url = "{}/anthologies/{}".format(self.root, self.groups[0]) + xml = self.request(url + ".atom").text + root = ElementTree.fromstring(xml.replace(" xmlns=", " ns=")) + + data = { + "_extractor": DynastyscansChapterExtractor, + "anthology" : root[3].text[28:], + } + + if self.config("metadata", False): + page = self.request(url).text + alert = text.extr(page, "
", "
") + + for element in root: + if element.tag != "entry": + continue + content = element[6][0] + data["author"] = content[0].text[8:] + data["scanlator"] = content[1].text[11:] + data["tags"] = content[2].text[6:].lower().split(", ") + data["title"] = element[5].text + data["date"] = text.parse_datetime( + element[1].text, "%Y-%m-%dT%H:%M:%S%z") + data["date_updated"] = text.parse_datetime( + element[2].text, "%Y-%m-%dT%H:%M:%S%z") + yield Message.Queue, element[4].text, data diff --git a/test/results/dynastyscans.py b/test/results/dynastyscans.py index 111048d5..11590723 100644 --- a/test/results/dynastyscans.py +++ b/test/results/dynastyscans.py @@ -63,4 +63,53 @@ __tests__ = ( "#sha1_metadata": "9f6fd139c372203dcf7237e662a80963ab070cb0", }, +{ + "#url" : "https://dynasty-scans.com/anthologies/%C3%A9clair", + "#class" : dynastyscans.DynastyscansAnthologyExtractor, + "#pattern" : dynastyscans.DynastyscansChapterExtractor.pattern, + "#options" : {"metadata": True}, + "#count" : 8, + + "alert": [ + "This manga has been licensed", + "Content licensed for English release has been removed from the reader. You can support the author by purchasing the title when it becomes available.", + ], + "anthology" : "Éclair", + "author" : {"Canno", "Kawanami Izumi", "Kagero", "Mekimeki Oukoku", "Itou Hachi", "Isaki Uta", "Nakatani Nio", "Kitao Taki"}, + "date" : "type:datetime", + "date_updated" : "type:datetime", + "description" : "

A compilation of one-shots from some of the best and most popular recent Yuri mangaka, including Canno (A Kiss and a White Lily for my Dearest Girl), Nakatani Nio (Bloom into you), Amano Shunita (Ayame 14), Itou Hachi (Isn't the Moon Beautiful?/Sayuri's Sister is an Angel) and many more.

\n\n

A must have for any collection, in my opinion, and a great chance to support all of the fabulous artists at once by buying yourself a copy! - Estherlea

", + "scanlator" : {"Estherlea", "/u/ Scanlations"}, + "status" : "Licensed", + "title" : str, + "tags" : list, +}, + +{ + "#url" : "https://dynasty-scans.com/anthologies/aashi_to_watashi_gyaru_yuri_anthology", + "#class" : dynastyscans.DynastyscansAnthologyExtractor, + "#urls" : "https://dynasty-scans.com/chapters/dont_call_me_senpai", + + "!alert" : (), + "!description" : """

Volume 2

""", + "!status" : "", + "anthology" : "Aashi to Watashi - Gyaru Yuri Anthology", + "author" : "keyyan", + "date" : "dt:2024-03-30 04:07:10", + "date_updated" : "dt:2025-04-04 20:21:36", + "scanlator" : "Arka", + "title" : '''Don't Call Me "Senpai"''', + "tags" : [ + "big breasts", + "childhood friends", + "ecchi", + "gyaru", + "height gap", + "prequel", + "romance", + "school girl", + "yuri", + ], +}, + )