Urls : DomalFansub, HentaiVN, PheTruyen, TruyentranhLH

Add : KomikSay, MangaLesen
Remove : 1stManhwa, ConsejoDeMatones, OzulScans, SugarLab, HyoManga, Mi2Manga
pull/421/head
devi 2 years ago
parent b274b51699
commit 5cdbda700b

@ -182,8 +182,7 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con
override suspend fun getAvailableTags(): Set<MangaTag> { override suspend fun getAvailableTags(): Set<MangaTag> {
val doc = webClient.httpGet("https://$domain/").parseHtml() val doc = webClient.httpGet("https://$domain/").parseHtml()
val body = doc.body() val body = doc.body()
val root = body.select(".asp_gochosen")[1] val list = body.select(".asp_gochosen")[1].select("option").orEmpty()
val list = root?.select("option").orEmpty()
return list.mapToSet { li -> return list.mapToSet { li ->
MangaTag( MangaTag(
key = li.text().lowercase().replace(" ", "-"), key = li.text().lowercase().replace(" ", "-"),

@ -0,0 +1,10 @@
package org.koitharu.kotatsu.parsers.site.madara.de
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGALESEN", "MangaLesen", "de")
internal class MangaLesen(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGALESEN, "mangalesen.net")

@ -1,10 +0,0 @@
package org.koitharu.kotatsu.parsers.site.madara.en
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("STMANHWA", "1stManhwa", "en")
internal class StManhwa(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.STMANHWA, "1stmanhwa.com")

@ -1,10 +0,0 @@
package org.koitharu.kotatsu.parsers.site.madara.es
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("CONSEJODEMATONES", "ConsejoDeMatones", "es")
internal class ConsejoDeMatones(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.CONSEJODEMATONES, "www.consejodematones.xyz")

@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("ASTRALMANGA", "AstralManga", "fr") @MangaSourceParser("ASTRALMANGA", "AstralManga", "fr")
internal class AstralManga(context: MangaLoaderContext) : internal class AstralManga(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.ASTRALMANGA, "astral-manga.fr", pageSize = 12) { MadaraParser(context, MangaSource.ASTRALMANGA, "astral-manga.fr") {
override val datePattern = "dd/MM/yyyy" override val datePattern = "dd/MM/yyyy"
} }

@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("DOMALFANSB", "DomalFansub", "tr") @MangaSourceParser("DOMALFANSB", "DomalFansub", "tr")
internal class DomalFansb(context: MangaLoaderContext) : internal class DomalFansb(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.DOMALFANSB, "domalfansb.com") { MadaraParser(context, MangaSource.DOMALFANSB, "domalfansub.com.tr") {
override val datePattern = "d MMMM yyyy" override val datePattern = "d MMMM yyyy"
override val tagPrefix = "manga-turleri/" override val tagPrefix = "manga-turleri/"
} }

@ -1,14 +0,0 @@
package org.koitharu.kotatsu.parsers.site.madara.vi
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MI2MANGA", "Mi2Manga", "vi")
internal class Mi2Manga(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MI2MANGA, "www.mi2manga2.com") {
override val listUrl = "truyen-tranh/"
override val tagPrefix = "the-loai/"
override val datePattern = "d MMMM, yyyy"
}

@ -11,7 +11,7 @@ import java.util.EnumSet
@MangaSourceParser("SAYTRUYENHAY", "PheTruyen", "vi") @MangaSourceParser("SAYTRUYENHAY", "PheTruyen", "vi")
internal class Saytruyenhay(context: MangaLoaderContext) : internal class Saytruyenhay(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.SAYTRUYENHAY, "phetruyen.net", 40) { MadaraParser(context, MangaSource.SAYTRUYENHAY, "phetruyen.pro", 40) {
override val tagPrefix = "genre/" override val tagPrefix = "genre/"
override val withoutAjax = true override val withoutAjax = true

@ -1,12 +0,0 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("OZULSCANSEN", "OzulScans", "en")
internal class OzulScansEn(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.OZULSCANSEN, "ozulscansen.com", pageSize = 30, searchPageSize = 10) {
override val listUrl = "/comics"
}

@ -2,13 +2,12 @@ package org.koitharu.kotatsu.parsers.site.mangareader.id
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.util.* import java.util.*
@MangaSourceParser("SUGARLAB", "SugarLab", "id", ContentType.HENTAI) @MangaSourceParser("KOMIKSAY", "KomikSay", "id")
internal class SugarLab(context: MangaLoaderContext) : internal class KomikSay(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.SUGARLAB, "sugarlab.my.id", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaSource.KOMIKSAY, "komiksay.info", pageSize = 30, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH override val sourceLocale: Locale = Locale.ENGLISH
} }

@ -81,7 +81,7 @@ internal abstract class ChanParser(
description = root.getElementById("description")?.html()?.substringBeforeLast("<div"), description = root.getElementById("description")?.html()?.substringBeforeLast("<div"),
largeCoverUrl = root.getElementById("cover")?.absUrl("src"), largeCoverUrl = root.getElementById("cover")?.absUrl("src"),
chapters = root.select("table.table_cha tr:gt(1)").mapChapters(reversed = true) { i, tr -> chapters = root.select("table.table_cha tr:gt(1)").mapChapters(reversed = true) { i, tr ->
val href = tr?.selectFirst("a")?.attrAsRelativeUrlOrNull("href") val href = tr.selectFirst("a")?.attrAsRelativeUrlOrNull("href")
?: return@mapChapters null ?: return@mapChapters null
MangaChapter( MangaChapter(
id = generateUid(href), id = generateUid(href),

@ -106,7 +106,7 @@ class MangaInUaParser(context: MangaLoaderContext) : PagedMangaParser(
largeCoverUrl = root.selectFirst("div.item__full-sidebar--poster")?.selectFirst("img") largeCoverUrl = root.selectFirst("div.item__full-sidebar--poster")?.selectFirst("img")
?.attrAsAbsoluteUrlOrNull("src"), ?.attrAsAbsoluteUrlOrNull("src"),
chapters = chapterNodes.mapChapters { _, item -> chapters = chapterNodes.mapChapters { _, item ->
val href = item?.selectFirst("a")?.attrAsRelativeUrlOrNull("href") ?: return@mapChapters null val href = item.selectFirst("a")?.attrAsRelativeUrlOrNull("href") ?: return@mapChapters null
val isAlternative = item.styleValueOrNull("background") != null val isAlternative = item.styleValueOrNull("background") != null
val name = item.selectFirst("a")?.text().orEmpty() val name = item.selectFirst("a")?.text().orEmpty()
if (!isAlternative) i++ if (!isAlternative) i++

@ -23,7 +23,7 @@ private const val SEARCH_PAGE_SIZE = 10
@MangaSourceParser("HENTAIVN", "HentaiVN", "vi", type = ContentType.HENTAI) @MangaSourceParser("HENTAIVN", "HentaiVN", "vi", type = ContentType.HENTAI)
class HentaiVNParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.HENTAIVN) { class HentaiVNParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.HENTAIVN) {
override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("hentaivn.autos", "hentaivn.tv") override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("hentaivn.red", "hentaivn.autos", "hentaivn.tv")
// hentaivn has created 2 different interfaces for mobile and desktop, and Cloudflare detects whether it's mobile or not even with a desktop user agent. // hentaivn has created 2 different interfaces for mobile and desktop, and Cloudflare detects whether it's mobile or not even with a desktop user agent.
override val headers: Headers = Headers.Builder().add("User-Agent", UserAgents.CHROME_MOBILE).build() override val headers: Headers = Headers.Builder().add("User-Agent", UserAgents.CHROME_MOBILE).build()

@ -17,7 +17,7 @@ import java.util.*
class TruyentranhLHParser(context: MangaLoaderContext) : class TruyentranhLHParser(context: MangaLoaderContext) :
PagedMangaParser(context, source = MangaSource.TRUYENTRANHLH, pageSize = 18) { PagedMangaParser(context, source = MangaSource.TRUYENTRANHLH, pageSize = 18) {
override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("truyentranhlh.net") override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("truyenlh.com")
override val availableSortOrders: Set<SortOrder> = EnumSet.allOf(SortOrder::class.java) override val availableSortOrders: Set<SortOrder> = EnumSet.allOf(SortOrder::class.java)
override val availableStates: Set<MangaState> = override val availableStates: Set<MangaState> =
EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED) EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED)

@ -1,12 +0,0 @@
package org.koitharu.kotatsu.parsers.site.zeistmanga.id
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser
@MangaSourceParser("HYOMANGA", "HyoManga", "id")
internal class HyoManga(context: MangaLoaderContext) :
ZeistMangaParser(context, MangaSource.HYOMANGA, "www.hyomanga.my.id") {
override val mangaCategory = "Manga"
}

@ -51,11 +51,9 @@ internal class KomikGes(context: MangaLoaderContext) :
} }
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> { override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml() val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml()
return doc.selectFirstOrThrow("script:containsData(let data_content =)").data()
return doc.selectFirstOrThrow("script:containsData(let data_content =)").data().split("src\\x3d\\x22").drop(1) .split("src\\x3d\\x22").drop(1)
.map { img -> .map { img ->
val url = img.substringBefore("\\x22") val url = img.substringBefore("\\x22")
MangaPage( MangaPage(
@ -65,6 +63,5 @@ internal class KomikGes(context: MangaLoaderContext) :
source = source, source = source,
) )
} }
} }
} }

Loading…
Cancel
Save