diff --git a/Gomunimeis/build.gradle.kts b/Gomunimeis/build.gradle.kts index 61970d23..0d252b37 100644 --- a/Gomunimeis/build.gradle.kts +++ b/Gomunimeis/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 3 +version = 4 cloudstream { diff --git a/Gomunimeis/src/main/kotlin/com/hexated/Gomunimeis.kt b/Gomunimeis/src/main/kotlin/com/hexated/Gomunimeis.kt index a99907c3..888a1319 100644 --- a/Gomunimeis/src/main/kotlin/com/hexated/Gomunimeis.kt +++ b/Gomunimeis/src/main/kotlin/com/hexated/Gomunimeis.kt @@ -9,7 +9,7 @@ import java.util.ArrayList class Gomunimeis : MainAPI() { - override var mainUrl = "https://gomunime.is" + override var mainUrl = "https://anoboy.life" override var name = "Gomunime.is" override val hasMainPage = true override var lang = "id" @@ -66,7 +66,7 @@ class Gomunimeis : MainAPI() { return newAnimeSearchResponse( postTitle ?: return null, - "$mainUrl/anime/$postName.$salt", + "$mainUrl/anime/$postName", TvType.TvSeries, ) { this.posterUrl = "$mainImageUrl/$image" diff --git a/OploverzProvider/build.gradle.kts b/OploverzProvider/build.gradle.kts index 0cfc432d..7a7fd128 100644 --- a/OploverzProvider/build.gradle.kts +++ b/OploverzProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 12 +version = 13 cloudstream { diff --git a/OploverzProvider/src/main/kotlin/com/hexated/Extractors.kt b/OploverzProvider/src/main/kotlin/com/hexated/Extractors.kt new file mode 100644 index 00000000..98d831b0 --- /dev/null +++ b/OploverzProvider/src/main/kotlin/com/hexated/Extractors.kt @@ -0,0 +1,93 @@ +package com.hexated + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.* + +class Krakenfiles : ExtractorApi() { + override val name = "Krakenfiles" + override val mainUrl = "https://krakenfiles.com" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = Regex("(?://|\\.)(krakenfiles\\.com)/(?:view|embed-video)?/([\\da-zA-Z]+)").find(url)?.groupValues?.get(2) + val doc = app.get("$mainUrl/embed-video/$id").document + val link = doc.selectFirst("source")?.attr("src") + + callback.invoke( + ExtractorLink( + this.name, + this.name, + httpsify(link ?: return), + "", + Qualities.Unknown.value + ) + ) + + } + + data class Source( + @JsonProperty("url") val url: String? = null, + ) + +} + +class Gofile : ExtractorApi() { + override val name = "Gofile" + override val mainUrl = "https://gofile.io" + override val requiresReferer = false + private val mainApi = "https://api.gofile.io" + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = + Regex("(?://|\\.)(gofile\\.io)/(?:\\?c=|d/)([\\da-zA-Z]+)").find(url)?.groupValues?.get( + 2 + ) + val token = app.get("$mainApi/createAccount").parsedSafe()?.data?.get("token") + app.get("$mainApi/getContent?contentId=$id&token=$token&websiteToken=12345") + .parsedSafe()?.data?.contents?.forEach { + callback.invoke( + ExtractorLink( + this.name, + this.name, + it.value["link"] ?: return, + "", + getQuality(it.value["name"]), + headers = mapOf( + "Cookie" to "accountToken=$token" + ) + ) + ) + } + + } + + private fun getQuality(str: String?): Int { + return Regex("(\\d{3,4})[pP]").find(str ?: "")?.groupValues?.getOrNull(1)?.toIntOrNull() + ?: Qualities.Unknown.value + } + + data class Account( + @JsonProperty("data") val data: HashMap? = null, + ) + + data class Data( + @JsonProperty("contents") val contents: HashMap>? = null, + ) + + data class Source( + @JsonProperty("data") val data: Data? = null, + ) + +} \ No newline at end of file diff --git a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt index 4e084380..167a2af8 100644 --- a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt +++ b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt @@ -216,7 +216,7 @@ class OploverzProvider : MainAPI() { link.name, link.url, link.referer, - if (source.startsWith(acefile)) getQualityFromName(quality) else link.quality, + getQualityFromName(quality), link.isM3u8, link.headers, link.extractorData diff --git a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProviderPlugin.kt b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProviderPlugin.kt index dfba47b4..af4f1193 100644 --- a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProviderPlugin.kt +++ b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProviderPlugin.kt @@ -11,5 +11,7 @@ class OploverzProviderPlugin: Plugin() { // All providers should be added in this manner. Please don't edit the providers list directly. registerMainAPI(OploverzProvider()) registerExtractorAPI(Streamhide()) + registerExtractorAPI(Krakenfiles()) + registerExtractorAPI(Gofile()) } } \ No newline at end of file diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index 4d8f4f97..c90729d7 100644 --- a/SoraStream/build.gradle.kts +++ b/SoraStream/build.gradle.kts @@ -1,7 +1,7 @@ import org.jetbrains.kotlin.konan.properties.Properties // use an integer for version numbers -version = 125 +version = 126 android { defaultConfig { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index ad225008..97e78b8d 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -932,21 +932,16 @@ object SoraExtractor : SoraStream() { .parsedSafe()?.data?.episode?.sourceUrls?.find { it.sourceName == "Ac" } val serverUrl = fixUrl( server?.sourceUrl?.replace("/clock", "/clock.json") ?: return@apmap, - if(tl == "sub") "https://allanimenews.com" else "https://mblog.allanimenews.com" + "https://blog.allanime.pro" ) app.get(serverUrl) - .parsedSafe()?.links?.forEach { link -> - link.portData?.streams?.filter { - (it.format == "adaptive_hls" || it.format == "vo_adaptive_hls") && it.hardsub_lang.isNullOrEmpty() - }?.forEach { source -> - val name = if (source.format == "vo_adaptive_hls") "Vrv" else "Crunchyroll" - val translation = if (tl == "sub") "Raw" else "English Dub" - M3u8Helper.generateM3u8( - "$name [$translation]", - source.url ?: return@apmap, - "https://static.crunchyroll.com/", - ).forEach(callback) - } + .parsedSafe()?.links?.filter { it.resolutionStr == "RAW" && it.hls == true }?.forEach { source -> + val tlName = if (translation == "sub") "Raw" else "English Dub" + M3u8Helper.generateM3u8( + "Vrv [$tlName]", + source.link ?: return@apmap, + "https://static.crunchyroll.com/", + ).forEach(callback) } } @@ -3328,7 +3323,11 @@ data class AllanimePortData( ) data class AllanimeLink( - @JsonProperty("portData") val portData: AllanimePortData? = null + @JsonProperty("portData") val portData: AllanimePortData? = null, + @JsonProperty("resolutionStr") val resolutionStr: String? = null, + @JsonProperty("src") val src: String? = null, + @JsonProperty("link") val link: String? = null, + @JsonProperty("hls") val hls: Boolean? = null, ) data class AllanimeLinks(