Merge pull request #631 from NagaYZ/fix-issue
Fix source domain and issue
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
package org.koitharu.kotatsu.parsers.site.en
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaParser
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.*
|
||||
import org.koitharu.kotatsu.parsers.config.ConfigKey
|
||||
import org.koitharu.kotatsu.parsers.model.*
|
||||
import org.koitharu.kotatsu.parsers.util.*
|
||||
@@ -11,7 +9,7 @@ import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
@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")
|
||||
|
||||
@@ -29,8 +27,7 @@ internal class MangaTownParser(context: MangaLoaderContext) : MangaParser(contex
|
||||
|
||||
override val isMultipleTagsSupported = false
|
||||
|
||||
override suspend fun getList(offset: Int, filter: MangaListFilter?): List<Manga> {
|
||||
val page = (offset / 30) + 1
|
||||
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
|
||||
val url = buildString {
|
||||
append("https://")
|
||||
append(domain)
|
||||
@@ -88,8 +85,13 @@ internal class MangaTownParser(context: MangaLoaderContext) : MangaParser(contex
|
||||
}
|
||||
}
|
||||
val doc = webClient.httpGet(url).parseHtml()
|
||||
val root = doc.body().selectFirstOrThrow("ul.manga_pic_list")
|
||||
return root.select("li").mapNotNull { li ->
|
||||
val root = doc.body().selectFirst("ul.manga_pic_list") ?: return emptyList()
|
||||
val manga = root.select("li")
|
||||
|
||||
if (manga.isEmpty()) {
|
||||
return emptyList()
|
||||
}
|
||||
return manga.mapNotNull { li ->
|
||||
val a = li.selectFirst("a.manga_cover")
|
||||
val href = a?.attrAsRelativeUrlOrNull("href")
|
||||
?: return@mapNotNull null
|
||||
@@ -172,21 +174,41 @@ internal class MangaTownParser(context: MangaLoaderContext) : MangaParser(contex
|
||||
val fullUrl = chapter.url.toAbsoluteUrl(domain)
|
||||
val doc = webClient.httpGet(fullUrl).parseHtml()
|
||||
val root = doc.body().selectFirstOrThrow("div.page_select")
|
||||
return root.selectFirstOrThrow("select").selectOrThrow("option").mapNotNull {
|
||||
val href = it.attrAsRelativeUrlOrNull("value")
|
||||
if (href == null || href.endsWith("featured.html")) {
|
||||
return@mapNotNull null
|
||||
val isManga = root.select("select")
|
||||
|
||||
if(isManga.isEmpty()){//Webtoon
|
||||
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 {
|
||||
if(page.url.startsWith("//")){//Webtoon
|
||||
return page.url.toAbsoluteUrl(domain)
|
||||
}
|
||||
|
||||
val doc = webClient.httpGet(page.url.toAbsoluteUrl(domain)).parseHtml()
|
||||
return doc.requireElementById("image").attrAsAbsoluteUrl("src")
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.text.SimpleDateFormat
|
||||
|
||||
@MangaSourceParser("NEOX_SCANS", "NeoxScans", "pt")
|
||||
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 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")
|
||||
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")
|
||||
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.json.mapJSON
|
||||
import java.util.*
|
||||
import kotlin.collections.HashSet
|
||||
|
||||
@MangaSourceParser("BAOZIMH", "Baozimh", "zh")
|
||||
internal class Baozimh(context: MangaLoaderContext) :
|
||||
@@ -111,7 +112,7 @@ internal class Baozimh(context: MangaLoaderContext) :
|
||||
|
||||
private fun parseMangaListSearch(doc: Document): List<Manga> {
|
||||
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(
|
||||
id = generateUid(href),
|
||||
url = href,
|
||||
@@ -182,15 +183,44 @@ internal class Baozimh(context: MangaLoaderContext) :
|
||||
}
|
||||
|
||||
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||
val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml().requireElementById("__nuxt")
|
||||
return doc.select("button.pure-button").map { btn ->
|
||||
val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml()
|
||||
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 id = generateUid(urlPage)
|
||||
idSet.add(id)
|
||||
MangaPage(
|
||||
id = generateUid(urlPage),
|
||||
id = id,
|
||||
url = urlPage,
|
||||
preview = null,
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user