diff --git a/src/ar/witanime/build.gradle b/src/ar/witanime/build.gradle index 54ad4d0ae..50fb8e54e 100644 --- a/src/ar/witanime/build.gradle +++ b/src/ar/witanime/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'WIT ANIME' pkgNameSuffix = 'ar.witanime' extClass = '.WitAnime' - extVersionCode = 12 + extVersionCode = 13 libVersion = '12' } diff --git a/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/WitAnime.kt b/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/WitAnime.kt old mode 100644 new mode 100755 index 183212f15..4bac73df4 --- a/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/WitAnime.kt +++ b/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/WitAnime.kt @@ -4,8 +4,8 @@ import android.app.Application import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.ar.witanime.extractors.DoodExtractor import eu.kanade.tachiyomi.animeextension.ar.witanime.extractors.FembedExtractor -// import eu.kanade.tachiyomi.animeextension.ar.witanime.extractors.OkruExtractor import eu.kanade.tachiyomi.animeextension.ar.witanime.extractors.SoraPlayExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilterList @@ -78,7 +78,7 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { val url = it.select("a").attr("data-ep-url") when { server.contains("fembed") -> { - val videos = FembedExtractor().videosFromUrl(url) + val videos = FembedExtractor(client).videosFromUrl(url) videoList.addAll(videos) } server.contains("soraplay") -> { @@ -90,13 +90,19 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { videoList.addAll(videos) } server.contains("yuistream") -> { - val videos = FembedExtractor().videosFromUrl(url) + val videos = FembedExtractor(client).videosFromUrl(url) videoList.addAll(videos) } server.contains("vivyplay") -> { - val videos = FembedExtractor().videosFromUrl(url) + val videos = FembedExtractor(client).videosFromUrl(url) videoList.addAll(videos) } + server.contains("dood") -> { + val video = DoodExtractor(client).videoFromUrl(url, server) + if (video != null) { + videoList.add(video) + } + } /*server.contains("ok") -> { val videos = OkruExtractor(client).videosFromUrl(url) if (videos == null) { @@ -106,31 +112,6 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } }*/ } - - /*if (server == "fembed") { - val videos = FembedExtractor().videosFromUrl(url) - videoList.addAll(videos) - } - if (server == "soraplay") { - val witAnime = "https://witanime.com/" - val newHeaders = headers.newBuilder() - .set("referer", "$witAnime") - .build() - val videos = SoraPlayExtractor(client).videosFromUrl(url, newHeaders) - videoList.addAll(videos) - } - if (server == "yuistream") { - val videos = FembedExtractor().videosFromUrl(url) - videoList.addAll(videos) - } - if (server == "ok.ru") { - val videos = OkruExtractor(client).videosFromUrl(url) - videoList.addAll(videos) - }*/ - /*if (server == "4shared") { - val videos = SharedExtractor(client).videosFromUrl(url) - videoList.addAll(videos) - }*/ } return videoList } diff --git a/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/DoodExtractor.kt b/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/DoodExtractor.kt new file mode 100755 index 000000000..ada669c26 --- /dev/null +++ b/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/DoodExtractor.kt @@ -0,0 +1,43 @@ +package eu.kanade.tachiyomi.animeextension.ar.witanime.extractors + +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.network.GET +import okhttp3.Headers +import okhttp3.OkHttpClient + +class DoodExtractor(private val client: OkHttpClient) { + fun videoFromUrl(url: String, quality: String): Video? { + val response = client.newCall(GET(url)).execute() + // Overwrite url to the redirected one + val url = response.request.url.toString() + val doodTld = url.substringAfter("https://dood.").substringBefore("/") + val content = response.body!!.string() + if (!content.contains("'/pass_md5/")) return null + val md5 = content.substringAfter("'/pass_md5/").substringBefore("',") + val token = md5.substringAfterLast("/") + val randomString = getRandomString() + val expiry = System.currentTimeMillis() + val videoUrlStart = client.newCall( + GET( + "https://dood.$doodTld/pass_md5/$md5", + Headers.headersOf("referer", url) + ) + ).execute().body!!.string() + val videoUrl = "$videoUrlStart$randomString?token=$token&expiry=$expiry" + // val newQuality = "Doodstream mirror" + + return Video(url, quality, videoUrl, null, doodHeaders(doodTld)) + } + + private fun getRandomString(length: Int = 10): String { + val allowedChars = ('A'..'Z') + ('a'..'z') + ('0'..'9') + return (1..length) + .map { allowedChars.random() } + .joinToString("") + } + + private fun doodHeaders(tld: String) = Headers.Builder().apply { + add("User-Agent", "Aniyomi") + add("Referer", "https://dood.$tld/") + }.build() +} diff --git a/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/FembedExtractor.kt b/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/FembedExtractor.kt index 5c3501625..1252bac83 100644 --- a/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/FembedExtractor.kt +++ b/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/FembedExtractor.kt @@ -1,22 +1,28 @@ package eu.kanade.tachiyomi.animeextension.ar.witanime.extractors import eu.kanade.tachiyomi.animesource.model.Video -import org.json.JSONObject -import org.jsoup.Connection -import org.jsoup.Jsoup +import eu.kanade.tachiyomi.network.POST +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import okhttp3.OkHttpClient -class FembedExtractor { +class FembedExtractor(private val client: OkHttpClient) { fun videosFromUrl(url: String): List