BainianManga (百年漫画): update url and update for new design (#10628)

This commit is contained in:
Vetle Ledaal 2022-01-31 12:10:53 +00:00 committed by GitHub
parent b3dd6236bb
commit 3d1630b784
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 51 additions and 40 deletions

View File

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

View File

@ -1,7 +1,6 @@
package eu.kanade.tachiyomi.extension.zh.bainianmanga
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
@ -9,23 +8,49 @@ import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import uy.kohesive.injekt.injectLazy
class BainianManga : ParsedHttpSource() {
override val name = "百年漫画"
override val baseUrl = "https://m.bnmanhua.com"
override val baseUrl = "https://www.bnman.net"
override val lang = "zh"
override val supportsLatest = true
override val client: OkHttpClient
get() = network.client.newBuilder()
.addNetworkInterceptor(rewriteOctetStream)
.build()
// Based on Pufei ext
private val rewriteOctetStream: Interceptor = Interceptor { chain ->
val originalResponse: Response = chain.proceed(chain.request())
if (originalResponse.headers("Content-Type").contains("application/octet-stream") && originalResponse.request.url.toString().contains(".jpg")) {
val orgBody = originalResponse.body!!.bytes()
val newBody = orgBody.toResponseBody("image/jpeg".toMediaTypeOrNull())
originalResponse.newBuilder()
.body(newBody)
.build()
} else originalResponse
}
private val json: Json by injectLazy()
override fun popularMangaRequest(page: Int) = GET("$baseUrl/page/hot/$page.html", headers)
override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/page/new/$page.html", headers)
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val url = "$baseUrl/index.php?m=vod-search-pg-$page-wd-$query.html".toHttpUrlOrNull()?.newBuilder()
val url = "$baseUrl/search.html?".toHttpUrl().newBuilder()
.addQueryParameter("keyword", query)
.addQueryParameter("page", page.toString())
return GET(url.toString(), headers)
}
@ -33,12 +58,12 @@ class BainianManga : ParsedHttpSource() {
override fun chapterListRequest(manga: SManga) = mangaDetailsRequest(manga)
override fun pageListRequest(chapter: SChapter) = GET(baseUrl + chapter.url, headers)
override fun popularMangaSelector() = "ul.tbox_m > li.vbox"
override fun popularMangaSelector() = "ul#list_img > li"
override fun latestUpdatesSelector() = popularMangaSelector()
override fun searchMangaSelector() = popularMangaSelector()
override fun chapterListSelector() = "ul.list_block > li"
override fun chapterListSelector() = "ul.jslist01 > li"
override fun searchMangaNextPageSelector() = "a.pagelink_a"
override fun searchMangaNextPageSelector() = ".pagination > li:last-child > a"
override fun popularMangaNextPageSelector() = searchMangaNextPageSelector()
override fun latestUpdatesNextPageSelector() = searchMangaNextPageSelector()
@ -50,11 +75,11 @@ class BainianManga : ParsedHttpSource() {
override fun searchMangaFromElement(element: Element) = mangaFromElement(element)
private fun mangaFromElement(element: Element): SManga {
val manga = SManga.create()
element.select("a.vbox_t").first().let {
element.select("a").first().let {
manga.setUrlWithoutDomain(it.attr("href"))
manga.title = it.attr("title").trim()
manga.title = it.select("p").first().text()
}
manga.thumbnail_url = element.select("mip-img").attr("src")
manga.thumbnail_url = element.select("img").attr("src")
return manga
}
@ -63,47 +88,33 @@ class BainianManga : ParsedHttpSource() {
val chapter = SChapter.create()
chapter.setUrlWithoutDomain(urlElement.attr("href"))
chapter.name = urlElement.text().trim()
chapter.name = urlElement.text()
return chapter
}
override fun mangaDetailsParse(document: Document): SManga {
val infoElement = document.select("div.data")
val infoElement = document.select(".info")
val manga = SManga.create()
manga.description = document.select("div.tbox_js").text().trim()
manga.author = infoElement.select("p.dir").text().substring(3).trim()
manga.description = document.select(".mt10").first().text()
manga.author = infoElement.select("ul > li > span:contains(漫画作者) + p").first().text()
return manga
}
override fun chapterListParse(response: Response): List<SChapter> {
return super.chapterListParse(response).asReversed()
}
override fun pageListParse(document: Document): List<Page> {
val html = document.html()
val baseImgUrl = "https://img.hltongchen.com/"
val imgUrlRegex = Regex("var z_img='(.*?)';")
val imgUrlArray = imgUrlRegex.find(html)?.groups?.get(1)?.value
if (imgUrlArray != null) {
val imgUrlList = Json.decodeFromString<List<String>>(imgUrlArray)
return imgUrlList.mapIndexed { i, imgUrl ->
Page(i, "", "$baseImgUrl$imgUrl")
}
override fun pageListParse(response: Response): List<Page> {
return json.decodeFromString<List<String>>(
response.body!!.string()
.substringAfter("var z_img='")
.substringBefore("';")
).mapIndexed { i, imageUrl ->
Page(i, "", imageUrl)
}
return listOf()
}
override fun pageListParse(document: Document): List<Page> =
throw UnsupportedOperationException("Not used.")
override fun imageUrlParse(document: Document) = ""
private class GenreFilter(genres: Array<String>) : Filter.Select<String>("Genre", genres)
override fun getFilterList() = FilterList(
GenreFilter(getGenreList())
)
private fun getGenreList() = arrayOf(
"All"
)
override fun getFilterList() = FilterList()
}