From a2c0a1a5ec9e3c83fbbca6fb3749d0ee61c8f1d0 Mon Sep 17 00:00:00 2001 From: hexated Date: Mon, 12 Dec 2022 20:24:46 +0700 Subject: [PATCH] [Sora] added oiya into FDMovies --- SoraStream/build.gradle.kts | 2 +- .../main/kotlin/com/hexated/SoraExtractor.kt | 51 ++++++++++++++----- .../src/main/kotlin/com/hexated/SoraUtils.kt | 16 +++++- 3 files changed, 53 insertions(+), 16 deletions(-) diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index 4660ee2c..6d38b7ff 100644 --- a/SoraStream/build.gradle.kts +++ b/SoraStream/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 52 +version = 53 cloudstream { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index f23f62fe..d83fb68b 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -1388,21 +1388,37 @@ object SoraExtractor : SoraStream() { } val request = app.get(url) - if(!request.isSuccessful) return + if (!request.isSuccessful) return - val iframe = request.document.select("div#download tbody tr").map { it } - .filter { it.select("img").attr("src").contains("gdtot") }.map { - Triple( - it.select("a").attr("href"), - it.select("strong.quality").text(), - it.select("td:nth-child(4)").text() - ) - }.filter { it.second.contains("1080p", true) || it.second.contains("4k", true) } - Log.i("fdMoviesAPI", "$iframe") - iframe.apmap { (link, quality, size) -> + val iframe = request.document.select("div#download tbody tr").map { + FDMovieIFrame( + it.select("a").attr("href"), + it.select("strong.quality").text(), + it.select("td:nth-child(4)").text(), + it.select("img").attr("src") + ) + }.filter { + (it.quality.contains("1080p", true) || it.quality.contains( + "4k", + true + )) && (it.type.contains("gdtot") || it.type.contains("oiya")) + } + Log.i("hexated", "$iframe") + iframe.apmap { (link, quality, size, type) -> + val qualities = getFDoviesQuality(quality) val fdLink = bypassFdAds(link) - val gdBotLink = extractGdbot(fdLink ?: return@apmap null) - val videoLink = extractDrivebot(gdBotLink ?: return@apmap null) + val videoLink = when { + type.contains("gdtot") -> { + val gdBotLink = extractGdbot(fdLink ?: return@apmap null) + extractDrivebot(gdBotLink ?: return@apmap null) + } + type.contains("oiya") -> { + extractOiya(fdLink ?: return@apmap null, qualities) + } + else -> { + return@apmap null + } + } callback.invoke( ExtractorLink( @@ -1410,7 +1426,7 @@ object SoraExtractor : SoraStream() { "FDMovies [$size]", videoLink ?: return@apmap null, "", - getGMoviesQuality(quality) + getQualityFromName(qualities) ) ) } @@ -1588,6 +1604,13 @@ class StreamM4u: XStreamCdn() { override val mainUrl: String = "https://streamm4u.club" } +data class FDMovieIFrame( + val link: String, + val quality: String, + val size: String, + val type: String, +) + data class UHDBackupUrl( @JsonProperty("url") val url: String? = null, ) diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt index 01226e95..2a164228 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt @@ -195,6 +195,12 @@ suspend fun extractDrivebot(url: String): String? { return tryParseJson(result)?.url } +suspend fun extractOiya(url: String, quality: String): String? { + val doc = app.get(url).document + return doc.selectFirst("div.wp-block-button a:matches((?i)$quality)")?.attr("href") + ?: doc.selectFirst("div.wp-block-button a")?.attr("href") +} + suspend fun bypassFdAds(url: String): String? { val res = app.get(url).document val freeRedirect = res.selectFirst("a#link")?.attr("href") @@ -333,7 +339,7 @@ fun getGMoviesQuality(str: String): Int { return when { str.contains("480P", true) -> Qualities.P480.value str.contains("720P", true) -> Qualities.P720.value - str.contains("1080", true) -> Qualities.P1080.value + str.contains("1080P", true) -> Qualities.P1080.value str.contains("4K", true) -> Qualities.P2160.value else -> Qualities.Unknown.value } @@ -349,6 +355,14 @@ fun getSoraQuality(quality: String): Int { } } +fun getFDoviesQuality(str: String): String { + return when { + str.contains("1080P", true) -> "1080P" + str.contains("4K", true) -> "4K" + else -> "" + } +} + fun getBaseUrl(url: String): String { return URI(url).let { "${it.scheme}://${it.host}"