From 486db23175f637a0da252cae9de2d22c317f1bed Mon Sep 17 00:00:00 2001 From: anenasa <84259093+anenasa@users.noreply.github.com> Date: Mon, 16 Aug 2021 18:09:16 +0800 Subject: [PATCH] Kuaikanmanhua: View paid chapters (#8578) --- src/zh/kuaikanmanhua/build.gradle | 2 +- .../zh/kuaikanmanhua/Kuaikanmanhua.kt | 61 +++++++++++-------- 2 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/zh/kuaikanmanhua/build.gradle b/src/zh/kuaikanmanhua/build.gradle index 9109984bf..f4b1be9b9 100644 --- a/src/zh/kuaikanmanhua/build.gradle +++ b/src/zh/kuaikanmanhua/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Kuaikanmanhua' pkgNameSuffix = 'zh.kuaikanmanhua' extClass = '.Kuaikanmanhua' - extVersionCode = 4 + extVersionCode = 5 libVersion = '1.2' } diff --git a/src/zh/kuaikanmanhua/src/eu/kanade/tachiyomi/extension/zh/kuaikanmanhua/Kuaikanmanhua.kt b/src/zh/kuaikanmanhua/src/eu/kanade/tachiyomi/extension/zh/kuaikanmanhua/Kuaikanmanhua.kt index 322e83fd0..7faeae37d 100644 --- a/src/zh/kuaikanmanhua/src/eu/kanade/tachiyomi/extension/zh/kuaikanmanhua/Kuaikanmanhua.kt +++ b/src/zh/kuaikanmanhua/src/eu/kanade/tachiyomi/extension/zh/kuaikanmanhua/Kuaikanmanhua.kt @@ -9,12 +9,16 @@ import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource +import eu.kanade.tachiyomi.util.asJsoup import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import org.json.JSONArray import org.json.JSONObject import rx.Observable +import java.text.SimpleDateFormat +import java.util.Calendar +import kotlin.collections.ArrayList class Kuaikanmanhua : HttpSource() { @@ -138,34 +142,35 @@ class Kuaikanmanhua : HttpSource() { // Chapters & Pages - override fun fetchChapterList(manga: SManga): Observable> { - val newUrl = apiUrl + "/v1/topics/" + manga.url.trimEnd('/').substringAfterLast("/") - val response = client.newCall(GET(newUrl)).execute() - val chapters = chapterListParse(response) - return Observable.just(chapters) - } - override fun chapterListParse(response: Response): List { - val data = JSONObject(response.body!!.string()).getJSONObject("data") - val chaptersJson = data.getJSONArray("comics") + val document = response.asJsoup() val chapters = mutableListOf() + val script = document.select("script:containsData(comics)").first().data() + val comics = JSONArray(script.substringAfter("comics:").substringBefore(",first_comic_id")) + val variable = script.substringAfter("(function(").substringBefore("){").split(",") + val value = script.substringAfterLast("}}(").substringBefore("));").split(",") - for (i in 0 until chaptersJson.length()) { - val obj = chaptersJson.getJSONObject(i) + document.select("div.TopicItem").forEachIndexed { index, element -> chapters.add( SChapter.create().apply { - url = "/v2/comic/" + obj.getString("id") - name = obj.getString("title") + - if (!obj.getBoolean("can_view")) { - " \uD83D\uDD12" - } else { - "" - } - date_upload = obj.getLong("created_at") * 1000 + val idVar = comics.getJSONObject(index).getString("id") + 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 = SimpleDateFormat("yyyy-MM-dd").parse(dateStr).time } ) } - return chapters } @@ -178,16 +183,20 @@ class Kuaikanmanhua : HttpSource() { if (chapter.name.endsWith("🔒")) { throw Exception("[此章节为付费内容]") } - return GET(apiUrl + chapter.url) + return GET(baseUrl + chapter.url) } override fun pageListParse(response: Response): List { val pages = ArrayList() - val data = JSONObject(response.body!!.string()).getJSONObject("data") - val pagesJson = data.getJSONArray("images") - - for (i in 0 until pagesJson.length()) { - pages.add(Page(i, pagesJson.getString(i), pagesJson.getString(i))) + val document = response.asJsoup() + val script = document.selectFirst("script:containsData(comicImages)").data() + val images = JSONArray(script.substringAfter("comicImages:").substringBefore("},nextComicInfo")) + val variable = script.substringAfter("(function(").substringBefore("){").split(",") + val value = script.substringAfterLast("}}(").substringBefore("));").split(",") + for (i in 0 until images.length()) { + val urlVar = images.getJSONObject(i).getString("url") + val url = value[variable.indexOf(urlVar)].replace("\\u002F", "/").replace("\"", "") + pages.add(Page(i, "", url)) } return pages }