Merge pull request #631 from NagaYZ/fix-issue

Fix source domain and issue
master
Koitharu 2 years ago committed by GitHub
commit fec60955ed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,8 +1,6 @@
package org.koitharu.kotatsu.parsers.site.en package org.koitharu.kotatsu.parsers.site.en
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.*
import org.koitharu.kotatsu.parsers.MangaParser
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
@ -11,7 +9,7 @@ import java.text.SimpleDateFormat
import java.util.* import java.util.*
@MangaSourceParser("MANGATOWN", "MangaTown", "en") @MangaSourceParser("MANGATOWN", "MangaTown", "en")
internal class MangaTownParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.MANGATOWN) { internal class MangaTownParser(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.MANGATOWN, 30) {
override val configKeyDomain = ConfigKey.Domain("www.mangatown.com") override val configKeyDomain = ConfigKey.Domain("www.mangatown.com")
@ -29,8 +27,7 @@ internal class MangaTownParser(context: MangaLoaderContext) : MangaParser(contex
override val isMultipleTagsSupported = false override val isMultipleTagsSupported = false
override suspend fun getList(offset: Int, filter: MangaListFilter?): List<Manga> { override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
val page = (offset / 30) + 1
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)
@ -88,8 +85,13 @@ internal class MangaTownParser(context: MangaLoaderContext) : MangaParser(contex
} }
} }
val doc = webClient.httpGet(url).parseHtml() val doc = webClient.httpGet(url).parseHtml()
val root = doc.body().selectFirstOrThrow("ul.manga_pic_list") val root = doc.body().selectFirst("ul.manga_pic_list") ?: return emptyList()
return root.select("li").mapNotNull { li -> val manga = root.select("li")
if (manga.isEmpty()) {
return emptyList()
}
return manga.mapNotNull { li ->
val a = li.selectFirst("a.manga_cover") val a = li.selectFirst("a.manga_cover")
val href = a?.attrAsRelativeUrlOrNull("href") val href = a?.attrAsRelativeUrlOrNull("href")
?: return@mapNotNull null ?: return@mapNotNull null
@ -172,21 +174,41 @@ internal class MangaTownParser(context: MangaLoaderContext) : MangaParser(contex
val fullUrl = chapter.url.toAbsoluteUrl(domain) val fullUrl = chapter.url.toAbsoluteUrl(domain)
val doc = webClient.httpGet(fullUrl).parseHtml() val doc = webClient.httpGet(fullUrl).parseHtml()
val root = doc.body().selectFirstOrThrow("div.page_select") val root = doc.body().selectFirstOrThrow("div.page_select")
return root.selectFirstOrThrow("select").selectOrThrow("option").mapNotNull { val isManga = root.select("select")
val href = it.attrAsRelativeUrlOrNull("value")
if (href == null || href.endsWith("featured.html")) { if(isManga.isEmpty()){//Webtoon
return@mapNotNull null val imgElements = doc.select("div#viewer.read_img img.image")
return imgElements.map {
val href = it.attr("src")
MangaPage(
id = generateUid(href),
url = href,
preview = null,
source = MangaSource.MANGATOWN,
)
}
}else{ //Manga
return isManga.select("option").mapNotNull {
val href = it.attrAsRelativeUrlOrNull("value")
if (href == null || href.endsWith("featured.html")) {
return@mapNotNull null
}
MangaPage(
id = generateUid(href),
url = href,
preview = null,
source = MangaSource.MANGATOWN,
)
} }
MangaPage(
id = generateUid(href),
url = href,
preview = null,
source = MangaSource.MANGATOWN,
)
} }
} }
override suspend fun getPageUrl(page: MangaPage): String { override suspend fun getPageUrl(page: MangaPage): String {
if(page.url.startsWith("//")){//Webtoon
return page.url.toAbsoluteUrl(domain)
}
val doc = webClient.httpGet(page.url.toAbsoluteUrl(domain)).parseHtml() val doc = webClient.httpGet(page.url.toAbsoluteUrl(domain)).parseHtml()
return doc.requireElementById("image").attrAsAbsoluteUrl("src") return doc.requireElementById("image").attrAsAbsoluteUrl("src")
} }

@ -11,7 +11,7 @@ import java.text.SimpleDateFormat
@MangaSourceParser("NEOX_SCANS", "NeoxScans", "pt") @MangaSourceParser("NEOX_SCANS", "NeoxScans", "pt")
internal class Neoxscans(context: MangaLoaderContext) : internal class Neoxscans(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.NEOX_SCANS, "nexoscans.com", 18) { MadaraParser(context, MangaSource.NEOX_SCANS, "nexoscans.net", 18) {
override val datePattern = "dd/MM/yyyy" override val datePattern = "dd/MM/yyyy"
override suspend fun loadChapters(mangaUrl: String, document: Document): List<MangaChapter> { override suspend fun loadChapters(mangaUrl: String, document: Document): List<MangaChapter> {

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("RANDOMSCANS", "RandomScans", "pt") @MangaSourceParser("RANDOMSCANS", "RandomScans", "pt")
internal class RandomScans(context: MangaLoaderContext) : internal class RandomScans(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.RANDOMSCANS, "randomscanlators.net") MadaraParser(context, MangaSource.RANDOMSCANS, "luratoon.com")

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.wpcomics.WpComicsParser
@MangaSourceParser("NETTRUYENMAX", "NettruyenBing", "vi") @MangaSourceParser("NETTRUYENMAX", "NettruyenBing", "vi")
internal class Nettruyenmax(context: MangaLoaderContext) : internal class Nettruyenmax(context: MangaLoaderContext) :
WpComicsParser(context, MangaSource.NETTRUYENMAX, "www.nettruyenclub.com", 36) WpComicsParser(context, MangaSource.NETTRUYENMAX, "www.nettruyenbb.com", 36)

@ -11,6 +11,7 @@ import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
import org.koitharu.kotatsu.parsers.util.json.mapJSON import org.koitharu.kotatsu.parsers.util.json.mapJSON
import java.util.* import java.util.*
import kotlin.collections.HashSet
@MangaSourceParser("BAOZIMH", "Baozimh", "zh") @MangaSourceParser("BAOZIMH", "Baozimh", "zh")
internal class Baozimh(context: MangaLoaderContext) : internal class Baozimh(context: MangaLoaderContext) :
@ -111,7 +112,7 @@ internal class Baozimh(context: MangaLoaderContext) :
private fun parseMangaListSearch(doc: Document): List<Manga> { private fun parseMangaListSearch(doc: Document): List<Manga> {
return doc.select("div.comics-card").map { div -> return doc.select("div.comics-card").map { div ->
val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") val href = "https://$domain" + div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
url = href, url = href,
@ -182,15 +183,44 @@ internal class Baozimh(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().requireElementById("__nuxt") val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml()
return doc.select("button.pure-button").map { btn -> val pagesList = doc.requireElementById("__nuxt")
val chapterLink = doc.select("link[rel=canonical]").attr("href")
val nextChapterLink = doc.select("div.next_chapter a").attr("href")
var part = 2
val idSet = HashSet<Long>()
var pages = pagesList.select("button.pure-button").map { btn ->
val urlPage = btn.attr("on").substringAfter(": '").substringBefore("?t=") val urlPage = btn.attr("on").substringAfter(": '").substringBefore("?t=")
val id = generateUid(urlPage)
idSet.add(id)
MangaPage( MangaPage(
id = generateUid(urlPage), id = id,
url = urlPage, url = urlPage,
preview = null, preview = null,
source = source, source = source,
) )
} }
val chapterPart = chapterLink.substringAfterLast("/").substringBefore(".html")
val nexChapterPart = nextChapterLink.substringAfterLast("/").substringBefore(".html")
while (nextChapterLink != "" && (nexChapterPart == chapterPart + "_" + part.toString())){
val doc2 = webClient.httpGet(nextChapterLink).parseHtml().requireElementById("__nuxt")
val pages2 = doc2.select("button.pure-button").mapNotNull { btn ->
val urlPage = btn.attr("on").substringAfter(": '").substringBefore("?t=")
val id = generateUid(urlPage)
if(!idSet.add(id)){
null
}else{
MangaPage(
id = id,
url = urlPage,
preview = null,
source = source,
)}
}
pages = pages+pages2
part++
}
return pages
} }
} }

Loading…
Cancel
Save