diff --git a/src/en/animekai/src/eu/kanade/tachiyomi/animeextension/en/animekai/extractors/AnimeKaiMegaUpExtractor.kt b/src/en/animekai/src/eu/kanade/tachiyomi/animeextension/en/animekai/extractors/AnimeKaiMegaUpExtractor.kt index 88d3788c..8bc2a3b1 100644 --- a/src/en/animekai/src/eu/kanade/tachiyomi/animeextension/en/animekai/extractors/AnimeKaiMegaUpExtractor.kt +++ b/src/en/animekai/src/eu/kanade/tachiyomi/animeextension/en/animekai/extractors/AnimeKaiMegaUpExtractor.kt @@ -2,7 +2,9 @@ package eu.kanade.tachiyomi.animeextension.en.animekai.extractors import eu.kanade.tachiyomi.animeextension.en.animekai.AnimekaiDecoder import eu.kanade.tachiyomi.source.model.Video +import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json +import okhttp3.Headers import okhttp3.OkHttpClient import okhttp3.Request import org.jsoup.Jsoup @@ -12,10 +14,11 @@ class AnimeKaiMegaUpExtractor { private val client: OkHttpClient by injectLazy() fun getVideoList(url: String): List<Video> { + // Adjust media URL dynamically for both animekai.to and animekai.bz val mediaUrl = url.replace("/e/", "/media/").replace("/e2/", "/media/") val encodedResult = runCatching { - val response = client.newCall(GET(mediaUrl)).execute().body?.string() + val response = client.newCall(GET(mediaUrl)).execute().body?.string() ?: return emptyList() Jsoup.parse(response).selectFirst("body")?.text()?.let { json -> json.substringAfter("\"result\":\"").substringBefore("\",\"status\"") } @@ -55,6 +58,13 @@ class AnimeKaiMegaUpExtractor { "https://raw.githubusercontent.com/amarullz/kaicodex/refs/heads/main/generated/kai_codex.json" private fun get(url: String): Request { + // Adjust headers dynamically for animekai.to and animekai.bz + val referer = if (url.contains("animekai.to")) { + "https://animekai.to/" + } else { + "https://animekai.bz/" + } + return Request.Builder() .url(url) .headers( @@ -64,10 +74,26 @@ class AnimeKaiMegaUpExtractor { "Accept", "application/json", "Referer", - "https://animekai.to/", + referer, ), ) .build() } } } + +@Serializable +data class M3U8( + val sources: List<M3U8Source> +) + +@Serializable +data class M3U8Source( + val file: String +) + +data class Video( + val url: String, + val quality: String, + val videoUrl: String +) \ No newline at end of file