KskMoe: get original quality images

AwkwardPeak7 3 years ago
parent a39d644094
commit 2ce5f2563a
No known key found for this signature in database
GPG Key ID: C3C1A2A38C3D37D6

@ -4,6 +4,8 @@ import androidx.collection.ArraySet
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import org.json.JSONArray
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
@ -11,6 +13,7 @@ import org.koitharu.kotatsu.parsers.PagedMangaParser
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.*
import org.koitharu.kotatsu.parsers.util.json.mapJSON
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
@ -127,37 +130,54 @@ internal class KskMoe(context: MangaLoaderContext) : PagedMangaParser(context, M
) )
}, },
author = doc.requireElementById("metadata").selectFirstOrThrow("main div:contains(Artist) a span").text(), author = doc.requireElementById("metadata").selectFirstOrThrow("main div:contains(Artist) a span").text(),
chapters = chapters = listOf(
if ((doc.html().contains("previews"))) {
listOf(
MangaChapter( MangaChapter(
id = generateUid(manga.id), id = generateUid(manga.id),
name = manga.title, name = manga.title,
number = 1, number = 1,
url = manga.url, url = manga.url
.replace("/view/", "/read/")
.let { "$it/1" },
scanlator = null, scanlator = null,
uploadDate = date.tryParse(doc.selectFirstOrThrow("time.updated").text()), uploadDate = date.tryParse(doc.selectFirstOrThrow("time.updated").text()),
branch = null, branch = null,
source = source, source = source,
), ),
) ),
} else {
emptyList()
},
) )
} }
// For the moment the pages are in poor quality.
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> { override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
val fullUrl = chapter.url.toAbsoluteUrl(domain) val fullUrl = chapter.url.toAbsoluteUrl(domain)
val doc = webClient.httpGet(fullUrl).parseHtml() val document = webClient.httpGet(fullUrl).parseHtml()
return doc.requireElementById("previews").select("main div img").map { img ->
val url = img.src() ?: img.parseFailed("Image src not found") val id = fullUrl
.substringAfter("/read/")
.substringBeforeLast("/")
val cdnUrl = document.selectFirst("meta[itemprop=image]")
?.attr("content")
?.toHttpUrlOrNull()
?.host
.let { "https://" + (it ?: domain) }
val script = document.select("script:containsData(window.metadata)").html()
val rawJson = script
.substringAfter("original:")
.substringBefore("resampled:")
.substringBeforeLast(",")
return JSONArray(rawJson).mapJSON {
val fileName = it.getString("n")
val url = "$cdnUrl/original/$id/$fileName"
val preview = "$cdnUrl/t/$id/320/$fileName"
MangaPage( MangaPage(
id = generateUid(url), id = generateUid(url),
url = url, url = url,
preview = null, preview = preview,
source = source, source = source,
) )
} }

Loading…
Cancel
Save