Minor daily update

pull/365/head
devi 3 years ago
parent e788cff04a
commit 9d33d1a560

@ -38,7 +38,7 @@ internal class ComicExtra(context: MangaLoaderContext) : PagedMangaParser(contex
append(page)
}
} else if (!query.isNullOrEmpty()) {
append("search?keyword=")
append("comic-search?key=")
append(query.urlEncoded())
if (page > 1) {
append("&page=")

@ -56,9 +56,9 @@ internal abstract class GalleryAdultsParser(
return parseMangaList(webClient.httpGet(url).parseHtml())
}
protected open val selectGallery = ".preview_item"
protected open val selectGallery = ".thumb"
protected open val selectGalleryLink = ".inner_thumb a"
protected open val selectGalleryImg = ".inner_thumb img"
protected open val selectGalleryImg = "img"
protected open val selectGalleryTitle = "h2"
protected open fun parseMangaList(doc: Document): List<Manga> {
@ -95,7 +95,7 @@ internal abstract class GalleryAdultsParser(
}.awaitAll().flattenTo(ArraySet(360))
}
protected open val pathTagUrl = "/tags/popular/pag/"
protected open val pathTagUrl = "/tags/popular/?page="
protected open val selectTags = ".tags_page ul.tags li"
protected open val listLanguage = arrayOf(
"/english",
@ -143,7 +143,7 @@ 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 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"
protected open val selectUrlChapter = "#cover a, .cover a, .left_cover a, .g_thumb a, .gallery_left a, .gt_left a"
override suspend fun getDetails(manga: Manga): Manga {
val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()

@ -11,6 +11,7 @@ import org.koitharu.kotatsu.parsers.util.removeSuffix
@MangaSourceParser("ASMHENTAI", "AsmHentai", type = ContentType.HENTAI)
internal class AsmHentai(context: MangaLoaderContext) :
GalleryAdultsParser(context, MangaSource.ASMHENTAI, "asmhentai.com") {
override val selectGallery = ".preview_item"
override val selectGalleryLink = ".image a"
override val selectGalleryImg = ".image img"
override val pathTagUrl = "/tags/?page="

@ -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())
}
}

@ -14,8 +14,6 @@ import org.koitharu.kotatsu.parsers.util.urlEncoded
@MangaSourceParser("HENTAIERA", "HentaiEra", type = ContentType.HENTAI)
internal class HentaiEra(context: MangaLoaderContext) :
GalleryAdultsParser(context, MangaSource.HENTAIERA, "hentaiera.com", 25) {
override val selectGallery = ".thumb"
override val pathTagUrl = "/tags/popular?page="
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"

@ -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())
}
}

@ -11,6 +11,7 @@ import org.koitharu.kotatsu.parsers.util.*
internal class HentaiFox(context: MangaLoaderContext) :
GalleryAdultsParser(context, MangaSource.HENTAIFOX, "hentaifox.com") {
override val selectGallery = ".lc_galleries .thumb, .related_galleries .thumb"
override val pathTagUrl = "/tags/popular/pag/"
override val selectTags = ".list_tags"
override val selectTag = "ul.tags"
override val selectLanguageChapter = "ul.languages a.tag_btn"

@ -8,8 +8,7 @@ import org.koitharu.kotatsu.parsers.site.galleryadults.GalleryAdultsParser
@MangaSourceParser("HENTAIROX", "HentaiRox", type = ContentType.HENTAI)
internal class HentaiRox(context: MangaLoaderContext) :
GalleryAdultsParser(context, MangaSource.HENTAIROX, "hentairox.com") {
override val selectGallery = ".thumb"
override val pathTagUrl = "/tags/popular?page="
override val selectGalleryImg = ".inner_thumb img"
override val selectTags = ".gtags"
override val selectTag = "li:contains(Tags:)"
override val selectAuthor = "li:contains(Artists:) span.item_name"

@ -12,7 +12,6 @@ internal class NHentaiParser(context: MangaLoaderContext) :
GalleryAdultsParser(context, MangaSource.NHENTAI, "nhentai.net", 25) {
override val selectGallery = "div.index-container:not(.index-popular) .gallery, #related-container .gallery"
override val selectGalleryLink = "a"
override val selectGalleryImg = "img"
override val selectGalleryTitle = ".caption"
override val pathTagUrl = "/tags/popular?page="
override val selectTags = "#tag-container a"

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("SURYASCANS", "SuryaScans", "en")
internal class SuryaScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.SURYASCANS, "suryareader.com", pageSize = 5, searchPageSize = 5)
MangaReaderParser(context, MangaSource.SURYASCANS, "suryacomics.com", pageSize = 5, searchPageSize = 10)

Loading…
Cancel
Save