[comick] add 'covers' extractor

This commit is contained in:
Mike Fährmann
2025-08-30 22:26:35 +02:00
parent f3596d0bde
commit 92f757e981
3 changed files with 85 additions and 4 deletions

View File

@@ -196,7 +196,7 @@ Consider all listed sites to potentially be NSFW.
<tr id="comick" title="comick">
<td>Comick</td>
<td>https://comick.io/</td>
<td>Chapters, Manga</td>
<td>Chapters, Covers, Manga</td>
<td></td>
</tr>
<tr id="coomer" title="coomer">
@@ -994,7 +994,7 @@ Consider all listed sites to potentially be NSFW.
<tr id="tungsten" title="tungsten">
<td>Tungsten</td>
<td>https://tungsten.run/</td>
<td>Models, Posts</td>
<td>Models, Posts, User Profiles</td>
<td></td>
</tr>
<tr id="twibooru" title="twibooru">

View File

@@ -8,7 +8,7 @@
"""Extractors for https://comick.io/"""
from .common import ChapterExtractor, MangaExtractor, Message
from .common import GalleryExtractor, ChapterExtractor, MangaExtractor, Message
from .. import text
from ..cache import memcache
@@ -21,6 +21,42 @@ class ComickBase():
root = "https://comick.io"
class ComickCoversExtractor(ComickBase, GalleryExtractor):
"""Extractor for comick.io manga covers"""
subcategory = "covers"
directory_fmt = ("{category}", "{manga}", "Covers")
filename_fmt = "{volume:>02}_{lang}.{extension}"
archive_fmt = "c_{id}"
pattern = BASE_PATTERN + r"/comic/([\w-]+)/cover"
example = "https://comick.io/comic/MANGA/cover"
def metadata(self, page):
manga = _manga_info(self, self.groups[0])
self.slug = manga['manga_slug']
return manga
def images(self, page):
url = f"{self.root}/comic/{self.slug}/cover"
page = self.request(url).text
data = self._extract_nextdata(page)
covers = data["props"]["pageProps"]["comic"]["md_covers"]
covers.reverse()
return [
(f"https://meo.comick.pictures/{cover['b2key']}", {
"id" : cover["id"],
"width" : cover["w"],
"height": cover["h"],
"size" : cover["s"],
"lang" : cover["locale"],
"volume": text.parse_int(cover["vol"]),
"cover" : cover,
})
for cover in covers
]
class ComickChapterExtractor(ComickBase, ChapterExtractor):
"""Extractor for comick.io manga chapters"""
archive_fmt = "{chapter_hid}_{page}"
@@ -61,7 +97,7 @@ class ComickChapterExtractor(ComickBase, ChapterExtractor):
def images(self, page):
return [
("https://meo.comick.pictures/" + img["b2key"], {
(f"https://meo.comick.pictures/{img['b2key']}", {
"width" : img["w"],
"height" : img["h"],
"size" : img["s"],

View File

@@ -304,4 +304,49 @@ __tests__ = (
"lang" : "iso:639",
},
{
"#url" : "https://comick.io/comic/neko-no-oshigoto/cover",
"#class" : comick.ComickCoversExtractor,
"#results" : (
"https://meo.comick.pictures/l6wvkz.jpg",
"https://meo.comick.pictures/X8xRNp.jpg",
),
"id" : {45687770, 45687771},
"width" : {1053, 1055},
"height" : 1500,
"size" : int,
"lang" : "ja",
"extension" : "jpg",
"manga" : "Neko no Oshigoto",
"volume" : range(1, 2),
"cover" : {
"b2key" : str,
"gpurl" : str,
"h" : int,
"id" : int,
"is_primary" : bool,
"locale" : "ja",
"md_comic_id": int,
"mdid" : "iso:uuid",
"s" : int,
"url" : "iso:uuid",
"vol" : str,
"w" : int,
},
},
{
"#url" : "https://comick.io/comic/01-sakamoto-days/cover",
"#class" : comick.ComickCoversExtractor,
"#pattern" : r"https://meo\.comick\.pictures/\w+\.jpg",
"#count" : range(50, 80),
"id" : int,
"width" : int,
"height": int,
"volume": range(1, 30),
"lang" : {"ja", "en", "fr", "pt-br"},
},
)