[TruyenHentai18] Fix attempt 1

master
dragonx943 9 months ago
parent d0b2002a1b
commit 352d998680
No known key found for this signature in database
GPG Key ID: 48DD99A2C5421C1C

@ -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

@ -83,11 +83,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 +233,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 +254,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