Fixed Kuaikanmanhua and changed name (#9830)

* Changed name to chinese, fixed chapter list

* Added some regex to fix some json

* Fixed page parse, gave explicit id
This commit is contained in:
ShadesOfRay 2021-11-20 08:44:30 -05:00 committed by GitHub
parent 57c1078f80
commit 9dd19d66e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 37 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'Kuaikanmanhua'
pkgNameSuffix = 'zh.kuaikanmanhua'
extClass = '.Kuaikanmanhua'
extVersionCode = 6
extVersionCode = 7
}
apply from: "$rootDir/common.gradle"

View File

@ -12,23 +12,25 @@ import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.util.asJsoup
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.boolean
import kotlinx.serialization.json.int
import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.long
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import rx.Observable
import uy.kohesive.injekt.injectLazy
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
import kotlin.collections.ArrayList
class Kuaikanmanhua : HttpSource() {
override val name = "Kuaikanmanhua"
override val name = "快看漫画"
override val id: Long = 8099870292642776005
override val baseUrl = "https://www.kuaikanmanhua.com"
@ -150,40 +152,36 @@ class Kuaikanmanhua : HttpSource() {
// Chapters & Pages
override fun chapterListParse(response: Response): List<SChapter> {
val document = response.asJsoup()
val script = document.select("script:containsData(comics)").first().data()
val comics = script.substringAfter("comics:")
.substringBefore(",first_comic_id")
.let { json.parseToJsonElement(it).jsonArray }
val variable = script.substringAfter("(function(")
.substringBefore("){")
.split(",")
val value = script.substringAfterLast("}}(")
.substringBefore("));")
.split(",")
override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {
val newUrl = apiUrl + "/v1/topics/" + manga.url.trimEnd('/').substringAfterLast("/")
val response = client.newCall(GET(newUrl)).execute()
val chapters = chapterListParse(response)
return Observable.just(chapters)
}
return document.select("div.TopicItem")
.mapIndexed { index, element ->
override fun chapterListParse(response: Response): List<SChapter> {
val data = json.parseToJsonElement(response.body!!.string())
.jsonObject["data"]!!
.jsonObject
val chaptersJson = data["comics"]!!.jsonArray
val chapters = mutableListOf<SChapter>()
for (i in 0 until chaptersJson.size) {
val obj = chaptersJson[i].jsonObject
chapters.add(
SChapter.create().apply {
val idVar = comics[index].jsonObject["id"]!!.jsonPrimitive.content
val id = value[variable.indexOf(idVar)]
url = "/web/comic/$id"
name = element.select("div.title > a").text()
if (element.select("i.lockedIcon").isNotEmpty()) {
name += " \uD83D\uDD12"
}
var dateStr = element.select("div.date > span").text()
dateStr = if (dateStr.length == 5) {
val year = Calendar.getInstance().get(Calendar.YEAR)
"$year-$dateStr"
} else {
"20$dateStr"
}
date_upload = runCatching { DATE_FORMAT.parse(dateStr)?.time }
.getOrNull() ?: 0L
url = "/web/comic/" + obj["id"]!!.jsonPrimitive.content
name = obj["title"]!!.jsonPrimitive.content +
if (!obj["can_view"]!!.jsonPrimitive.boolean) {
" \uD83D\uDD12"
} else {
""
}
date_upload = obj["created_at"]!!.jsonPrimitive.long * 1000
}
)
}
return chapters
}
override fun fetchPageList(chapter: SChapter): Observable<List<Page>> {
@ -192,17 +190,26 @@ class Kuaikanmanhua : HttpSource() {
}
override fun pageListRequest(chapter: SChapter): Request {
if (chapter.name.endsWith("🔒")) {
throw Exception("[此章节为付费内容]")
}
// if (chapter.name.endsWith("🔒")) {
// throw Exception("[此章节为付费内容]")
// }
return GET(baseUrl + chapter.url)
}
val fixJson: (MatchResult) -> CharSequence = {
match: MatchResult ->
val str = match.value
val out = str[0] + "\"" + str.subSequence(1, str.length - 1) + "\"" + str[str.length - 1]
out
}
override fun pageListParse(response: Response): List<Page> {
val document = response.asJsoup()
val script = document.selectFirst("script:containsData(comicImages)").data()
val images = script.substringAfter("comicImages:")
.substringBefore("},nextComicInfo")
.replace("""(:([^\[\{\"]+?)[\},])""".toRegex(), fixJson)
.replace("""([,{]([^\[\{\"]+?)[\}:])""".toRegex(), fixJson)
.let { json.parseToJsonElement(it).jsonArray }
val variable = script.substringAfter("(function(")
.substringBefore("){")