From 09270205a754fdad4b2b31a1fabf201e7f4d8988 Mon Sep 17 00:00:00 2001 From: Dark25 <nadiecaca2000@gmail.com> Date: Sat, 5 Oct 2024 02:03:28 +0200 Subject: [PATCH] Fix(it/ANIMEWORLD): Update ANIMEWORLD.tv (#287) --- src/it/animeworld/build.gradle | 5 +- .../it/animeworld/ANIMEWORLD.kt | 37 +++++-------- .../extractors/StreamHideExtractor.kt | 52 ------------------- 3 files changed, 17 insertions(+), 77 deletions(-) delete mode 100644 src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/extractors/StreamHideExtractor.kt diff --git a/src/it/animeworld/build.gradle b/src/it/animeworld/build.gradle index 29043c33..b3f00d73 100644 --- a/src/it/animeworld/build.gradle +++ b/src/it/animeworld/build.gradle @@ -1,14 +1,15 @@ ext { extName = 'ANIMEWORLD.tv' extClass = '.ANIMEWORLD' - extVersionCode = 39 + extVersionCode = 40 } apply from: "$rootDir/common.gradle" dependencies { - implementation(project(':lib:filemoon-extractor')) implementation(project(':lib:streamtape-extractor')) implementation(project(':lib:dood-extractor')) + implementation(project(':lib:streamhidevid-extractor')) + implementation(project(':lib:vidguard-extractor')) implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1" } \ No newline at end of file diff --git a/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt b/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt index 6725ce77..f1f6fd92 100644 --- a/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt +++ b/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt @@ -4,7 +4,6 @@ import android.app.Application import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen -import eu.kanade.tachiyomi.animeextension.it.animeworld.extractors.StreamHideExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList @@ -13,8 +12,9 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor -import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor +import eu.kanade.tachiyomi.lib.streamhidevidextractor.StreamHideVidExtractor import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor +import eu.kanade.tachiyomi.lib.vidguardextractor.VidGuardExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup import kotlinx.serialization.Serializable @@ -102,17 +102,12 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() { if (copyrightError.hasText()) throw Exception(copyrightError.text()) val serverList = mutableListOf<Pair<String, String>>() - - val elements = document.select(videoListSelector()) val epId = document.selectFirst("div#player[data-episode-id]")?.attr("data-episode-id") val altServers = mutableListOf<Pair<String, String>>() - val altList = listOf("StreamHide", "FileMoon") document.select("div.servers > div.widget-title span.server-tab").forEach { val name = it.text() - if (altList.any { t -> t.contains(name, true) }) { - altServers.add(Pair(name, it.attr("data-name"))) - } + altServers.add(Pair(name, it.attr("data-name"))) } altServers.forEach { serverPair -> @@ -128,21 +123,16 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() { .build() val target = json.decodeFromString<ServerResponse>( client.newCall(GET(apiUrl, headers = apiHeaders)).execute().body.string(), - ).target + ).grabber serverList.add(Pair(serverPair.first, target)) } } - for (element in elements) { - val url = element.attr("href") - val name = element.text().substringAfter("ownload ").substringBefore(" ") - serverList.add(Pair(name, url)) - } - val videoList = serverList.flatMap { server -> val url = server.second + val url2 = server.first when { - url.contains("streamingaw") -> { + url2.contains("AnimeWorld Server") -> { listOf(Video(url, "AnimeWorld Server", url)) } url.contains("https://doo") -> { @@ -153,14 +143,14 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() { StreamTapeExtractor(client).videoFromUrl(url.replace("/v/", "/e/")) ?.let(::listOf) } - url.contains("filemoon") -> { - FilemoonExtractor(client).videosFromUrl(url, prefix = "${server.first} - ", headers = headers) + url.contains("streamhide") -> { + StreamHideVidExtractor(client).videosFromUrl(url) } - server.first.contains("streamhide", true) -> { - StreamHideExtractor(client).videosFromUrl(url, headers) + url.contains("vidguard") or url.contains("listeamed") -> { + VidGuardExtractor(client).videosFromUrl(url) } else -> null - }.orEmpty() + } ?: emptyList() } return videoList @@ -518,8 +508,8 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() { ListPreference(screen.context).apply { key = "preferred_server" title = "Preferred server" - entries = arrayOf("Animeworld server", "FileMoon", "StreamHide", "Doodstream", "StreamTape") - entryValues = arrayOf("Animeworld server", "FileMoon", "StreamHide", "Doodstream", "StreamTape") + entries = arrayOf("Animeworld server", "StreamHide", "Doodstream", "StreamTape", "VidGuard", "Listeamed") + entryValues = arrayOf("Animeworld server", "StreamHide", "Doodstream", "StreamTape", "VidGuard", "Listeamed") setDefaultValue("Animeworld server") summary = "%s" @@ -537,5 +527,6 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() { @Serializable data class ServerResponse( val target: String, + val grabber: String, ) } diff --git a/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/extractors/StreamHideExtractor.kt b/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/extractors/StreamHideExtractor.kt deleted file mode 100644 index bc04d2ae..00000000 --- a/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/extractors/StreamHideExtractor.kt +++ /dev/null @@ -1,52 +0,0 @@ -package eu.kanade.tachiyomi.animeextension.it.animeworld.extractors - -import dev.datlag.jsunpacker.JsUnpacker -import eu.kanade.tachiyomi.animesource.model.Video -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.util.asJsoup -import okhttp3.Headers -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.OkHttpClient - -class StreamHideExtractor(private val client: OkHttpClient) { - fun videosFromUrl(url: String, headers: Headers): List<Video> { - val videoList = mutableListOf<Video>() - - val url = OkHttpClient().newBuilder().followRedirects(false).build() - .newCall(GET(url, headers)).execute().request.url.toString() - - val packed = client.newCall(GET(url)).execute() - .asJsoup().selectFirst("script:containsData(eval)")?.data() ?: return emptyList() - val unpacked = JsUnpacker.unpackAndCombine(packed) ?: return emptyList() - val masterUrl = Regex("""file: ?"(.*?)"""").find(unpacked)?.groupValues?.get(1) ?: return emptyList() - - val masterHeaders = headers.newBuilder() - .add("Accept", "*/*") - .add("Host", masterUrl.toHttpUrl().host) - .add("Origin", "https://${url.toHttpUrl().host}") - .add("Referer", "https://${url.toHttpUrl().host}/") - .build() - val masterPlaylist = client.newCall( - GET(masterUrl, headers = masterHeaders), - ).execute().body.string() - - val masterBase = "https://${masterUrl.toHttpUrl().host}${masterUrl.toHttpUrl().encodedPath}" - .substringBeforeLast("/") + "/" - - masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:") - .forEach { - val quality = "StreamHide - " + it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p " - val videoUrl = masterBase + it.substringAfter("\n").substringBefore("\n") - - val videoHeaders = headers.newBuilder() - .add("Accept", "*/*") - .add("Host", videoUrl.toHttpUrl().host) - .add("Origin", "https://${url.toHttpUrl().host}") - .add("Referer", "https://${url.toHttpUrl().host}/") - .build() - - videoList.add(Video(videoUrl, quality, videoUrl, headers = videoHeaders)) - } - return videoList - } -}