From dceb71c7c8bd59ffee87d7f0569868ca5cd2b4fd Mon Sep 17 00:00:00 2001 From: LuftVerbot <97435834+LuftVerbot@users.noreply.github.com> Date: Fri, 16 Sep 2022 09:09:39 +0200 Subject: [PATCH] AniWorld: add vidoza extractor & probably improvments (#868) * AniWorld: add vidoza extractor & probably improvments * add experimental to name * Update build.gradle --- src/de/aniworld/build.gradle | 4 ++-- .../animeextension/de/aniworld/AWConstants.kt | 6 ++++-- .../animeextension/de/aniworld/AniWorld.kt | 15 +++++++++++++-- .../de/aniworld/RedirectInterceptor.kt | 19 +++++++++++++++---- .../de/aniworld/extractors/VidozaExtractor.kt | 17 +++++++++++++++++ 5 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/extractors/VidozaExtractor.kt diff --git a/src/de/aniworld/build.gradle b/src/de/aniworld/build.gradle index 575d4a04d..80c8dceae 100644 --- a/src/de/aniworld/build.gradle +++ b/src/de/aniworld/build.gradle @@ -3,10 +3,10 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlinx-serialization' ext { - extName = 'AniWorld' + extName = 'AniWorld (experimental)' pkgNameSuffix = 'de.aniworld' extClass = '.AniWorld' - extVersionCode = 5 + extVersionCode = 6 libVersion = '13' } diff --git a/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AWConstants.kt b/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AWConstants.kt index 432dac5f4..6fc1fc756 100644 --- a/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AWConstants.kt +++ b/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AWConstants.kt @@ -6,13 +6,15 @@ object AWConstants { const val NAME_DOOD = "Doodstream" const val NAME_STAPE = "Streamtape" const val NAME_VOE = "VOE" + const val NAME_VIZ = "Vidoza" const val URL_DOOD = "https://dood" const val URL_STAPE = "https://streamtape.com" const val URL_VOE = "https://voe" + const val URL_VIZ = "https://vidoza" - val HOSTER_NAMES = arrayOf(NAME_VOE, NAME_DOOD, NAME_STAPE) - val HOSTER_URLS = arrayOf(URL_VOE, URL_DOOD, URL_STAPE) + val HOSTER_NAMES = arrayOf(NAME_VOE, NAME_DOOD, NAME_STAPE, NAME_VIZ) + val HOSTER_URLS = arrayOf(URL_VOE, URL_DOOD, URL_STAPE, URL_VIZ) const val KEY_GER_DUB = 1 const val KEY_ENG_SUB = 2 diff --git a/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AniWorld.kt b/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AniWorld.kt index 5b3ec933a..aba14a479 100644 --- a/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AniWorld.kt +++ b/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AniWorld.kt @@ -11,6 +11,7 @@ import androidx.preference.MultiSelectListPreference import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.animeextension.de.aniworld.extractors.DoodExtractor import eu.kanade.tachiyomi.animeextension.de.aniworld.extractors.StreamTapeExtractor +import eu.kanade.tachiyomi.animeextension.de.aniworld.extractors.VidozaExtractor import eu.kanade.tachiyomi.animeextension.de.aniworld.extractors.VoeExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilterList @@ -41,7 +42,7 @@ import uy.kohesive.injekt.injectLazy class AniWorld : ConfigurableAnimeSource, ParsedAnimeHttpSource() { - override val name = "AniWorld" + override val name = "AniWorld (experimental)" override val baseUrl = "https://aniworld.to" @@ -237,13 +238,15 @@ class AniWorld : ConfigurableAnimeSource, ParsedAnimeHttpSource() { if (hosterSelection != null) { when { redirects.contains("https://voe.sx") || redirects.contains("https://launchreliantcleaverriver") || - redirects.contains("https://fraudclatterflyingcar") && hosterSelection.contains(AWConstants.NAME_VOE) -> { + redirects.contains("https://fraudclatterflyingcar") || + redirects.contains("https://uptodatefinishconferenceroom") || redirects.contains("https://realfinanceblogcenter") && hosterSelection.contains(AWConstants.NAME_VOE) -> { val quality = "Voe $language" val video = VoeExtractor(client).videoFromUrl(redirects, quality) if (video != null) { videoList.add(video) } } + redirects.contains("https://dood") && hosterSelection.contains(AWConstants.NAME_DOOD) -> { val quality = "Doodstream $language" val video = DoodExtractor(client).videoFromUrl(redirects, quality) @@ -251,6 +254,7 @@ class AniWorld : ConfigurableAnimeSource, ParsedAnimeHttpSource() { videoList.add(video) } } + redirects.contains("https://streamtape") && hosterSelection.contains(AWConstants.NAME_STAPE) -> { val quality = "Streamtape $language" val video = StreamTapeExtractor(client).videoFromUrl(redirects, quality) @@ -258,6 +262,13 @@ class AniWorld : ConfigurableAnimeSource, ParsedAnimeHttpSource() { videoList.add(video) } } + redirects.contains("https://vidoza") && hosterSelection.contains(AWConstants.NAME_VIZ) -> { + val quality = "Vidoza $language" + val video = VidozaExtractor(client).videoFromUrl(redirects, quality) + if (video != null) { + videoList.add(video) + } + } } } } diff --git a/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/RedirectInterceptor.kt b/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/RedirectInterceptor.kt index db62ef0ea..2e9b3cd4a 100644 --- a/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/RedirectInterceptor.kt +++ b/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/RedirectInterceptor.kt @@ -63,11 +63,22 @@ class RedirectInterceptor : Interceptor { view: WebView, request: WebResourceRequest, ): WebResourceResponse? { - if (request.url.toString().contains("token") || request.url.toString().contains("https://dood.") || - request.url.toString().contains("https://streamtape") || request.url.toString().contains("https://voe") + if (request.url.toString().contains("token") || request.url.toString().contains("https://dood") || request.url.toString().contains("https://streamtape") || + request.url.toString().contains("https://voe") || request.url.toString().contains("https://realfinanceblogcenter") || + request.url.toString().contains("https://launchreliantcleaverriver") || + request.url.toString().contains("https://fraudclatterflyingcar") || + request.url.toString().contains("https://uptodatefinishconferenceroom") ) { - newRequest = GET(request.url.toString(), request.requestHeaders.toHeaders()) - latch.countDown() + if (!request.url.toString().contains("ad.js")) { + newRequest = GET(request.url.toString(), request.requestHeaders.toHeaders()) + latch.countDown() + } + } + if (request.url.toString().contains("token") || request.url.toString().contains("https://vidoza.net/embed-")) { + if (request.url.toString().contains(".html")) { + newRequest = GET(request.url.toString(), request.requestHeaders.toHeaders()) + latch.countDown() + } } return super.shouldInterceptRequest(view, request) } diff --git a/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/extractors/VidozaExtractor.kt b/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/extractors/VidozaExtractor.kt new file mode 100644 index 000000000..a7454195b --- /dev/null +++ b/src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/extractors/VidozaExtractor.kt @@ -0,0 +1,17 @@ +package eu.kanade.tachiyomi.animeextension.de.aniworld.extractors + +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.OkHttpClient + +class VidozaExtractor(private val client: OkHttpClient) { + + fun videoFromUrl(url: String, quality: String): Video? { + val document = client.newCall(GET(url)).execute().asJsoup() + val script = document.select("script:containsData(window.pData = {)") + .firstOrNull()?.data()?.substringAfter("sourcesCode: [{ src: \"") ?: return null + val videoUrl = script.substringAfter("sourcesCode: [{ src: \"").substringBefore("\", type:") + return Video(url, quality, videoUrl) + } +}