From 04cc1ffe34616a8ec3c6419bad87d58e61bc44c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Tue, 19 Sep 2017 16:23:13 +0200 Subject: [PATCH] [kissmanga] extract manga metadata --- gallery_dl/extractor/kissmanga.py | 63 ++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/gallery_dl/extractor/kissmanga.py b/gallery_dl/extractor/kissmanga.py index 53900d1b..a38084a8 100644 --- a/gallery_dl/extractor/kissmanga.py +++ b/gallery_dl/extractor/kissmanga.py @@ -37,6 +37,29 @@ class KissmangaExtractor(Extractor): request = cloudflare.request_func + @staticmethod + def _parse_chapter_string(data): + data["chapter_string"] = text.unescape(data["chapter_string"]) + + match = re.match(( + r"(?:[Vv]ol\.0*(\d+) )?" + r"(?:[Cc]h\.)?0*(\d+)" + r"(?:[.:]0*(\d+))?" + r"(?: *[:-]? *(.+))?" + ), data["chapter_string"]) + + if not match: + match = re.match(( + r"[\w ]+?(?: -)? 0*()(\d+)()(?: *[:-]? *(.+))?" + # r"[\w ]+?(?: -)? 0*()(\d+)(?: (.+))?(?: - (.+))?" + ), data["chapter_string"]) + + volume, chapter, minor, title = match.groups() + data["volume"] = int(volume) if volume else 0 + data["chapter"] = int(chapter) if chapter else 0 + data["chapter_minor"] = "." + minor if minor else "" + data["title"] = title if title and title != "Read Online" else "" + class KissmangaMangaExtractor(KissmangaExtractor, MangaExtractor): """Extractor for manga from kissmanga.com""" @@ -44,12 +67,29 @@ class KissmangaMangaExtractor(KissmangaExtractor, MangaExtractor): test = [ ("http://kissmanga.com/Manga/Dropout", { "url": "992befdd64e178fe5af67de53f8b510860d968ca", + "keyword": "1d23ea07296e004b33bee17fe2f5cd5177c58680", }), ("http://kissmanga.com/manga/feng-shen-ji", None), ] - def chapter_paths(self, page): - return text.extract_iter(page, '\n\n', '\n') + page, pos = text.extract( + page, '', '
', pos) + needle = '" title="Read ' + manga + ' ' + manga = text.unescape(manga) + + for item in text.extract_iter(page, '
'): + url, _, chapter = item.partition(needle) + data = { + "manga": manga, "id": url.rpartition("=")[2], + "chapter_string": chapter, "lang": "en", "language": "English", + } + self._parse_chapter_string(data) + results.append((self.root + url, data)) + return results class KissmangaChapterExtractor(KissmangaExtractor): @@ -60,15 +100,15 @@ class KissmangaChapterExtractor(KissmangaExtractor): test = [ ("http://kissmanga.com/Manga/Dropout/Ch-000---Oneshot-?id=145847", { "url": "4136bcd1c6cecbca8cc2bc965d54f33ef0a97cc0", - "keyword": "97cc9e513953e20d6309648df57a52a7ced59ae0", + "keyword": "68384c1167858fb4aa475c4596f0a685c45fff36", }), ("http://kissmanga.com/Manga/Urban-Tales/a?id=256717", { "url": "de074848f6c1245204bb9214c12bcc3ecfd65019", - "keyword": "3d96653188b761752c38b60d6e397e2ace0ea04c", + "keyword": "089158338b4cde43b2ff244814effeb13297de33", }), ("http://kissmanga.com/Manga/Monster/Monster-79?id=7608", { "url": "6abec8178f35fe7846586280ca9e38eacc32452c", - "keyword": "2ae18e456a4a7e4a2889af49d5f2e9c10fbc45e6", + "keyword": "558da596e86ca544eb72cf303f3694bbf0b1f2f5", }), ("http://kissmanga.com/mAnGa/mOnStEr/Monster-79?id=7608", None), ] @@ -87,19 +127,14 @@ class KissmangaChapterExtractor(KissmangaExtractor): """Collect metadata for extractor-job""" manga, pos = text.extract(page, "Read manga\n", "\n") cinfo, pos = text.extract(page, "", "\n", pos) - match = re.match(( - r"(?:[Vv]ol.0*(\d+) )?(?:[Cc]h.)?0*(\d+)(?:\.0*(\d+))?(?:: (.+))?|" - r"[\w ]+?(?: -)? 0*(\d+)(?: (.+))?"), cinfo) - chminor = match.group(3) or match.group(6) - return { + data = { "manga": manga, - "volume": match.group(1) or "", - "chapter": match.group(2) or match.group(5), - "chapter_minor": "."+chminor if chminor else "", - "title": match.group(4) or "", + "chapter_string": cinfo, "lang": "en", "language": "English", } + self._parse_chapter_string(data) + return data def get_image_urls(self, page): """Extract list of all image-urls for a manga chapter"""