", "<"):
alt_titles = [t.strip() for t in alt_titles.split(",")]
else:
alt_titles = ()
author = text.remove_html(extr(
"Authors :", ""))
status = text.remove_html(extr(
"Status :", ""))
genres = [g.strip(" ,") for g in text.split_html(extr(
"Genres :", ""))]
if descr := extr('class="content"', '
")+1:]).strip()
else:
descr = ""
return {
"manga" : title,
"manga_id" : manga_id,
"manga_slug" : manga_slug,
"manga_titles": alt_titles,
"author" : author,
"status" : status,
"genres" : genres,
"description" : descr,
"lang" : "en",
"language" : "English",
}
class KaliscanChapterExtractor(KaliscanBase, ChapterExtractor):
"""Extractor for kaliscan manga chapters"""
pattern = BASE_PATTERN + r"(/manga/([\w-]+)/chapter-([\d.]+))"
example = "https://kaliscan.me/manga/ID-MANGA/chapter-1"
def metadata(self, page):
extr = text.extract_from(page)
manga_id = text.parse_int(extr("bookId =", ";"))
extr("bookSlug =", ";")
chapter_id = text.parse_int(extr("chapterId =", ";"))
extr("chapterSlug =", ";")
chapter_number = extr("chapterNumber =", ";").strip(' "\'')
chapter, sep, minor = chapter_number.partition(".")
data = {
"chapter" : text.parse_int(chapter),
"chapter_minor": sep + minor,
"chapter_id" : chapter_id,
**self.manga_data(self.groups[1]),
}
if manga_id and not data["manga_id"]:
data["manga_id"] = manga_id
return data
def images(self, page):
images_str = text.extr(page, 'var chapImages = "', '"')
if not images_str:
return ()
return [
(url, None)
for url in (u.strip() for u in images_str.split(","))
if url
]
class KaliscanMangaExtractor(KaliscanBase, MangaExtractor):
"""Extractor for kaliscan manga"""
chapterclass = KaliscanChapterExtractor
pattern = BASE_PATTERN + r"(/manga/([\w-]+))/?$"
example = "https://kaliscan.me/manga/ID-MANGA"
def chapters(self, page):
data = self.manga_data(self.groups[1], page)
chapter_list = text.extr(page, 'id="chapter-list">', '')
if not chapter_list:
return ()
results = []
for li in text.extract_iter(chapter_list, "
"):
url = text.extr(li, 'href="', '"')
if not url:
continue
if url[0] == "/":
url = self.root + url
chapter, sep, minor = url.rpartition(
"/chapter-")[2].partition(".")
results.append((url, {
"chapter" : text.parse_int(chapter),
"chapter_minor": sep + minor,
**data,
}))
return results