From 91ad434ffac849346c25a594310c89d2d5096c7c Mon Sep 17 00:00:00 2001 From: Alessandro Jean Date: Tue, 20 Apr 2021 11:56:30 -0300 Subject: [PATCH] Update 'UM' selectors (again) and add block message. (#6634) --- src/pt/unionmangas/build.gradle | 2 +- .../extension/pt/unionmangas/UnionMangas.kt | 49 ++++++++++++++++--- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src/pt/unionmangas/build.gradle b/src/pt/unionmangas/build.gradle index 4b9921571..29edc5641 100644 --- a/src/pt/unionmangas/build.gradle +++ b/src/pt/unionmangas/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Union Mangás' pkgNameSuffix = 'pt.unionmangas' extClass = '.UnionMangas' - extVersionCode = 21 + extVersionCode = 22 libVersion = '1.2' } diff --git a/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt b/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt index f62922ce9..881fe0131 100644 --- a/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt +++ b/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt @@ -1,8 +1,10 @@ package eu.kanade.tachiyomi.extension.pt.unionmangas import com.github.salomonbrys.kotson.array +import com.github.salomonbrys.kotson.nullObj import com.github.salomonbrys.kotson.obj import com.github.salomonbrys.kotson.string +import com.google.gson.JsonElement import com.google.gson.JsonObject import com.google.gson.JsonParser import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor @@ -50,7 +52,7 @@ class UnionMangas : ParsedHttpSource() { override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("Accept", ACCEPT) .add("Accept-Language", ACCEPT_LANGUAGE) - .add("Referer", "$baseUrl/inicial") + .add("Referer", "$baseUrl/home") override fun popularMangaRequest(page: Int): Request { val listPath = if (page == 1) "" else "/visualizacoes/${page - 1}" @@ -62,7 +64,17 @@ class UnionMangas : ParsedHttpSource() { 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 { 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) } + 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 latestUpdatesFromElement(element: Element): SManga = SManga.create().apply { @@ -112,7 +134,7 @@ class UnionMangas : ParsedHttpSource() { .build() val url = HttpUrl.parse("$baseUrl/assets/busca.php")!!.newBuilder() - .addQueryParameter("pesquisa", query) + .addQueryParameter("titulo", query) return GET(url.toString(), newHeaders) } @@ -127,7 +149,8 @@ class UnionMangas : ParsedHttpSource() { return MangasPage(listOf(manga), false) } - val result = response.asJsonObject() + val result = response.asJson().nullObj + ?: throw Exception(BLOCK_MESSAGE) val mangas = result["items"].array .map { searchMangaFromObject(it.obj) } @@ -148,7 +171,8 @@ class UnionMangas : ParsedHttpSource() { } 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() title = infoElement.select("h2").first().text().withoutLanguage() @@ -160,6 +184,16 @@ class UnionMangas : ParsedHttpSource() { thumbnail_url = infoElement.select(".img-thumbnail").first().attr("src") } + override fun chapterListParse(response: Response): List { + val results = super.chapterListParse(response) + + if (results.isEmpty()) { + throw Exception(BLOCK_MESSAGE) + } + + return results + } + override fun chapterListSelector() = "div.row.capitulos" 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 Response.asJsonObject(): JsonObject = JSON_PARSER.parse(body()!!.string()).obj + private fun Response.asJson(): JsonElement = JSON_PARSER.parse(body()!!.string()) companion object { 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) " + "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 DATE_FORMATTER by lazy {