From 73bb664a63363f3be3fd45175420d29df00fcaf0 Mon Sep 17 00:00:00 2001 From: adityajd <45625055+adityajd@users.noreply.github.com> Date: Thu, 14 Dec 2023 21:14:10 +0700 Subject: [PATCH 1/3] Adityajd patch 1 (#448) * Update RebahinProvider.kt * Update LayarKacaProvider.kt update main url ="https://tv3.lk21official.wiki" change to "https://tv4.lk21official.wiki" * Update LayarKacaProvider.kt * Update Dubbindo.kt update domain * Update Cgvindo.kt * Update DramaidProvider.kt * Update DutaMovie.kt * Update Ngefilm.kt * Update Pusatfilm.kt * Update LayarKacaProvider.kt * Update build.gradle.kts * Update RebahinProvider.kt * Update DutaMovie.kt Update mainurl * Update build.gradle.kts * Update Ngefilm.kt * Update DramaSerial.kt * Update Nodrakorid.kt update mainurl * Update Pusatfilm.kt update mainurl * Update DramaSerial.kt update serverurl http://31.220.73.179/ --- DramaSerial/src/main/kotlin/com/hexated/DramaSerial.kt | 4 ++-- Gomov/src/main/kotlin/com/hexated/Ngefilm.kt | 6 +----- Gomov/src/main/kotlin/com/hexated/Nodrakorid.kt | 4 ++-- Gomov/src/main/kotlin/com/hexated/Pusatfilm.kt | 2 +- RebahinProvider/build.gradle.kts | 2 +- 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/DramaSerial/src/main/kotlin/com/hexated/DramaSerial.kt b/DramaSerial/src/main/kotlin/com/hexated/DramaSerial.kt index b4e11f74..1c1113dc 100644 --- a/DramaSerial/src/main/kotlin/com/hexated/DramaSerial.kt +++ b/DramaSerial/src/main/kotlin/com/hexated/DramaSerial.kt @@ -11,8 +11,8 @@ import com.lagradost.cloudstream3.utils.loadExtractor import org.jsoup.nodes.Element class DramaSerial : MainAPI() { - override var mainUrl = "https://tv1.dramaserial.id" - private var serverUrl = "https://juraganfilm.info" + override var mainUrl = "https://tv3.dramaserial.id" + private var serverUrl = "http://31.220.73.179/" override var name = "DramaSerial" override val hasMainPage = true override var lang = "id" diff --git a/Gomov/src/main/kotlin/com/hexated/Ngefilm.kt b/Gomov/src/main/kotlin/com/hexated/Ngefilm.kt index 3ae7ed45..48acf2cb 100644 --- a/Gomov/src/main/kotlin/com/hexated/Ngefilm.kt +++ b/Gomov/src/main/kotlin/com/hexated/Ngefilm.kt @@ -3,12 +3,8 @@ package com.hexated import com.lagradost.cloudstream3.mainPageOf class Ngefilm : Gomov() { - - override var mainUrl = "https://nge-film21.fun" - - + override var mainUrl = "https://nge-film21.pics/" override var name = "Ngefilm" - override val mainPage = mainPageOf( "/page/%d/?s&search=advanced&post_type=movie&index&orderby&genre&movieyear&country&quality=" to "Movies Terbaru", "/page/%d/?s=&search=advanced&post_type=tv&index=&orderby=&genre=&movieyear=&country=&quality=" to "Series Terbaru", diff --git a/Gomov/src/main/kotlin/com/hexated/Nodrakorid.kt b/Gomov/src/main/kotlin/com/hexated/Nodrakorid.kt index 0597c5c1..c697f403 100644 --- a/Gomov/src/main/kotlin/com/hexated/Nodrakorid.kt +++ b/Gomov/src/main/kotlin/com/hexated/Nodrakorid.kt @@ -9,7 +9,7 @@ import org.jsoup.nodes.Element import java.net.URI class Nodrakorid : Gomov() { - override var mainUrl = "https://nodra-kor.xyz" + override var mainUrl = "https://no-dra-kor-id.shop" override var name = "Nodrakorid" override val mainPage = mainPageOf( @@ -151,4 +151,4 @@ class Nodrakorid : Gomov() { @JsonProperty("first") var first: String, @JsonProperty("second") var second: String ) -} \ No newline at end of file +} diff --git a/Gomov/src/main/kotlin/com/hexated/Pusatfilm.kt b/Gomov/src/main/kotlin/com/hexated/Pusatfilm.kt index ae4f7639..3a18e469 100644 --- a/Gomov/src/main/kotlin/com/hexated/Pusatfilm.kt +++ b/Gomov/src/main/kotlin/com/hexated/Pusatfilm.kt @@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.TvSeriesLoadResponse import com.lagradost.cloudstream3.* class Pusatfilm : Gomov() { - override var mainUrl = "http://185.190.140.116" + override var mainUrl = "http://31.220.90.203/" override var name = "Pusatfilm" override val mainPage = mainPageOf( diff --git a/RebahinProvider/build.gradle.kts b/RebahinProvider/build.gradle.kts index 1b2ff64e..6f308335 100644 --- a/RebahinProvider/build.gradle.kts +++ b/RebahinProvider/build.gradle.kts @@ -25,5 +25,5 @@ cloudstream { ) - iconUrl = "https://www.google.com/s2/favicons?domain=179.43.163.53&sz=%size%" + iconUrl = "https://www.google.com/s2/favicons?domain=179.43.163.54&sz=%size%" } From 15f99b4ddf6437b20fb7b8af9cb2ddcc01184763 Mon Sep 17 00:00:00 2001 From: hexated <37908684+hexated@users.noreply.github.com> Date: Fri, 15 Dec 2023 11:32:48 +0700 Subject: [PATCH 2/3] sora: added Aoneroom --- .../src/main/kotlin/com/hexated/Hdmovie2.kt | 5 +- SoraStream/build.gradle.kts | 2 +- .../src/main/kotlin/com/hexated/Extractors.kt | 5 + .../main/kotlin/com/hexated/SoraExtractor.kt | 116 +++++++++++++++--- .../src/main/kotlin/com/hexated/SoraParser.kt | 30 ++++- .../src/main/kotlin/com/hexated/SoraStream.kt | 20 ++- .../main/kotlin/com/hexated/SoraStreamLite.kt | 16 ++- .../kotlin/com/hexated/SoraStreamPlugin.kt | 1 + 8 files changed, 167 insertions(+), 28 deletions(-) diff --git a/Movierulzhd/src/main/kotlin/com/hexated/Hdmovie2.kt b/Movierulzhd/src/main/kotlin/com/hexated/Hdmovie2.kt index 5af01bf1..4e0f12b7 100644 --- a/Movierulzhd/src/main/kotlin/com/hexated/Hdmovie2.kt +++ b/Movierulzhd/src/main/kotlin/com/hexated/Hdmovie2.kt @@ -42,10 +42,7 @@ class Hdmovie2 : Movierulzhd() { callback ) } else { - var document = app.get(data).document - if (document.select("title").text() == "Just a moment...") { - document = app.get(data).document - } + val document = app.get(data).document val id = document.select("meta#dooplay-ajax-counter").attr("data-postid") val type = if (data.contains("/movies/")) "movie" else "tv" diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index c924f475..a54c74ca 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 = 204 +version = 205 android { defaultConfig { diff --git a/SoraStream/src/main/kotlin/com/hexated/Extractors.kt b/SoraStream/src/main/kotlin/com/hexated/Extractors.kt index 5fb910af..7662b6e6 100644 --- a/SoraStream/src/main/kotlin/com/hexated/Extractors.kt +++ b/SoraStream/src/main/kotlin/com/hexated/Extractors.kt @@ -400,4 +400,9 @@ class Embedwish : Filesim() { class Vidplay2 : Vidplay() { override val mainUrl = "https://vidplay.online" +} + +class Flaswish : Filesim() { + override val name = "Flaswish" + override var mainUrl = "https://flaswish.com" } \ No newline at end of file diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index c14b6ec4..8b3ca02d 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -236,6 +236,7 @@ object SoraExtractor : SoraStream() { } suspend fun invokeMultimovies( + apiUrl: String, title: String? = null, season: Int? = null, episode: Int? = null, @@ -244,11 +245,82 @@ object SoraExtractor : SoraStream() { ) { val fixTitle = title.createSlug() val url = if (season == null) { - "$multimoviesAPI/movies/$fixTitle" + "$apiUrl/movies/$fixTitle" } else { - "$multimoviesAPI/episodes/$fixTitle-${season}x${episode}" + "$apiUrl/episodes/$fixTitle-${season}x${episode}" } - invokeWpmovies(null, url, subtitleCallback, callback) + val req = app.get(url) + val directUrl = getBaseUrl(req.url) + val iframe = req.document.selectFirst("div.pframe iframe")?.attr("src") ?: return + if(!iframe.contains("youtube")) { + loadExtractor(iframe, "$directUrl/", subtitleCallback) { link -> + if(link.quality == Qualities.Unknown.value) { + callback.invoke( + ExtractorLink( + link.source, + link.name, + link.url, + link.referer, + Qualities.P1080.value, + link.type, + link.headers, + link.extractorData + ) + ) + } + } + } + } + + suspend fun invokeAoneroom( + title: String? = null, + year: Int? = null, + season: Int? = null, + episode: Int? = null, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit, + ) { + val headers = mapOf( + "Authorization" to "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjcyODc3MjQ5OTg4MzA0NzM5NzYsInV0cCI6MSwiZXhwIjoxNzEwMzg4NzczLCJpYXQiOjE3MDI2MTI3NzN9.Myt-gVHfPfQFbFyRX3WXtiiwvRzDwBrXTEKy1l-GDRU" + ) + val subjectId = app.post( + "$aoneroomAPI/wefeed-mobile-bff/subject-api/search", data = mapOf( + "page" to "1", + "perPage" to "10", + "keyword" to "$title", + "subjectType" to if (season == null) "1" else "2", + ), headers = headers + ).parsedSafe()?.data?.items?.find { + it.title.equals(title, true) && it.releaseDate?.substringBefore("-") == "$year" + }?.subjectId + + val data = app.get( + "$aoneroomAPI/wefeed-mobile-bff/subject-api/resource?subjectId=${subjectId ?: return}&page=1&perPage=10000&all=0&startPosition=1&endPosition=1&pagerMode=0&resolution=480", + headers = headers + ).parsedSafe()?.data?.list?.findLast { + it.se == (season ?: 0) && it.ep == (episode ?: 0) + } + + callback.invoke( + ExtractorLink( + "Aoneroom", + "Aoneroom", + data?.resourceLink ?: return, + "", + data.resolution ?: Qualities.Unknown.value, + INFER_TYPE + ) + ) + + data.extCaptions?.map { sub -> + subtitleCallback.invoke( + SubtitleFile( + sub.lanName ?: return@map, + sub.url ?: return@map, + ) + ) + } + } suspend fun invokeNetmovies( @@ -733,15 +805,16 @@ object SoraExtractor : SoraStream() { res.first().id to res.first().title } else { val data = res.find { - val slugTitle = it.title.createSlug() + val slugTitle = it.title.createSlug() ?: return when { - season == null -> slugTitle?.equals(slug) == true - lastSeason == 1 -> slugTitle?.contains(slug) == true - else -> slugTitle?.contains(slug) == true && it.title?.contains( - "Season $season", true - ) == true + season == null -> slugTitle == slug + lastSeason == 1 -> slugTitle.contains(slug) + else -> (slugTitle.contains(slug) && it.title?.contains( + "Season $season", + true + ) == true) } - } + } ?: res.find { it.title.equals(title) } data?.id to data?.title } @@ -974,7 +1047,7 @@ object SoraExtractor : SoraStream() { val fixTitle = title.createSlug() val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode) - val url = if(season == null) { + val url = if (season == null) { "$uhdmoviesAPI/download-$fixTitle-$year" } else { "$uhdmoviesAPI/download-$fixTitle" @@ -982,7 +1055,7 @@ object SoraExtractor : SoraStream() { val detailDoc = app.get(url).document - val iSelector = if(season == null) { + val iSelector = if (season == null) { "div.entry-content p:has(:matches($year))" } else { "div.entry-content p:has(:matches((?i)(?:S\\s*$seasonSlug|Season\\s*$seasonSlug)))" @@ -1003,15 +1076,18 @@ object SoraExtractor : SoraStream() { val driveReq = app.get(driveLink) val driveRes = driveReq.document val bitLink = driveRes.select("a.btn.btn-outline-success").attr("href") - val insLink = driveRes.select("a.btn.btn-danger:contains(Instant Download)").attr("href") + val insLink = + driveRes.select("a.btn.btn-danger:contains(Instant Download)").attr("href") val downloadLink = when { insLink.isNotEmpty() -> extractInstantUHD(insLink) driveRes.select("button.btn.btn-success").text() .contains("Direct Download", true) -> extractDirectUHD(driveLink, driveReq) + bitLink.isNullOrEmpty() -> { val backupIframe = driveRes.select("a.btn.btn-outline-warning").attr("href") extractBackupUHD(backupIframe ?: return@apmap) } + else -> { extractMirrorUHD(bitLink, base) } @@ -1091,7 +1167,8 @@ object SoraExtractor : SoraStream() { 1 -> "Season 1" else -> "Season 1 – $lastSeason" } - val media = res.selectFirst("div.blog-items article:has(h3.entry-title:matches((?i)$title.*$match)) a") + val media = + res.selectFirst("div.blog-items article:has(h3.entry-title:matches((?i)$title.*$match)) a") ?.attr("href") res = app.get(media ?: return).document @@ -1972,8 +2049,8 @@ object SoraExtractor : SoraStream() { "$title Season $season" } val savedCookies = mapOf( - "_identitygomovies7" to "52fdc70b008c0b1d881dac0f01cca819edd512de01cc8bbc1224ed4aafb78b52a%3A2%3A%7Bi%3A0%3Bs%3A18%3A%22_identitygomovies7%22%3Bi%3A1%3Bs%3A52%3A%22%5B2050366%2C%22HnVRRAObTASOJEr45YyCM8wiHol0V1ko%22%2C2592000%5D%22%3B%7D", - ) + "_identitygomovies7" to "52fdc70b008c0b1d881dac0f01cca819edd512de01cc8bbc1224ed4aafb78b52a%3A2%3A%7Bi%3A0%3Bs%3A18%3A%22_identitygomovies7%22%3Bi%3A1%3Bs%3A52%3A%22%5B2050366%2C%22HnVRRAObTASOJEr45YyCM8wiHol0V1ko%22%2C2592000%5D%22%3B%7D", + ) val req = app.get("$api/search/$query") val doc = req.document val media = doc.select("div.$mediaSelector").map { @@ -2070,8 +2147,8 @@ object SoraExtractor : SoraStream() { "$blackvidAPI/v3/tv/sources/$tmdbId/$season/$episode?key=$key" } - val data = request(url,).peekBody(1024 * 512).source().buffer.readByteArray() - .decrypt("2378f8e4e844f2dc839ab48f66e00acc2305a401") + val res = request(url).peekBody(1024 * 512) + val data = res.source().buffer.readByteArray().decrypt("2378f8e4e844f2dc839ab48f66e00acc2305a401") val json = tryParseJson(data) json?.sources?.map { source -> @@ -2179,7 +2256,8 @@ object SoraExtractor : SoraStream() { "$cinemaTvAPI/shows/play/$id-$slug-$year" } - val specialCookies = "PHPSESSID=e555h63ilisoj2l6j7b5d4jb6p; _csrf=9597150e45f485ad9c4f2e06a2572534d8415337eda9d48d0ecfa25b73b6a9e1a%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%222HcnegjGB0nX205FAUPb86fqMx9HWIF1%22%3B%7D; _ga=GA1.1.1195498587.1701871187; _ga_VZD7HJ3WK6=GS1.1.$unixTime.4.0.1.$unixTime.0.0.0" + val specialCookies = + "PHPSESSID=e555h63ilisoj2l6j7b5d4jb6p; _csrf=9597150e45f485ad9c4f2e06a2572534d8415337eda9d48d0ecfa25b73b6a9e1a%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%222HcnegjGB0nX205FAUPb86fqMx9HWIF1%22%3B%7D; _ga=GA1.1.1195498587.1701871187; _ga_VZD7HJ3WK6=GS1.1.$unixTime.4.0.1.$unixTime.0.0.0" val headers = mapOf( "Cookie" to specialCookies, "Connection" to "keep-alive", diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt index 229baa2f..fb2b3ef5 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt @@ -433,4 +433,32 @@ data class SmashyDSources( data class SmashyDSourcesUrls( @JsonProperty("file") var file: String? = null, @JsonProperty("title") var title: String? = null, -) \ No newline at end of file +) + +data class AoneroomResponse( + @JsonProperty("data") val data: Data? = null, +) { + data class Data( + @JsonProperty("items") val items: ArrayList? = arrayListOf(), + @JsonProperty("list") val list: ArrayList? = arrayListOf(), + ) { + data class Items( + @JsonProperty("subjectId") val subjectId: String? = null, + @JsonProperty("title") val title: String? = null, + @JsonProperty("releaseDate") val releaseDate: String? = null, + ) + + data class List( + @JsonProperty("resourceLink") val resourceLink: String? = null, + @JsonProperty("extCaptions") val extCaptions: ArrayList? = arrayListOf(), + @JsonProperty("se") val se: Int? = null, + @JsonProperty("ep") val ep: Int? = null, + @JsonProperty("resolution") val resolution: Int? = null, + ) { + data class ExtCaptions( + @JsonProperty("lanName") val lanName: String? = null, + @JsonProperty("url") val url: String? = null, + ) + } + } +} \ No newline at end of file diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt index 73b74d0b..2e0fcb3c 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -3,6 +3,7 @@ package com.hexated import com.fasterxml.jackson.annotation.JsonProperty import com.hexated.SoraExtractor.invoke2embed import com.hexated.SoraExtractor.invokeAnimes +import com.hexated.SoraExtractor.invokeAoneroom import com.hexated.SoraExtractor.invokeBlackvid import com.hexated.SoraExtractor.invokeBollyMaza import com.hexated.SoraExtractor.invokeDbgo @@ -102,7 +103,8 @@ open class SoraStream : TmdbProvider() { const val ridomoviesAPI = "https://ridomovies.pw" const val navyAPI = "https://navy-issue-i-239.site" const val emoviesAPI = "https://emovies.si" - const val multimoviesAPI = "https://multimovies.live" + const val multimoviesAPI = "https://multimovies.top" + const val multimovies2API = "https://multimovies.click" const val netmoviesAPI = "https://netmovies.to" const val momentAPI = "https://izzillent-dickstonyx-i-262.site" const val doomoviesAPI = "https://doomovies.net" @@ -112,6 +114,7 @@ open class SoraStream : TmdbProvider() { const val watchflxAPI = "https://watchflx.tv" const val blackvidAPI = "https://prod.api.blackvid.space" const val showflixAPI = "https://showflix.space" + const val aoneroomAPI = "https://api3.aoneroom.com" const val fdMoviesAPI = "https://freedrivemovie.lol" const val uhdmoviesAPI = "https://uhdmovies.zip" @@ -391,6 +394,16 @@ open class SoraStream : TmdbProvider() { { invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback) }, + { + if (!res.isAnime) invokeAoneroom( + res.title, + res.airedYear ?: res.year, + res.season, + res.episode, + subtitleCallback, + callback + ) + }, { if (res.isAnime) invokeAnimes( res.title, @@ -641,7 +654,10 @@ open class SoraStream : TmdbProvider() { ) }, { - invokeMultimovies(res.title, res.season, res.episode, subtitleCallback, callback) + if(res.isBollywood) invokeMultimovies(multimoviesAPI, res.title, res.season, res.episode, subtitleCallback, callback) + }, + { + if(res.isBollywood) invokeMultimovies(multimovies2API, res.title, res.season, res.episode, subtitleCallback, callback) }, { invokeNetmovies( diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt index c3b4a827..e1701bcb 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt @@ -2,6 +2,7 @@ package com.hexated import com.hexated.SoraExtractor.invoke2embed import com.hexated.SoraExtractor.invokeAnimes +import com.hexated.SoraExtractor.invokeAoneroom import com.hexated.SoraExtractor.invokeBlackvid import com.hexated.SoraExtractor.invokeDbgo import com.hexated.SoraExtractor.invokeDoomovies @@ -221,6 +222,16 @@ class SoraStreamLite : SoraStream() { { if (!res.isAnime) invokeNowTv(res.id, res.imdbId, res.season, res.episode, callback) }, + { + if (!res.isAnime) invokeAoneroom( + res.title, + res.airedYear ?: res.year, + res.season, + res.episode, + subtitleCallback, + callback + ) + }, { invokeNavy(res.imdbId, res.season, res.episode, callback) }, @@ -242,7 +253,10 @@ class SoraStreamLite : SoraStream() { ) }, { - invokeMultimovies(res.title, res.season, res.episode, subtitleCallback, callback) + if(res.isBollywood) invokeMultimovies(multimoviesAPI, res.title, res.season, res.episode, subtitleCallback, callback) + }, + { + if(res.isBollywood) invokeMultimovies(multimovies2API, res.title, res.season, res.episode, subtitleCallback, callback) }, { invokeNetmovies( diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStreamPlugin.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStreamPlugin.kt index 4cfd8ef0..23cc44f2 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStreamPlugin.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStreamPlugin.kt @@ -29,5 +29,6 @@ class SoraStreamPlugin: Plugin() { registerExtractorAPI(Uploadever()) registerExtractorAPI(Netembed()) registerExtractorAPI(Vidplay2()) + registerExtractorAPI(Flaswish()) } } \ No newline at end of file From 4aa062b89f939ad878ee5341cb639278a917382f Mon Sep 17 00:00:00 2001 From: hexated <37908684+hexated@users.noreply.github.com> Date: Mon, 18 Dec 2023 06:16:58 +0700 Subject: [PATCH 3/3] Animasu: fix poster --- Animasu/build.gradle.kts | 2 +- Animasu/src/main/kotlin/com/hexated/Animasu.kt | 13 +++++++++++-- .../src/main/kotlin/com/hexated/AnimasuPlugin.kt | 1 + Animasu/src/main/kotlin/com/hexated/Extractors.kt | 6 ++++++ .../src/main/kotlin/com/hexated/SoraExtractor.kt | 5 ++--- .../src/main/kotlin/com/hexated/SoraStream.kt | 14 +++++++++----- .../src/main/kotlin/com/hexated/SoraStreamLite.kt | 2 +- 7 files changed, 31 insertions(+), 12 deletions(-) diff --git a/Animasu/build.gradle.kts b/Animasu/build.gradle.kts index c2504dae..24d134e7 100644 --- a/Animasu/build.gradle.kts +++ b/Animasu/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 8 +version = 9 cloudstream { diff --git a/Animasu/src/main/kotlin/com/hexated/Animasu.kt b/Animasu/src/main/kotlin/com/hexated/Animasu.kt index 4e726b6e..2b1cdf7d 100644 --- a/Animasu/src/main/kotlin/com/hexated/Animasu.kt +++ b/Animasu/src/main/kotlin/com/hexated/Animasu.kt @@ -79,7 +79,7 @@ class Animasu : MainAPI() { private fun Element.toSearchResult(): AnimeSearchResponse { val href = getProperAnimeLink(fixUrlNull(this.selectFirst("a")?.attr("href")).toString()) val title = this.select("div.tt").text().trim() - val posterUrl = fixUrlNull(this.selectFirst("img")?.attr("src")) + val posterUrl = fixUrlNull(this.selectFirst("img")?.getImageAttr()) val epNum = this.selectFirst("span.epx")?.text()?.filter { it.isDigit() }?.toIntOrNull() return newAnimeSearchResponse(title, href, TvType.Anime) { this.posterUrl = posterUrl @@ -98,7 +98,7 @@ class Animasu : MainAPI() { val document = app.get(url).document val title = document.selectFirst("div.infox h1")?.text().toString().replace("Sub Indo", "").trim() - val poster = document.selectFirst("div.bigcontent img")?.attr("src")?.replace("\n", "") + val poster = document.selectFirst("div.bigcontent img")?.getImageAttr() val table = document.selectFirst("div.infox div.spe") val type = getType(table?.selectFirst("span:contains(Jenis:)")?.ownText()) @@ -179,4 +179,13 @@ class Animasu : MainAPI() { ?: Qualities.Unknown.value } + private fun Element.getImageAttr(): String? { + return when { + this.hasAttr("data-src") -> this.attr("abs:data-src") + this.hasAttr("data-lazy-src") -> this.attr("abs:data-lazy-src") + this.hasAttr("srcset") -> this.attr("abs:srcset").substringBefore(" ") + else -> this.attr("abs:src") + } + } + } \ No newline at end of file diff --git a/Animasu/src/main/kotlin/com/hexated/AnimasuPlugin.kt b/Animasu/src/main/kotlin/com/hexated/AnimasuPlugin.kt index 8572dec6..5ef35841 100644 --- a/Animasu/src/main/kotlin/com/hexated/AnimasuPlugin.kt +++ b/Animasu/src/main/kotlin/com/hexated/AnimasuPlugin.kt @@ -12,5 +12,6 @@ class AnimasuPlugin: Plugin() { registerMainAPI(Animasu()) registerExtractorAPI(Archivd()) registerExtractorAPI(Newuservideo()) + registerExtractorAPI(Vidhidepro()) } } \ No newline at end of file diff --git a/Animasu/src/main/kotlin/com/hexated/Extractors.kt b/Animasu/src/main/kotlin/com/hexated/Extractors.kt index 0f40af8c..dfd08840 100644 --- a/Animasu/src/main/kotlin/com/hexated/Extractors.kt +++ b/Animasu/src/main/kotlin/com/hexated/Extractors.kt @@ -3,6 +3,7 @@ package com.hexated import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.extractors.Filesim import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink @@ -99,4 +100,9 @@ class Newuservideo : ExtractorApi() { @JsonProperty("streams") val streams: ArrayList? = null, ) +} + +class Vidhidepro : Filesim() { + override val mainUrl = "https://vidhidepro.com" + override val name = "Vidhidepro" } \ No newline at end of file diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index 8b3ca02d..8e03dd99 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -2256,10 +2256,9 @@ object SoraExtractor : SoraStream() { "$cinemaTvAPI/shows/play/$id-$slug-$year" } - val specialCookies = - "PHPSESSID=e555h63ilisoj2l6j7b5d4jb6p; _csrf=9597150e45f485ad9c4f2e06a2572534d8415337eda9d48d0ecfa25b73b6a9e1a%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%222HcnegjGB0nX205FAUPb86fqMx9HWIF1%22%3B%7D; _ga=GA1.1.1195498587.1701871187; _ga_VZD7HJ3WK6=GS1.1.$unixTime.4.0.1.$unixTime.0.0.0" + val session = "PHPSESSID=ngr4cudjrimdnhkth30ssohs0n; _csrf=a6ffd7bb7654083fce6df528225a238d0e85aa1fb885dc7638c1259ec1ba0d5ca%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22mTTLiDLjxohs-CpKk0bjRH3HdYMB9uBV%22%3B%7D; _ga=GA1.1.1195498587.1701871187; _ga_VZD7HJ3WK6=GS1.1.$unixTime.4.0.1.$unixTime.0.0.0" val headers = mapOf( - "Cookie" to specialCookies, + "Cookie" to session, "Connection" to "keep-alive", "x-requested-with" to "XMLHttpRequest", ) diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt index 2e0fcb3c..859c9037 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -95,7 +95,7 @@ open class SoraStream : TmdbProvider() { const val flixonAPI = "https://flixon.lol" const val smashyStreamAPI = "https://embed.smashystream.com" const val watchSomuchAPI = "https://watchsomuch.tv" // sub only - var cinemaTvAPI = BuildConfig.CINEMATV_API + const val cinemaTvAPI = BuildConfig.CINEMATV_API const val nineTvAPI = "https://moviesapi.club" const val nowTvAPI = "https://myfilestorage.xyz" const val gokuAPI = "https://goku.sx" @@ -231,10 +231,12 @@ open class SoraStream : TmdbProvider() { val year = releaseDate?.split("-")?.first()?.toIntOrNull() val rating = res.vote_average.toString().toRatingInt() val genres = res.genres?.mapNotNull { it.name } - val isAnime = - genres?.contains("Animation") == true && (res.original_language == "zh" || res.original_language == "ja") + + val isCartoon = genres?.contains("Animation") ?: false + val isAnime = isCartoon && (res.original_language == "zh" || res.original_language == "ja") val isAsian = !isAnime && (res.original_language == "zh" || res.original_language == "ko") val isBollywood = res.production_countries?.any { it.name == "India" } ?: false + val keywords = res.keywords?.results?.mapNotNull { it.name }.orEmpty() .ifEmpty { res.keywords?.keywords?.mapNotNull { it.name } } @@ -277,7 +279,8 @@ open class SoraStream : TmdbProvider() { date = season.airDate, airedDate = res.releaseDate ?: res.firstAirDate, isAsian = isAsian, - isBollywood = isBollywood + isBollywood = isBollywood, + isCartoon = isCartoon ).toJson(), name = eps.name + if (isUpcoming(eps.airDate)) " - [UPCOMING]" else "", season = eps.seasonNumber, @@ -438,7 +441,7 @@ open class SoraStream : TmdbProvider() { ) }, { - if (!res.isAnime) invokeKimcartoon( + if (!res.isAnime && res.isCartoon) invokeKimcartoon( res.title, res.season, res.episode, @@ -755,6 +758,7 @@ open class SoraStream : TmdbProvider() { val airedDate: String? = null, val isAsian: Boolean = false, val isBollywood: Boolean = false, + val isCartoon: Boolean = false, ) data class Data( diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt index e1701bcb..d4b25315 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt @@ -145,7 +145,7 @@ class SoraStreamLite : SoraStream() { ) }, { - if (!res.isAnime) invokeKimcartoon( + if (!res.isAnime && res.isCartoon) invokeKimcartoon( res.title, res.season, res.episode,