From 012217b40d8c1138a16c35213eedf79cef781aad Mon Sep 17 00:00:00 2001 From: hexated Date: Sun, 22 Oct 2023 16:35:23 +0700 Subject: [PATCH] fixed #338 --- .../main/kotlin/com/hexated/SoraExtractor.kt | 46 +++++++++++-------- .../src/main/kotlin/com/hexated/SoraParser.kt | 23 ++++++++++ .../src/main/kotlin/com/hexated/SoraUtils.kt | 2 +- 3 files changed, 52 insertions(+), 19 deletions(-) diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index eca56b25..677dabb1 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -2376,27 +2376,37 @@ object SoraExtractor : SoraStream() { } suspend fun invokeRidomovies( + tmdbId: Int? = null, + imdbId: String? = null, title: String? = null, - year: Int? = null, callback: (ExtractorLink) -> Unit, ) { - val iframe = - app.get("$ridomoviesAPI/movies/${title.createSlug()}-watch-online-$year").document.selectFirst( - "div.player-div iframe" - )?.attr("data-src") - val unpacked = getAndUnpack(app.get(iframe ?: return, referer = "$ridomoviesAPI/").text) - val video = Regex("=\"(aHR.*?)\";").find(unpacked)?.groupValues?.get(1) - callback.invoke( - ExtractorLink( - "Ridomovies", - "Ridomovies", - base64Decode(video ?: return), - "${getBaseUrl(iframe)}/", - Qualities.P1080.value, - isM3u8 = true - ) - ) - + val slug = app.get("$ridomoviesAPI/core/api/search?q=$title") + .parsedSafe()?.data?.items?.find { + it.contentable?.tmdbId == tmdbId || it.contentable?.imdbId == imdbId + }?.slug ?: return + app.get("$ridomoviesAPI/core/api/movies/$slug/videos") + .parsedSafe()?.data?.apmap { link -> + val iframe = Jsoup.parse(link.url ?: return@apmap).select("iframe").attr("data-src") + val unpacked = + getAndUnpack( + app.get( + iframe, + referer = "$ridomoviesAPI/" + ).text + ) + val video = Regex("=\"(aHR.*?)\";").find(unpacked)?.groupValues?.get(1) + callback.invoke( + ExtractorLink( + "Ridomovies", + "Ridomovies", + base64Decode(video ?: return@apmap), + "${getBaseUrl(iframe)}/", + Qualities.P1080.value, + isM3u8 = true + ) + ) + } } suspend fun invokeNavy( diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt index a9179446..47c821b1 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt @@ -392,4 +392,27 @@ data class SFMoviesData( data class SFMoviesSearch( @JsonProperty("data") var data: ArrayList? = arrayListOf(), +) + +data class RidoContentable( + @JsonProperty("imdbId") var imdbId: String? = null, + @JsonProperty("tmdbId") var tmdbId: Int? = null, +) + +data class RidoItems( + @JsonProperty("slug") var slug: String? = null, + @JsonProperty("contentable") var contentable: RidoContentable? = null, +) + +data class RidoData( + @JsonProperty("url") var url: String? = null, + @JsonProperty("items") var items: ArrayList? = arrayListOf(), +) + +data class RidoResponses( + @JsonProperty("data") var data: ArrayList? = arrayListOf(), +) + +data class RidoSearch( + @JsonProperty("data") var data: RidoData? = null, ) \ No newline at end of file diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt index c3cbabd2..6960d848 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt @@ -440,7 +440,7 @@ suspend fun invokeSmashyFfix( val source = Regex("['\"]?file['\"]?:\\s*\"([^\"]+)").find(res)?.groupValues?.get(1) ?: return source.split(",").map { links -> - val quality = Regex("(?i)\\[(\\d+(?:k|p)?)]").find(links)?.groupValues?.getOrNull(1)?.trim() + val quality = Regex("\\[(\\S+)]").find(links)?.groupValues?.getOrNull(1)?.trim() val link = links.removePrefix("[$quality]").trim() callback.invoke( ExtractorLink(