[TruyenHentai18] Fix getPages

master
Draken 9 months ago committed by GitHub
commit 9995657da5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,13 +1,11 @@
package org.koitharu.kotatsu.parsers.site.all package org.koitharu.kotatsu.parsers.site.all
import androidx.collection.ArraySet
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
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.config.ConfigKey import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.core.PagedMangaParser import org.koitharu.kotatsu.parsers.core.PagedMangaParser
import org.koitharu.kotatsu.parsers.exception.ParseException
import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat

@ -1,9 +1,7 @@
package org.koitharu.kotatsu.parsers.site.vi package org.koitharu.kotatsu.parsers.site.vi
import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.Jsoup
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.config.ConfigKey import org.koitharu.kotatsu.parsers.config.ConfigKey
@ -13,9 +11,7 @@ import org.koitharu.kotatsu.parsers.util.*
import org.koitharu.kotatsu.parsers.util.json.* import org.koitharu.kotatsu.parsers.util.json.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
import org.koitharu.kotatsu.parsers.Broken
@Broken
@MangaSourceParser("TRUYENHENTAI18", "TruyenHentai18", "vi", ContentType.HENTAI) @MangaSourceParser("TRUYENHENTAI18", "TruyenHentai18", "vi", ContentType.HENTAI)
internal class TruyenHentai18(context: MangaLoaderContext): internal class TruyenHentai18(context: MangaLoaderContext):
PagedMangaParser(context, MangaParserSource.TRUYENHENTAI18, 18) { PagedMangaParser(context, MangaParserSource.TRUYENHENTAI18, 18) {
@ -83,11 +79,10 @@ internal class TruyenHentai18(context: MangaLoaderContext):
} }
} }
val fullUrl = "https://" + url
return when { return when {
filter.tags.isNotEmpty() -> parseNextList(webClient.httpGet(fullUrl).parseHtml()) filter.tags.isNotEmpty() -> parseNextList(webClient.httpGet("https://$url").parseHtml())
else -> { else -> {
val doc = webClient.httpGet(fullUrl).parseJson() val doc = webClient.httpGet("https://$url").parseJson()
parseJSONList(doc) parseJSONList(doc)
} }
} }
@ -234,25 +229,19 @@ internal class TruyenHentai18(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()
val scriptContent = doc.select("script") val scriptContent = doc.select("script")
.firstOrNull { it.data().startsWith("self.__next_f.push([1,\"\\u003cp\\u003e\\u003c") } .firstOrNull { it.data().contains("img src") }
?.data() ?.data()
?: return emptyList()
if (scriptContent != null) { val decoded = scriptContent
val regex = Regex("""self\.__next_f\.push\(\[1,\"(.*)\"\]\)""")
val htmlEncoded = regex.find(scriptContent)?.groupValues?.getOrNull(1)
if (!htmlEncoded.isNullOrEmpty()) {
val html = try {
JSONArray("[\"$htmlEncoded\"]").getString(0)
} catch (e: Exception) {
htmlEncoded
.replace("\\u003c", "<") .replace("\\u003c", "<")
.replace("\\u003e", ">") .replace("\\u003e", ">")
.replace("\\\"", "\"") .replace("\\\"", "\"")
.replace("\\/", "/") .replace("\\/", "/")
}
val imageUrls = Jsoup.parse(html).select("img").mapNotNull { it.attr("src") } val regex = Regex("""img\s+src=["'](https?://[^"']+)["']""")
if (imageUrls.isNotEmpty()) { val imageUrls = regex.findAll(decoded).map { it.groupValues[1] }.toList()
return imageUrls.map { url -> return imageUrls.map { url ->
MangaPage( MangaPage(
id = generateUid(url), id = generateUid(url),
@ -261,10 +250,6 @@ internal class TruyenHentai18(context: MangaLoaderContext):
source = source, source = source,
) )
} }
} else return emptyList()
}
}
return emptyList()
} }
private fun parseChapterDate(date: String?): Long { private fun parseChapterDate(date: String?): Long {

Loading…
Cancel
Save