Update 'UM' selectors (again) and add block message. (#6634)

This commit is contained in:
Alessandro Jean 2021-04-20 11:56:30 -03:00 committed by GitHub
parent 87cfe3f5b1
commit 91ad434ffa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 7 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'Union Mangás' extName = 'Union Mangás'
pkgNameSuffix = 'pt.unionmangas' pkgNameSuffix = 'pt.unionmangas'
extClass = '.UnionMangas' extClass = '.UnionMangas'
extVersionCode = 21 extVersionCode = 22
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -1,8 +1,10 @@
package eu.kanade.tachiyomi.extension.pt.unionmangas package eu.kanade.tachiyomi.extension.pt.unionmangas
import com.github.salomonbrys.kotson.array import com.github.salomonbrys.kotson.array
import com.github.salomonbrys.kotson.nullObj
import com.github.salomonbrys.kotson.obj import com.github.salomonbrys.kotson.obj
import com.github.salomonbrys.kotson.string import com.github.salomonbrys.kotson.string
import com.google.gson.JsonElement
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.google.gson.JsonParser import com.google.gson.JsonParser
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
@ -50,7 +52,7 @@ class UnionMangas : ParsedHttpSource() {
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()
.add("Accept", ACCEPT) .add("Accept", ACCEPT)
.add("Accept-Language", ACCEPT_LANGUAGE) .add("Accept-Language", ACCEPT_LANGUAGE)
.add("Referer", "$baseUrl/inicial") .add("Referer", "$baseUrl/home")
override fun popularMangaRequest(page: Int): Request { override fun popularMangaRequest(page: Int): Request {
val listPath = if (page == 1) "" else "/visualizacoes/${page - 1}" val listPath = if (page == 1) "" else "/visualizacoes/${page - 1}"
@ -62,7 +64,17 @@ class UnionMangas : ParsedHttpSource() {
return GET("$baseUrl/lista-mangas/visualizacoes$pageStr", newHeaders) return GET("$baseUrl/lista-mangas/visualizacoes$pageStr", newHeaders)
} }
override fun popularMangaSelector(): String = "div.lista-mangas" override fun popularMangaParse(response: Response): MangasPage {
val results = super.popularMangaParse(response)
if (results.mangas.isEmpty()) {
throw Exception(BLOCK_MESSAGE)
}
return results
}
override fun popularMangaSelector(): String = "div.col-md-3.col-xs-6:has(img.img-thumbnail)"
override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply { override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
title = element.select("div[id^=bloco-tooltip] > b").first().text().withoutLanguage() title = element.select("div[id^=bloco-tooltip] > b").first().text().withoutLanguage()
@ -88,6 +100,16 @@ class UnionMangas : ParsedHttpSource() {
return POST("$baseUrl/assets/noticias.php", newHeaders, form) return POST("$baseUrl/assets/noticias.php", newHeaders, form)
} }
override fun latestUpdatesParse(response: Response): MangasPage {
val results = super.latestUpdatesParse(response)
if (results.mangas.isEmpty()) {
throw Exception(BLOCK_MESSAGE)
}
return results
}
override fun latestUpdatesSelector() = "div.row[style] div.col-md-12[style]" override fun latestUpdatesSelector() = "div.row[style] div.col-md-12[style]"
override fun latestUpdatesFromElement(element: Element): SManga = SManga.create().apply { override fun latestUpdatesFromElement(element: Element): SManga = SManga.create().apply {
@ -112,7 +134,7 @@ class UnionMangas : ParsedHttpSource() {
.build() .build()
val url = HttpUrl.parse("$baseUrl/assets/busca.php")!!.newBuilder() val url = HttpUrl.parse("$baseUrl/assets/busca.php")!!.newBuilder()
.addQueryParameter("pesquisa", query) .addQueryParameter("titulo", query)
return GET(url.toString(), newHeaders) return GET(url.toString(), newHeaders)
} }
@ -127,7 +149,8 @@ class UnionMangas : ParsedHttpSource() {
return MangasPage(listOf(manga), false) return MangasPage(listOf(manga), false)
} }
val result = response.asJsonObject() val result = response.asJson().nullObj
?: throw Exception(BLOCK_MESSAGE)
val mangas = result["items"].array val mangas = result["items"].array
.map { searchMangaFromObject(it.obj) } .map { searchMangaFromObject(it.obj) }
@ -148,7 +171,8 @@ class UnionMangas : ParsedHttpSource() {
} }
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
val infoElement = document.select("div.perfil-manga").first() val infoElement = document.select("div.perfil-manga").firstOrNull()
?: throw Exception(BLOCK_MESSAGE)
val rowInfo = infoElement.select("div.row:eq(2)").first() val rowInfo = infoElement.select("div.row:eq(2)").first()
title = infoElement.select("h2").first().text().withoutLanguage() title = infoElement.select("h2").first().text().withoutLanguage()
@ -160,6 +184,16 @@ class UnionMangas : ParsedHttpSource() {
thumbnail_url = infoElement.select(".img-thumbnail").first().attr("src") thumbnail_url = infoElement.select(".img-thumbnail").first().attr("src")
} }
override fun chapterListParse(response: Response): List<SChapter> {
val results = super.chapterListParse(response)
if (results.isEmpty()) {
throw Exception(BLOCK_MESSAGE)
}
return results
}
override fun chapterListSelector() = "div.row.capitulos" override fun chapterListSelector() = "div.row.capitulos"
override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
@ -221,7 +255,7 @@ class UnionMangas : ParsedHttpSource() {
private fun Element.textWithoutLabel(): String = text()!!.substringAfter(":").trim() private fun Element.textWithoutLabel(): String = text()!!.substringAfter(":").trim()
private fun Response.asJsonObject(): JsonObject = JSON_PARSER.parse(body()!!.string()).obj private fun Response.asJson(): JsonElement = JSON_PARSER.parse(body()!!.string())
companion object { companion object {
private const val ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9," + private const val ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9," +
@ -232,6 +266,9 @@ class UnionMangas : ParsedHttpSource() {
private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36"
private const val BLOCK_MESSAGE = "O site está bloqueando o Tachiyomi. " +
"Migre para outra fonte caso o problema persistir."
private val JSON_PARSER by lazy { JsonParser() } private val JSON_PARSER by lazy { JsonParser() }
private val DATE_FORMATTER by lazy { private val DATE_FORMATTER by lazy {