From 7c00d1e696bbc893987d05a6bc7193c0d2095e98 Mon Sep 17 00:00:00 2001 From: imper1aldev <23511335+imper1aldev@users.noreply.github.com> Date: Tue, 7 Jan 2025 21:38:26 -0600 Subject: [PATCH 1/2] PelisPlusPh fixes Closes #489 --- src/es/pelisplushd/build.gradle | 2 +- .../tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt | 2 ++ .../animeextension/es/pelisplushd/PelisplushdFactory.kt | 2 +- .../tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt | 7 ++++++- .../tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt | 2 ++ 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/es/pelisplushd/build.gradle b/src/es/pelisplushd/build.gradle index edabfe2c..6da4424b 100644 --- a/src/es/pelisplushd/build.gradle +++ b/src/es/pelisplushd/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Pelisplushd' extClass = '.PelisplushdFactory' - extVersionCode = 59 + extVersionCode = 60 } apply from: "$rootDir/common.gradle" diff --git a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt index 1ddaf869..2f26c25d 100644 --- a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt +++ b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt @@ -39,6 +39,8 @@ import uy.kohesive.injekt.api.get open class Pelisplushd(override val name: String, override val baseUrl: String) : ConfigurableAnimeSource, ParsedAnimeHttpSource() { + override val id: Long = 1400819034564144238L + override val lang = "es" override val supportsLatest = false diff --git a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/PelisplushdFactory.kt b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/PelisplushdFactory.kt index 0a0d39a4..7f6d3707 100644 --- a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/PelisplushdFactory.kt +++ b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/PelisplushdFactory.kt @@ -7,6 +7,6 @@ class PelisplushdFactory : AnimeSourceFactory { override fun createSources(): List = listOf( Pelisplushd("PelisPlusHD", "https://pelisplushd.bz"), Pelisplusto("PelisPlusTo", "https://ww3.pelisplus.to"), - Pelisplusph("PelisPlusPh", "https://www.pelisplushd.ph"), + Pelisplusph("PelisPlusPh", "https://ww5.pelisplushd.pe"), ) } diff --git a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt index aaf7d33f..e724edba 100644 --- a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt +++ b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt @@ -16,6 +16,8 @@ import org.jsoup.nodes.Element class Pelisplusph(override val name: String, override val baseUrl: String) : Pelisplushd(name, baseUrl) { + override val id: Long = 4917265654298497443L + override val supportsLatest = false companion object { @@ -52,7 +54,7 @@ class Pelisplusph(override val name: String, override val baseUrl: String) : Pel anime.title = document.selectFirst(".info-content h1")!!.text() document.select(".info-content p").map { p -> if (p.select(".content-type").text().contains("Sinópsis:")) { - anime.description = p.select(".sinopsis")!!.text() + anime.description = p.select(".sinopsis").text() } if (p.select(".content-type").text().contains("Géneros:")) { anime.genre = p.select(".content-type-a a").joinToString { it.text() } @@ -60,6 +62,9 @@ class Pelisplusph(override val name: String, override val baseUrl: String) : Pel if (p.select(".content-type").text().contains("Reparto:")) { anime.artist = p.select(".content-type ~ span").text().substringBefore(",") } + if (p.select(".content-type").text().contains("Actores:")) { + anime.artist = p.select(".content-type ~ span").text().substringBefore(",") + } } anime.status = if (document.location().contains("/serie/")) SAnime.UNKNOWN else SAnime.COMPLETED diff --git a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt index 20aff832..76e685ee 100644 --- a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt +++ b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt @@ -23,6 +23,8 @@ import uy.kohesive.injekt.injectLazy class Pelisplusto(override val name: String, override val baseUrl: String) : Pelisplushd(name, baseUrl) { + override val id: Long = 1705636111422561130L + private val json: Json by injectLazy() override val supportsLatest = false -- 2.47.2 From 9511b64cf2652a71faf563c43e38e288ae2ac294 Mon Sep 17 00:00:00 2001 From: imper1aldev <23511335+imper1aldev@users.noreply.github.com> Date: Wed, 8 Jan 2025 00:57:05 -0600 Subject: [PATCH 2/2] MonosChinos fixes Closes #450 --- src/es/monoschinos/build.gradle | 2 +- .../es/monoschinos/MonosChinos.kt | 109 ++++++++++-------- .../es/monoschinos/MonosChinosFilters.kt | 82 +++++++++---- 3 files changed, 118 insertions(+), 75 deletions(-) diff --git a/src/es/monoschinos/build.gradle b/src/es/monoschinos/build.gradle index a22dc4c4..e716c223 100644 --- a/src/es/monoschinos/build.gradle +++ b/src/es/monoschinos/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'MonosChinos' extClass = '.MonosChinos' - extVersionCode = 29 + extVersionCode = 30 } apply from: "$rootDir/common.gradle" diff --git a/src/es/monoschinos/src/eu/kanade/tachiyomi/animeextension/es/monoschinos/MonosChinos.kt b/src/es/monoschinos/src/eu/kanade/tachiyomi/animeextension/es/monoschinos/MonosChinos.kt index 9adcbbcf..9f786cbe 100644 --- a/src/es/monoschinos/src/eu/kanade/tachiyomi/animeextension/es/monoschinos/MonosChinos.kt +++ b/src/es/monoschinos/src/eu/kanade/tachiyomi/animeextension/es/monoschinos/MonosChinos.kt @@ -24,7 +24,6 @@ import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking -import eu.kanade.tachiyomi.util.parseAs import okhttp3.FormBody import okhttp3.Request import okhttp3.Response @@ -37,7 +36,7 @@ class MonosChinos : ConfigurableAnimeSource, AnimeHttpSource() { override val name = "MonosChinos" - override val baseUrl = "https://monoschinos2.com" + override val baseUrl = "https://monoschinos2.net" override val id = 6957694006954649296 @@ -80,7 +79,7 @@ class MonosChinos : ConfigurableAnimeSource, AnimeHttpSource() { status = document.select(".lh-sm .ms-2").eachText().let { items -> when { items.any { it.contains("Finalizado") } -> SAnime.COMPLETED - items.any { it.contains("Estreno") } -> SAnime.ONGOING + items.any { it.contains("En emision") || it.contains("Estreno") } -> SAnime.ONGOING else -> SAnime.UNKNOWN } } @@ -88,12 +87,12 @@ class MonosChinos : ConfigurableAnimeSource, AnimeHttpSource() { return animeDetails } - override fun popularAnimeRequest(page: Int) = GET("$baseUrl/animes?p=$page", headers) + override fun popularAnimeRequest(page: Int) = GET("$baseUrl/animes?pag=$page", headers) override fun popularAnimeParse(response: Response): AnimesPage { val document = response.asJsoup() val elements = document.select(".ficha_efecto a") - val nextPage = document.select(".pagination [rel=\"next\"]").any() + val nextPage = document.select(".pagination [title=\"Siguiente página\"]").any() val animeList = elements.map { element -> SAnime.create().apply { title = element.selectFirst(".title_cap")!!.text() @@ -106,13 +105,13 @@ class MonosChinos : ConfigurableAnimeSource, AnimeHttpSource() { override fun latestUpdatesParse(response: Response) = popularAnimeParse(response) - override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/emision?p=$page", headers) + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/animes?estado=en+emision&pag=$page", headers) override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { val params = MonosChinosFilters.getSearchParameters(filters) return when { - query.isNotBlank() -> GET("$baseUrl/buscar?q=$query", headers) - params.filter.isNotBlank() -> GET("$baseUrl/animes${params.getQuery()}&p=$page", headers) + query.isNotBlank() -> GET("$baseUrl/animes?buscar=$query&pag=$page", headers) + params.filter.isNotBlank() -> GET("$baseUrl/animes${params.getQuery()}&pag=$page", headers) else -> popularAnimeRequest(page) } } @@ -121,31 +120,50 @@ class MonosChinos : ConfigurableAnimeSource, AnimeHttpSource() { override fun episodeListParse(response: Response): List { val document = response.asJsoup() - val token = document.select("meta[name='csrf-token']").attr("content") - val capListLink = document.select(".caplist").attr("data-ajax") val referer = document.location() + val dt = document.select("#dt") - val detail = getEpisodeDetails(capListLink, token, referer) - val total = detail.eps.size - val perPage = detail.perpage ?: return emptyList() + val total = dt.attr("data-e").toInt() + val perPage = 50.0 val pages = (total / perPage).ceilPage() + val i = dt.attr("data-i") + val u = dt.attr("data-u") + var pageIdx = 1 return (1..pages).parallelCatchingFlatMapBlocking { - getEpisodePage(detail.paginateUrl ?: "", it, token, referer).caps.mapIndexed { idx, ep -> - val episodeNumber = (ep.episodio ?: (idx + 1)) - SEpisode.create().apply { - name = "Capítulo $episodeNumber" - episode_number = episodeNumber.toFloat() - setUrlWithoutDomain(ep.url ?: "") - } - } - }.reversed() + val formBody = FormBody.Builder() + .add("acc", "episodes") + .add("i", i) + .add("u", u) + .add("p", pageIdx.toString()) + .build() + + val request = Request.Builder() + .url("$baseUrl/ajax_pagination") + .post(formBody) + .header("accept", "application/json, text/javascript, */*; q=0.01") + .header("accept-language", "es-419,es;q=0.8") + .header("content-type", "application/x-www-form-urlencoded; charset=UTF-8") + .header("origin", baseUrl) + .header("referer", referer) + .header("x-requested-with", "XMLHttpRequest") + .build() + pageIdx++ + + client.newCall(request).execute().getEpisodes() + } } - private fun getEpisodeDetails(capListLink: String, token: String, referer: String): EpisodesDto { - val formBody = FormBody.Builder().add("_token", token).build() + override fun videoListParse(response: Response): List