Minor daily update
parent
e788cff04a
commit
9d33d1a560
@ -0,0 +1,79 @@
|
|||||||
|
package org.koitharu.kotatsu.parsers.site.galleryadults.all
|
||||||
|
|
||||||
|
import org.jsoup.nodes.Element
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
|
import org.koitharu.kotatsu.parsers.model.*
|
||||||
|
import org.koitharu.kotatsu.parsers.site.galleryadults.GalleryAdultsParser
|
||||||
|
import org.koitharu.kotatsu.parsers.util.domain
|
||||||
|
import org.koitharu.kotatsu.parsers.util.mapToSet
|
||||||
|
import org.koitharu.kotatsu.parsers.util.oneOrThrowIfMany
|
||||||
|
import org.koitharu.kotatsu.parsers.util.parseHtml
|
||||||
|
import org.koitharu.kotatsu.parsers.util.removeSuffix
|
||||||
|
import org.koitharu.kotatsu.parsers.util.urlEncoded
|
||||||
|
|
||||||
|
@MangaSourceParser("HENTAIENVY", "HentaiEnvy", type = ContentType.HENTAI)
|
||||||
|
internal class HentaiEnvy(context: MangaLoaderContext) :
|
||||||
|
GalleryAdultsParser(context, MangaSource.HENTAIENVY, "hentaienvy.com") {
|
||||||
|
override val selectGalleryLink = "a"
|
||||||
|
override val selectGalleryTitle = "div.title"
|
||||||
|
override val selectTags = ".tags_items"
|
||||||
|
override val selectTag = ".gt_right_tags ul:contains(Tags:)"
|
||||||
|
override val selectAuthor = ".gt_right_tags ul:contains(Artists:) a"
|
||||||
|
override val selectLanguageChapter = ".gt_right_tags ul:contains(Languages:) a"
|
||||||
|
override val idImg = "fimg"
|
||||||
|
override val listLanguage = arrayOf(
|
||||||
|
"/english",
|
||||||
|
"/french",
|
||||||
|
"/japanese",
|
||||||
|
"/chinese",
|
||||||
|
"/spanish",
|
||||||
|
"/russian",
|
||||||
|
"/korean",
|
||||||
|
"/german",
|
||||||
|
"/portuguese",
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun Element.parseTags() = select("a").mapToSet {
|
||||||
|
val key = it.attr("href").removeSuffix('/').substringAfterLast('/')
|
||||||
|
val name = it.html().substringBefore("<")
|
||||||
|
MangaTag(
|
||||||
|
key = key,
|
||||||
|
title = name,
|
||||||
|
source = source,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getListPage(
|
||||||
|
page: Int,
|
||||||
|
query: String?,
|
||||||
|
tags: Set<MangaTag>?,
|
||||||
|
sortOrder: SortOrder,
|
||||||
|
): List<Manga> {
|
||||||
|
val tag = tags.oneOrThrowIfMany()
|
||||||
|
val url = buildString {
|
||||||
|
append("https://")
|
||||||
|
append(domain)
|
||||||
|
if (!tags.isNullOrEmpty()) {
|
||||||
|
if (tag?.key == "languageKey") {
|
||||||
|
append("/language")
|
||||||
|
append(tag.title)
|
||||||
|
append("/?")
|
||||||
|
} else {
|
||||||
|
append("/tag/")
|
||||||
|
append(tag?.key.orEmpty())
|
||||||
|
append("/?")
|
||||||
|
}
|
||||||
|
} else if (!query.isNullOrEmpty()) {
|
||||||
|
append("/search/?s_key=")
|
||||||
|
append(query.urlEncoded())
|
||||||
|
append("&")
|
||||||
|
} else {
|
||||||
|
append("/?")
|
||||||
|
}
|
||||||
|
append("page=")
|
||||||
|
append(page)
|
||||||
|
}
|
||||||
|
return parseMangaList(webClient.httpGet(url).parseHtml())
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
package org.koitharu.kotatsu.parsers.site.galleryadults.all
|
||||||
|
|
||||||
|
import org.jsoup.nodes.Element
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
|
import org.koitharu.kotatsu.parsers.model.*
|
||||||
|
import org.koitharu.kotatsu.parsers.site.galleryadults.GalleryAdultsParser
|
||||||
|
import org.koitharu.kotatsu.parsers.util.*
|
||||||
|
|
||||||
|
@MangaSourceParser("HENTAIFORCE", "HentaiForce", type = ContentType.HENTAI)
|
||||||
|
internal class HentaiForce(context: MangaLoaderContext) :
|
||||||
|
GalleryAdultsParser(context, MangaSource.HENTAIFORCE, "hentaiforce.net") {
|
||||||
|
override val selectGallery = ".gallery"
|
||||||
|
override val selectGalleryLink = "a.gallery-thumb"
|
||||||
|
override val pathTagUrl = "/tags/popular/"
|
||||||
|
override val selectTags = ".tag-listing"
|
||||||
|
override val selectUrlChapter = "#gallery-main-cover a"
|
||||||
|
override val selectTag = "div.tag-container:contains(Tags:)"
|
||||||
|
override val selectAuthor = "div.tag-container:contains(Artists:) a"
|
||||||
|
override val selectLanguageChapter = "div.tag-container:contains(Languages:) a"
|
||||||
|
override val idImg = ".gallery-reader-img-wrapper img"
|
||||||
|
override val listLanguage = arrayOf(
|
||||||
|
"/english",
|
||||||
|
"/french",
|
||||||
|
"/japanese",
|
||||||
|
"/chinese",
|
||||||
|
"/spanish",
|
||||||
|
"/russian",
|
||||||
|
"/korean",
|
||||||
|
"/german",
|
||||||
|
"/indonesian",
|
||||||
|
"/italian",
|
||||||
|
"/portuguese",
|
||||||
|
"/thai",
|
||||||
|
"/vietnamese",
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun Element.parseTags() = select("a").mapToSet {
|
||||||
|
val key = it.attr("href").removeSuffix('/').substringAfterLast('/')
|
||||||
|
val name = it.html().substringBefore("<")
|
||||||
|
MangaTag(
|
||||||
|
key = key,
|
||||||
|
title = name,
|
||||||
|
source = source,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getPageUrl(page: MangaPage): String {
|
||||||
|
val doc = webClient.httpGet(page.url.toAbsoluteUrl(domain)).parseHtml()
|
||||||
|
return doc.selectFirstOrThrow(idImg).src() ?: doc.parseFailed("Image src not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getListPage(
|
||||||
|
page: Int,
|
||||||
|
query: String?,
|
||||||
|
tags: Set<MangaTag>?,
|
||||||
|
sortOrder: SortOrder,
|
||||||
|
): List<Manga> {
|
||||||
|
val tag = tags.oneOrThrowIfMany()
|
||||||
|
val url = buildString {
|
||||||
|
append("https://")
|
||||||
|
append(domain)
|
||||||
|
if (!tags.isNullOrEmpty()) {
|
||||||
|
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())
|
||||||
|
append("&page=")
|
||||||
|
} else {
|
||||||
|
append("/page/")
|
||||||
|
}
|
||||||
|
append(page)
|
||||||
|
}
|
||||||
|
return parseMangaList(webClient.httpGet(url).parseHtml())
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue