From 4edcde11b022e167736a67cf6723f7d91918b894 Mon Sep 17 00:00:00 2001 From: hexated Date: Tue, 17 Jan 2023 18:11:51 +0700 Subject: [PATCH] added new sources into Kuramanime & Oploverz --- KuramanimeProvider/build.gradle.kts | 2 +- .../com/hexated/KuramanimeProviderPlugin.kt | 1 + .../src/main/kotlin/com/hexated/Nyomo.kt | 6 ++ OploverzProvider/build.gradle.kts | 2 +- .../kotlin/com/hexated/OploverzProvider.kt | 84 +++++++++++++++++-- 5 files changed, 88 insertions(+), 7 deletions(-) diff --git a/KuramanimeProvider/build.gradle.kts b/KuramanimeProvider/build.gradle.kts index a9afa697..e1928d5b 100644 --- a/KuramanimeProvider/build.gradle.kts +++ b/KuramanimeProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 7 +version = 8 cloudstream { diff --git a/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProviderPlugin.kt b/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProviderPlugin.kt index 6580af37..da4282eb 100644 --- a/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProviderPlugin.kt +++ b/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProviderPlugin.kt @@ -11,5 +11,6 @@ class KuramanimeProviderPlugin: Plugin() { // All providers should be added in this manner. Please don't edit the providers list directly. registerMainAPI(KuramanimeProvider()) registerExtractorAPI(Nyomo()) + registerExtractorAPI(Streamhide()) } } \ No newline at end of file diff --git a/KuramanimeProvider/src/main/kotlin/com/hexated/Nyomo.kt b/KuramanimeProvider/src/main/kotlin/com/hexated/Nyomo.kt index 2174c7e4..92a97938 100644 --- a/KuramanimeProvider/src/main/kotlin/com/hexated/Nyomo.kt +++ b/KuramanimeProvider/src/main/kotlin/com/hexated/Nyomo.kt @@ -3,5 +3,11 @@ package com.hexated import com.lagradost.cloudstream3.extractors.StreamSB class Nyomo : StreamSB() { + override var name: String = "Nyomo" override var mainUrl = "https://nyomo.my.id" +} + +class Streamhide : StreamSB() { + override var name: String = "Streamhide" + override var mainUrl: String = "https://streamhide.to" } \ No newline at end of file diff --git a/OploverzProvider/build.gradle.kts b/OploverzProvider/build.gradle.kts index 910eafdb..609f40ba 100644 --- a/OploverzProvider/build.gradle.kts +++ b/OploverzProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 5 +version = 6 cloudstream { diff --git a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt index 006e4d86..9dc7a2fe 100644 --- a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt +++ b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt @@ -25,6 +25,9 @@ class OploverzProvider : MainAPI() { ) companion object { + const val acefile = "https://acefile.co" + const val linkbox = "https://www.linkbox.to" + fun getType(t: String): TvType { return when { t.contains("TV") -> TvType.Anime @@ -183,6 +186,27 @@ class OploverzProvider : MainAPI() { } + private suspend fun invokeLinkbox( + url: String, + referer: String, + quality: String? = null, + callback: (ExtractorLink) -> Unit + ) { + val id = Regex("""(/file/|id=)(\S+)""").find(url)?.groupValues?.get(2) + app.get("$linkbox/api/open/get_url?itemId=$id", referer = url) + .parsedSafe()?.data?.rList?.map { link -> + callback.invoke( + ExtractorLink( + "Linkbox", + "Linkbox", + link.url, + referer, + getQualityFromName(quality), + ) + ) + } + } + override suspend fun loadLinks( data: String, isCasting: Boolean, @@ -190,17 +214,54 @@ class OploverzProvider : MainAPI() { callback: (ExtractorLink) -> Unit ): Boolean { val document = app.get(data).document - val sources = document.select(".mobius > .mirror > option").mapNotNull { - fixUrl(Jsoup.parse(base64Decode(it.attr("value"))).select("iframe").attr("src")) - } + val sources = mutableListOf>() - sources.apmap { - loadExtractor(it, data, subtitleCallback, callback) + val streamingSources = document.select(".mobius > .mirror > option").mapNotNull { + "" to fixUrl(Jsoup.parse(base64Decode(it.attr("value"))).select("iframe").attr("src")) + } + if (streamingSources.isNotEmpty()) sources.addAll(streamingSources) + + val downloadSources = + document.select("div.bixbox div.soraddlx.soradlg").lastOrNull()?.select("div.soraurlx") + ?.map { item -> + item.select("a").map { item.select("strong").text() to it.attr("href") } + }?.flatten() + if (downloadSources?.isNotEmpty() == true) sources.addAll(downloadSources) + + sources.apmap { (quality, source) -> + if(source.startsWith(linkbox)) { + invokeLinkbox(source, data, quality, callback) + } else { + loadExtractor(fixedIframe(source), data, subtitleCallback) { link -> + callback.invoke( + ExtractorLink( + link.name, + link.name, + link.url, + link.referer, + if (source.startsWith(acefile)) getQualityFromName(quality) else link.quality, + link.isM3u8, + link.headers, + link.extractorData + ) + ) + } + } } return true } + private fun fixedIframe(url: String): String { + return if (url.startsWith(acefile)) { + Regex("""/f/(\S+)/|/file/(\S+)/""").find(url)?.groupValues?.getOrNull(1).let { id -> + "$acefile/player/$id" + } + } else { + url + } + } + private suspend fun getTracker(title: String?, type: String?, year: Int?): Tracker { val res = app.get("https://api.consumet.org/meta/anilist/$title") .parsedSafe()?.results?.find { media -> @@ -238,4 +299,17 @@ class OploverzProvider : MainAPI() { @JsonProperty("results") val results: ArrayList? = arrayListOf(), ) + data class RList( + @JsonProperty("url") val url: String, + @JsonProperty("resolution") val resolution: String?, + ) + + data class Data( + @JsonProperty("rList") val rList: List?, + ) + + data class Responses( + @JsonProperty("data") val data: Data?, + ) + } \ No newline at end of file