From 8f84b3a05d441238b69da3b313e1daa19c3a01f2 Mon Sep 17 00:00:00 2001 From: hexated <37908684+hexated@users.noreply.github.com> Date: Wed, 20 Dec 2023 14:52:09 +0700 Subject: [PATCH] sora: fix extractors --- SoraStream/build.gradle.kts | 2 +- .../src/main/kotlin/com/hexated/Extractors.kt | 28 ++++++++++++------- .../main/kotlin/com/hexated/SoraExtractor.kt | 7 +++-- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index a54c74ca..4896f243 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 = 205 +version = 206 android { defaultConfig { diff --git a/SoraStream/src/main/kotlin/com/hexated/Extractors.kt b/SoraStream/src/main/kotlin/com/hexated/Extractors.kt index 7662b6e6..0d72837f 100644 --- a/SoraStream/src/main/kotlin/com/hexated/Extractors.kt +++ b/SoraStream/src/main/kotlin/com/hexated/Extractors.kt @@ -323,18 +323,26 @@ open class Netembed : ExtractorApi() { ) { val response = app.get(url, referer = referer) val script = getAndUnpack(response.text) - val m3u8 = Regex("((https:|http:)//.*\\.m3u8)").find(script)?.groupValues?.getOrNull(1) + val m3u8 = Regex("((https:|http:)//.*\\.m3u8)").find(script)?.groupValues?.getOrNull(1) ?: return - callback.invoke( - ExtractorLink( - this.name, - this.name, - m3u8 ?: return, - "$mainUrl/", - getQuality(m3u8), - INFER_TYPE + if(m3u8.startsWith("https://www.febbox.com")) { + callback.invoke( + ExtractorLink( + this.name, + this.name, + m3u8, + "$mainUrl/", + getQuality(m3u8), + INFER_TYPE + ) ) - ) + } else { + M3u8Helper.generateM3u8( + this.name, + m3u8, + "$mainUrl/", + ).forEach(callback) + } } private suspend fun getQuality(url: String) : Int { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index 8e03dd99..ef4bc6d9 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -14,6 +14,7 @@ import com.lagradost.nicehttp.RequestBodyTypes import kotlinx.coroutines.delay import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.internal.closeQuietly import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.jsoup.select.Elements @@ -2093,6 +2094,7 @@ object SoraExtractor : SoraStream() { .substringBefore("-") } val res = app.get(fixUrl(iframe, api), verify = false) + delay(1000) val serverUrl = res.document.selectFirst("script:containsData(pushState)")?.data()?.let { """,\s*'([^']+)""".toRegex().find(it)?.groupValues?.get(1) } ?: return @@ -2147,8 +2149,9 @@ object SoraExtractor : SoraStream() { "$blackvidAPI/v3/tv/sources/$tmdbId/$season/$episode?key=$key" } - val res = request(url).peekBody(1024 * 512) - val data = res.source().buffer.readByteArray().decrypt("2378f8e4e844f2dc839ab48f66e00acc2305a401") + val res = request(url).body + val bytes = res.bytes().also { res.closeQuietly() } + val data = bytes.decrypt("2378f8e4e844f2dc839ab48f66e00acc2305a401") val json = tryParseJson(data) json?.sources?.map { source ->