Jinmantiantang - clean up, parse chapters with 500+ pages (#4234)

This commit is contained in:
Mike 2020-08-27 23:20:52 -04:00 committed by GitHub
parent 8913a12b1e
commit f9bf91b65b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 37 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'Jinmantiantang' extName = 'Jinmantiantang'
pkgNameSuffix = 'zh.jinmantiantang' pkgNameSuffix = 'zh.jinmantiantang'
extClass = '.Jinmantiantang' extClass = '.Jinmantiantang'
extVersionCode = 2 extVersionCode = 3
libVersion = '1.2' libVersion = '1.2'
containsNsfw = true containsNsfw = true
} }

View File

@ -8,7 +8,9 @@ import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Locale
import okhttp3.HttpUrl import okhttp3.HttpUrl
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
@ -73,7 +75,7 @@ class Jinmantiantang : ParsedHttpSource() {
HttpUrl.parse("$baseUrl$params&page=$page&screen=$defaultRemovedGenres")?.newBuilder() HttpUrl.parse("$baseUrl$params&page=$page&screen=$defaultRemovedGenres")?.newBuilder()
} else { } else {
// 在搜索栏的关键词前添加-号来实现对筛选结果的过滤, 像 "-YAOI -扶他 -毛絨絨 -獵奇", 注意此时搜索功能不可用. // 在搜索栏的关键词前添加-号来实现对筛选结果的过滤, 像 "-YAOI -扶他 -毛絨絨 -獵奇", 注意此时搜索功能不可用.
val removedGenres = query.split(" ").filter { it.startsWith("-") }.map { it.removePrefix("-") }.joinToString("+") val removedGenres = query.split(" ").filter { it.startsWith("-") }.joinToString("+") { it.removePrefix("-") }
HttpUrl.parse("$baseUrl$params&page=$page&screen=$defaultRemovedGenres$removedGenres")?.newBuilder() HttpUrl.parse("$baseUrl$params&page=$page&screen=$defaultRemovedGenres$removedGenres")?.newBuilder()
} }
} }
@ -100,70 +102,73 @@ class Jinmantiantang : ParsedHttpSource() {
// When the index passed by the "selectDetailsStatusAndGenre(document: Document, index: Int)" index is 1, // When the index passed by the "selectDetailsStatusAndGenre(document: Document, index: Int)" index is 1,
// it will definitely return a String type of 0, 1 or 2. This warning can be ignored // it will definitely return a String type of 0, 1 or 2. This warning can be ignored
status = selectDetailsStatusAndGenre(document, 1).trim()!!.toInt() status = selectDetailsStatusAndGenre(document, 1).trim().toInt()
description = document.select("div.p-t-5.p-b-5").get(7).text().removePrefix("敘述:") description = document.select("div.p-t-5.p-b-5")[7].text().removePrefix("敘述:")
} }
// 查询作者信息 // 查询作者信息
private fun selectAuthor(document: Document): String { private fun selectAuthor(document: Document): String {
var element = document.select("div.tag-block").get(9) val element = document.select("div.tag-block")[9]
if (element.select("a").size == 0) { return if (element.select("a").size == 0) {
return "未知" "未知"
} else { } else {
return element.select("a").first().text() element.select("a").first().text()
} }
} }
// 查询漫画状态和类别信息 // 查询漫画状态和类别信息
private fun selectDetailsStatusAndGenre(document: Document, index: Int): String { private fun selectDetailsStatusAndGenre(document: Document, index: Int): String {
determineChapterInfo(document) determineChapterInfo(document)
var status: String = "0" var status = "0"
var genre: String = "" var genre = ""
if (document.select("span[itemprop=genre] a").size == 0) { if (document.select("span[itemprop=genre] a").size == 0) {
if (index == 1) { return if (index == 1) {
return status status
} else { } else {
return genre genre
} }
} }
var elements: Elements = document.select("span[itemprop=genre]").first().select("a") val elements: Elements = document.select("span[itemprop=genre]").first().select("a")
for (value in elements) { for (value in elements) {
var vote: String = value.select("a").text() when (val vote: String = value.select("a").text()) {
if (vote.equals("連載中")) { "連載中" -> {
status = "1" status = "1"
} else if (vote.equals("完結")) { }
status = "2" "完結" -> {
} else { status = "2"
genre = genre + "$vote " }
else -> {
genre = "$genre$vote "
}
} }
} }
if (index == 1) { return if (index == 1) {
return status status
} else { } else {
return genre genre
} }
} }
// 漫画章节信息 // 漫画章节信息
override fun chapterListSelector(): String = chapterArea override fun chapterListSelector(): String = chapterArea
override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
val sdf = SimpleDateFormat("yyyy-MM-dd") val sdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
if (chapterArea == "body") { if (chapterArea == "body") {
name = "Ch. 1" name = "Ch. 1"
url = element.select("a[class=col btn btn-primary dropdown-toggle reading]").attr("href") url = element.select("a[class=col btn btn-primary dropdown-toggle reading]").attr("href")
date_upload = sdf.parse(element.select("div[itemprop='datePublished']").attr("content")).time date_upload = sdf.parse(element.select("div[itemprop='datePublished']").attr("content"))?.time ?: 0
} else { } else {
url = element.select("a").attr("href") url = element.select("a").attr("href")
name = element.select("a li").first().ownText() name = element.select("a li").first().ownText()
date_upload = sdf.parse(element.select("a li span.hidden-xs").text().trim()).time date_upload = sdf.parse(element.select("a li span.hidden-xs").text().trim())?.time ?: 0
} }
} }
private fun determineChapterInfo(document: Document) { private fun determineChapterInfo(document: Document) {
if (document.select("div[id=episode-block] a li").size == 0) { chapterArea = if (document.select("div[id=episode-block] a li").size == 0) {
chapterArea = "body" "body"
} else { } else {
chapterArea = "div[id=episode-block] a[href^=/photo/]" "div[id=episode-block] a[href^=/photo/]"
} }
} }
@ -172,15 +177,23 @@ class Jinmantiantang : ParsedHttpSource() {
} }
// 漫画图片信息 // 漫画图片信息
override fun pageListParse(document: Document): List<Page> = mutableListOf<Page>().apply { override fun pageListParse(document: Document): List<Page> {
var elements = document.select("div[style=text-align:center;][id*=0]") fun internalParse(document: Document, pages: MutableList<Page>): List<Page> {
for (element in elements) { val elements = document.select("div[style=text-align:center;][id*=0]")
if (element.select("div[style=text-align:center;][id*=0] img").attr("src").indexOf("blank.jpg") >= 0) { for (element in elements) {
add(Page(size, "", element.select("div[style=text-align:center;][id*=0] img").attr("data-original").split("\\?")[0])) pages.apply {
} else { if (element.select("div[style=text-align:center;][id*=0] img").attr("src").indexOf("blank.jpg") >= 0) {
add(Page(size, "", element.select("div[style=text-align:center;][id*=0] img").attr("src").split("\\?")[0])) add(Page(size, "", element.select("div[style=text-align:center;][id*=0] img").attr("data-original").split("\\?")[0]))
} else {
add(Page(size, "", element.select("div[style=text-align:center;][id*=0] img").attr("src").split("\\?")[0]))
}
}
} }
return document.select("a.prevnext").firstOrNull()
?.let { internalParse(client.newCall(GET(it.attr("abs:href"), headers)).execute().asJsoup(), pages) } ?: pages
} }
return internalParse(document, mutableListOf())
} }
override fun imageUrlParse(document: Document): String = throw Exception("Not Used") override fun imageUrlParse(document: Document): String = throw Exception("Not Used")