From ddb9f57eb349fbb1407b8eb951636430977d8ba9 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Wed, 5 Jul 2023 07:57:15 +0000 Subject: [PATCH] fix(de/aniking): Remove obsolete CloudflareInterceptor + refactor (#1838) --- src/de/aniking/build.gradle | 10 +- .../animeextension/de/aniking/Aniking.kt | 362 ++++++------------ .../de/aniking/CloudflareInterceptor.kt | 87 ----- 3 files changed, 132 insertions(+), 327 deletions(-) delete mode 100644 src/de/aniking/src/eu/kanade/tachiyomi/animeextension/de/aniking/CloudflareInterceptor.kt diff --git a/src/de/aniking/build.gradle b/src/de/aniking/build.gradle index f180a4d83..3406a4e1d 100644 --- a/src/de/aniking/build.gradle +++ b/src/de/aniking/build.gradle @@ -1,12 +1,14 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlinx-serialization' +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) +} ext { extName = 'Aniking' pkgNameSuffix = 'de.aniking' extClass = '.Aniking' - extVersionCode = 12 + extVersionCode = 13 libVersion = '13' } diff --git a/src/de/aniking/src/eu/kanade/tachiyomi/animeextension/de/aniking/Aniking.kt b/src/de/aniking/src/eu/kanade/tachiyomi/animeextension/de/aniking/Aniking.kt index baa7db8b3..5925c78df 100644 --- a/src/de/aniking/src/eu/kanade/tachiyomi/animeextension/de/aniking/Aniking.kt +++ b/src/de/aniking/src/eu/kanade/tachiyomi/animeextension/de/aniking/Aniking.kt @@ -17,7 +17,6 @@ import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup -import okhttp3.Headers import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response @@ -43,77 +42,52 @@ class Aniking : ConfigurableAnimeSource, ParsedAnimeHttpSource() { Injekt.get().getSharedPreferences("source_$id", 0x0000) } - override fun popularAnimeSelector(): String = "div.item-container div.item" + // ============================== Popular =============================== + override fun popularAnimeSelector() = "div.item-container div.item > a" - override fun popularAnimeRequest(page: Int): Request { - val interceptor = client.newBuilder().addInterceptor(CloudflareInterceptor()).build() - val headers = interceptor.newCall(GET(baseUrl)).execute().request.headers - return GET("$baseUrl/page/$page/?order=rating", headers = headers) + override fun popularAnimeRequest(page: Int) = GET("$baseUrl/page/$page/?order=rating", headers = headers) + + override fun popularAnimeFromElement(element: Element) = SAnime.create().apply { + setUrlWithoutDomain(element.attr("href")) + thumbnail_url = element.selectFirst("img")!!.attr("data-src") + title = element.selectFirst("h2")!!.text() } - override fun popularAnimeFromElement(element: Element): SAnime { - val anime = SAnime.create() - val postid = element.attr("id").replace("post-", "") - anime.setUrlWithoutDomain(element.select("a").attr("href")) - anime.thumbnail_url = element.select("a img").attr("data-src") - anime.title = element.select("a h2").text() - return anime - } - - override fun popularAnimeNextPageSelector(): String = "footer" - - // episodes - - override fun episodeListRequest(anime: SAnime): Request { - val interceptor = client.newBuilder().addInterceptor(CloudflareInterceptor()).build() - val headers = interceptor.newCall( - GET( - "$baseUrl${anime.url}", - headers = - Headers.headersOf("user-agent", "Mozilla/5.0 (Linux; Android 12; SM-T870 Build/SP2A.220305.013; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/106.0.5249.126 Safari/537.36"), - ), - ) - .execute().request.headers - return GET("$baseUrl${anime.url}", headers = headers) - } + override fun popularAnimeNextPageSelector() = "div.pagination i#nextpagination" + // ============================== Episodes ============================== override fun episodeListSelector() = throw Exception("not used") override fun episodeListParse(response: Response): List { - val document = response.asJsoup() - val episodeList = mutableListOf() - if (document.select("#movie-js-extra").isNullOrEmpty()) { - val episodeElement = document.select("script[id=\"tv-js-after\"]") - val episodeString = episodeElement.toString() - .substringAfter("var streaming = {").substringBefore("}; var").split(",") - episodeString.forEach { - val episode = episodeFromString(it) - episodeList.add(episode) - } + val document = response.use { it.asJsoup() } + return if (document.selectFirst("#movie-js-extra") == null) { + val episodeElement = document.selectFirst("script[id=\"tv-js-after\"]")!! + episodeElement.data() + .substringAfter("var streaming = {") + .substringBefore("}; var") + .split(",") + .map(::episodeFromString) + .reversed() } else { - val episode = SEpisode.create() - episode.name = document.select("h1.entry-title").text() - episode.episode_number = 1F - episode.setUrlWithoutDomain(document.select("meta[property=\"og:url\"]").attr("content")) - episodeList.add(episode) + SEpisode.create().apply { + name = document.selectFirst("h1.entry-title")!!.text() + episode_number = 1F + setUrlWithoutDomain(document.location()) + }.let(::listOf) } - return episodeList.reversed() } override fun episodeFromElement(element: Element): SEpisode = throw Exception("not Used") - private fun episodeFromString(string: String): SEpisode { - val episode = SEpisode.create() + private fun episodeFromString(string: String) = SEpisode.create().apply { val season = string.substringAfter("\"s").substringBefore("_") val ep = string.substringAfter("_").substringBefore("\":") - episode.episode_number = ep.toFloat() - episode.name = "Staffel $season Folge $ep" - episode.url = (string.replace("\\", "").replace("\"", "").replace("s${season}_$ep:", "")) - return episode + episode_number = ep.toFloatOrNull() ?: 1F + name = "Staffel $season Folge $ep" + url = string.substringAfter(":\"").substringBefore('"').replace("\\", "") } - // Video Extractor - + // ============================ Video Links ============================= override fun videoListRequest(episode: SEpisode): Request { if (!episode.url.contains("https://")) { return GET("$baseUrl${episode.url}") @@ -124,127 +98,59 @@ class Aniking : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun videoListParse(response: Response): List