Minor daily update

pull/365/head
devi 3 years ago
parent face1d5b26
commit e788cff04a

@ -34,10 +34,15 @@ internal abstract class GalleryAdultsParser(
append("https://")
append(domain)
if (!tags.isNullOrEmpty()) {
append("/tag/")
append(tag?.key.orEmpty())
append("/?")
if (tag?.key == "languageKey") {
append("/language")
append(tag.title)
append("/?")
} else {
append("/tag/")
append(tag?.key.orEmpty())
append("/?")
}
} else if (!query.isNullOrEmpty()) {
append("/search/?q=")
append(query.urlEncoded())
@ -92,11 +97,37 @@ internal abstract class GalleryAdultsParser(
protected open val pathTagUrl = "/tags/popular/pag/"
protected open val selectTags = ".tags_page ul.tags li"
protected open val listLanguage = arrayOf(
"/english",
"/french",
"/japanese",
"/chinese",
"/spanish",
"/russian",
"/korean",
"/german",
"/indonesian",
"/italian",
"/portuguese",
"/turkish",
"/thai",
"/vietnamese",
) // The "/" is used to move them up in the tag list and therefore also in the url.
private suspend fun getTags(page: Int): Set<MangaTag> {
val url = "https://$domain$pathTagUrl$page"
val root = webClient.httpGet(url).parseHtml().selectFirstOrThrow(selectTags)
return root.parseTags()
val tagLanguage = ArrayList<MangaTag>(listLanguage.size)
for (language in listLanguage) {
tagLanguage.add(
MangaTag(
key = "languageKey",
title = language,
source = source,
),
)
}
return root.parseTags() + tagLanguage
}
protected open fun Element.parseTags() = select("a.tag, .gallery_title a").mapToSet {
@ -111,16 +142,15 @@ internal abstract class GalleryAdultsParser(
protected open val selectTag = "div.tags:contains(Tags:) .tag_list"
protected open val selectAuthor = "ul.artists a.tag_btn"
protected open val urlReplaceBefore = "/g/"
protected open val urlReplaceAfter = "/gallery/"
protected open val selectLanguageChapter = "div.tags:contains(Languages:) .tag_list a span.tag"
protected open val selectUrlChapter = "#cover a, .cover a, .left_cover a, .g_thumb a, .gallery_left a"
override suspend fun getDetails(manga: Manga): Manga {
val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
val urlChapters = manga.url.replace(urlReplaceBefore, urlReplaceAfter) + "1/"
val tag = doc.selectFirstOrThrow(selectTag)
val urlChapters = doc.selectFirstOrThrow(selectUrlChapter).attr("href")
val tag = doc.selectFirst(selectTag)?.parseTags()
return manga.copy(
tags = tag.parseTags(),
tags = tag.orEmpty(),
author = doc.selectFirst(selectAuthor)?.html()?.substringBefore("<span"),
chapters = listOf(
MangaChapter(
@ -141,7 +171,7 @@ internal abstract class GalleryAdultsParser(
return parseMangaList(webClient.httpGet(seed.url.toAbsoluteUrl(domain)).parseHtml())
}
protected open val selectTotalPage = ".total_pages"
protected open val selectTotalPage = ".total_pages, .num-pages, .tp"
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml()
@ -162,7 +192,6 @@ internal abstract class GalleryAdultsParser(
override suspend fun getPageUrl(page: MangaPage): String {
val doc = webClient.httpGet(page.url.toAbsoluteUrl(domain)).parseHtml()
val root = doc.body()
return root.requireElementById(idImg).src() ?: root.parseFailed("Image src not found")
return doc.requireElementById(idImg).src() ?: doc.parseFailed("Image src not found")
}
}

@ -15,8 +15,13 @@ internal class AsmHentai(context: MangaLoaderContext) :
override val selectGalleryImg = ".image img"
override val pathTagUrl = "/tags/?page="
override val selectAuthor = "div.tags:contains(Artists:) .tag_list a span.tag"
override val selectTotalPage = ".tp"
override val idImg = "fimg"
override val listLanguage = arrayOf(
"/english",
"/japanese",
"/chinese",
"/turkish",
)
override fun Element.parseTags() = select("a").mapToSet {
val key = it.attr("href").removeSuffix('/').substringAfterLast('/')

@ -19,9 +19,16 @@ internal class HentaiEra(context: MangaLoaderContext) :
override val selectTags = ".tags_section"
override val selectTag = ".galleries_info li:contains(Tags) div.info_tags"
override val selectAuthor = ".galleries_info li:contains(Artists) span.item_name"
override val urlReplaceBefore = "/gallery/"
override val urlReplaceAfter = "/view/"
override val selectLanguageChapter = ".galleries_info li:contains(Languages) div.info_tags .item_name"
override val listLanguage = arrayOf(
"/english",
"/japanese",
"/spanish",
"/french",
"/korean",
"/german",
"/russian",
)
override suspend fun getListPage(
page: Int,
@ -34,10 +41,15 @@ internal class HentaiEra(context: MangaLoaderContext) :
append("https://")
append(domain)
if (!tags.isNullOrEmpty()) {
append("/tag/")
append(tag?.key.orEmpty())
append("/?")
if (tag?.key == "languageKey") {
append("/language")
append(tag.title)
append("/?")
} else {
append("/tag/")
append(tag?.key.orEmpty())
append("/?")
}
} else if (!query.isNullOrEmpty()) {
append("/search/?key=")
append(query.urlEncoded())
@ -53,10 +65,10 @@ internal class HentaiEra(context: MangaLoaderContext) :
override suspend fun getDetails(manga: Manga): Manga {
val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
val urlChapters = manga.url.replace(urlReplaceBefore, urlReplaceAfter) + "1/"
val tag = doc.selectFirstOrThrow(selectTag)
val urlChapters = doc.selectFirstOrThrow("#cover a, .cover a, .left_cover a").attr("href")
val tag = doc.selectFirst(selectTag)?.parseTags()
return manga.copy(
tags = tag.parseTags(),
tags = tag.orEmpty(),
author = doc.selectFirst(selectAuthor)?.text(),
chapters = listOf(
MangaChapter(

@ -13,11 +13,22 @@ internal class HentaiFox(context: MangaLoaderContext) :
override val selectGallery = ".lc_galleries .thumb, .related_galleries .thumb"
override val selectTags = ".list_tags"
override val selectTag = "ul.tags"
override val urlReplaceBefore = "/gallery/"
override val urlReplaceAfter = "/g/"
override val selectLanguageChapter = "ul.languages a.tag_btn"
override val selectTotalPage = ".total_pages"
override val listLanguage = arrayOf(
"/english",
"/french",
"/japanese",
"/chinese",
"/spanish",
"/russian",
"/korean",
"/indonesian",
"/italian",
"/portuguese",
"/turkish",
"/thai",
"/vietnamese",
)
override suspend fun getListPage(
page: Int,
@ -30,13 +41,19 @@ internal class HentaiFox(context: MangaLoaderContext) :
append("https://")
append(domain)
if (!tags.isNullOrEmpty()) {
append("/tag/")
append(tag?.key.orEmpty())
if (tag?.key == "languageKey") {
append("/language")
append(tag.title)
} else {
append("/tag/")
append(tag?.key.orEmpty())
}
if (page > 1) {
append("/pag/")
append(page)
append("/")
}
} else if (!query.isNullOrEmpty()) {
append("/search/?q=")
append(query.urlEncoded())

@ -13,7 +13,14 @@ internal class HentaiRox(context: MangaLoaderContext) :
override val selectTags = ".gtags"
override val selectTag = "li:contains(Tags:)"
override val selectAuthor = "li:contains(Artists:) span.item_name"
override val urlReplaceBefore = "/gallery/"
override val urlReplaceAfter = "/view/"
override val selectLanguageChapter = "li:contains(Languages:) .item_name"
override val listLanguage = arrayOf(
"/english",
"/french",
"/japanese",
"/spanish",
"/russian",
"/korean",
"/german",
)
}

@ -18,13 +18,14 @@ internal class NHentaiParser(context: MangaLoaderContext) :
override val selectTags = "#tag-container a"
override val selectTag = ".tag-container:contains(Tags:) span.tags"
override val selectAuthor = "#tags div.tag-container:contains(Artists:) span.name"
override val urlReplaceBefore = "/g/"
override val urlReplaceAfter = "/g/"
override val selectLanguageChapter =
".tag-container:contains(Languages:) span.tags a:not(.tag-17249) span.name" // tag-17249 = translated
override val selectTotalPage = ".num-pages"
override val idImg = "image-container"
override val listLanguage = arrayOf(
"/english",
"/japanese",
"/chinese",
)
override suspend fun getListPage(
page: Int,
@ -40,10 +41,15 @@ internal class NHentaiParser(context: MangaLoaderContext) :
append(domain)
if (!tags.isNullOrEmpty()) {
val tag = tags.single()
append("/tag/")
append(tag.key)
append("/?")
if (tag.key == "languageKey") {
append("/language")
append(tag.title)
append("/?")
} else {
append("/tag/")
append(tag.key)
append("/?")
}
} else if (!query.isNullOrEmpty()) {
append("/search/?q=")
append(query.urlEncoded())

@ -8,6 +8,5 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("PHENIXSCANS", "PhenixScans", "fr")
internal class PhenixscansParser(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.PHENIXSCANS, "phenixscans.fr", pageSize = 20, searchPageSize = 10) {
override val datePattern = "MMM d, yyyy"
}

@ -8,7 +8,6 @@ import java.util.*
@MangaSourceParser("MANGAKITA", "MangaKita", "id")
internal class MangakKita(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MANGAKITA, "mangakita.net", pageSize = 20, searchPageSize = 20) {
override val datePattern = "MMM d, yyyy"
MangaReaderParser(context, MangaSource.MANGAKITA, "mangakita.id", pageSize = 20, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH
}

Loading…
Cancel
Save