mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
sora: added omega
This commit is contained in:
parent
fe95a53ba9
commit
6cdeb65922
5 changed files with 57 additions and 82 deletions
|
@ -1,7 +1,7 @@
|
||||||
import org.jetbrains.kotlin.konan.properties.Properties
|
import org.jetbrains.kotlin.konan.properties.Properties
|
||||||
|
|
||||||
// use an integer for version numbers
|
// use an integer for version numbers
|
||||||
version = 165
|
version = 166
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
|
|
|
@ -263,58 +263,6 @@ object SoraExtractor : SoraStream() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun invokeSeries9(
|
|
||||||
title: String? = null,
|
|
||||||
year: Int? = null,
|
|
||||||
season: Int? = null,
|
|
||||||
episode: Int? = null,
|
|
||||||
subtitleCallback: (SubtitleFile) -> Unit,
|
|
||||||
callback: (ExtractorLink) -> Unit
|
|
||||||
) {
|
|
||||||
val fixTitle = title.createSlug()
|
|
||||||
val doc = if (season == null) {
|
|
||||||
val res = app.get("$series9API/film/$fixTitle/watching.html")
|
|
||||||
if (!res.isSuccessful) app.get("$series9API/film/$fixTitle-$year/watching.html").document else res.document
|
|
||||||
} else {
|
|
||||||
app.get("$series9API/film/$fixTitle-season-$season/watching.html").document
|
|
||||||
}
|
|
||||||
|
|
||||||
val server = doc.select("div#list-eps div.le-server").map { ele ->
|
|
||||||
if (season == null) {
|
|
||||||
ele.select("a").attr("player-data")
|
|
||||||
} else {
|
|
||||||
ele.select("a[episode-data=$episode]").attr("player-data")
|
|
||||||
}
|
|
||||||
}.find { it.contains(Regex("movembed|membed")) }
|
|
||||||
|
|
||||||
val iframe = app.get(httpsify(server ?: return))
|
|
||||||
val iframeDoc = iframe.document
|
|
||||||
|
|
||||||
argamap({
|
|
||||||
iframeDoc.select(".list-server-items > .linkserver")
|
|
||||||
.forEach { element ->
|
|
||||||
val status = element.attr("data-status") ?: return@forEach
|
|
||||||
if (status != "1") return@forEach
|
|
||||||
val extractorData = element.attr("data-video") ?: return@forEach
|
|
||||||
loadExtractor(extractorData, iframe.url, subtitleCallback, callback)
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
val iv = "9225679083961858"
|
|
||||||
val secretKey = "25742532592138496744665879883281"
|
|
||||||
GogoHelper.extractVidstream(
|
|
||||||
iframe.url,
|
|
||||||
"Vidstream",
|
|
||||||
callback,
|
|
||||||
iv,
|
|
||||||
secretKey,
|
|
||||||
secretKey,
|
|
||||||
isUsingAdaptiveKeys = false,
|
|
||||||
isUsingAdaptiveData = true,
|
|
||||||
iframeDocument = iframeDoc
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun invokeIdlix(
|
suspend fun invokeIdlix(
|
||||||
title: String? = null,
|
title: String? = null,
|
||||||
year: Int? = null,
|
year: Int? = null,
|
||||||
|
@ -2292,6 +2240,27 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun invokeOmega(
|
||||||
|
tmdbId: Int? = null,
|
||||||
|
callback: (ExtractorLink) -> Unit,
|
||||||
|
) {
|
||||||
|
app.get("$omegaAPI/v3/movie/sources/$tmdbId")
|
||||||
|
.parsedSafe<OmegaResponse>()?.sources?.filter { it.label != "2" }?.map { sources ->
|
||||||
|
sources.sources?.map source@{ source ->
|
||||||
|
callback.invoke(
|
||||||
|
ExtractorLink(
|
||||||
|
"Omega ${sources.label}",
|
||||||
|
"Omega ${sources.label}",
|
||||||
|
source.url ?: return@source,
|
||||||
|
"",
|
||||||
|
getQualityFromName(source.quality),
|
||||||
|
INFER_TYPE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun invokeAsk4Movies(
|
suspend fun invokeAsk4Movies(
|
||||||
title: String? = null,
|
title: String? = null,
|
||||||
year: Int? = null,
|
year: Int? = null,
|
||||||
|
|
|
@ -58,6 +58,20 @@ data class KisskhSources(
|
||||||
@JsonProperty("ThirdParty") val thirdParty: String?,
|
@JsonProperty("ThirdParty") val thirdParty: String?,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class OmegaSource(
|
||||||
|
@JsonProperty("quality") val quality: String? = null,
|
||||||
|
@JsonProperty("url") val url: String? = null,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class OmegaSources(
|
||||||
|
@JsonProperty("label") val label: String? = null,
|
||||||
|
@JsonProperty("sources") val sources: ArrayList<OmegaSource>? = arrayListOf(),
|
||||||
|
)
|
||||||
|
|
||||||
|
data class OmegaResponse(
|
||||||
|
@JsonProperty("sources") val sources: ArrayList<OmegaSources>? = arrayListOf(),
|
||||||
|
)
|
||||||
|
|
||||||
data class KisskhSubtitle(
|
data class KisskhSubtitle(
|
||||||
@JsonProperty("src") val src: String?,
|
@JsonProperty("src") val src: String?,
|
||||||
@JsonProperty("label") val label: String?,
|
@JsonProperty("label") val label: String?,
|
||||||
|
|
|
@ -11,7 +11,6 @@ import com.hexated.SoraExtractor.invokeFilmxy
|
||||||
import com.hexated.SoraExtractor.invokeIdlix
|
import com.hexated.SoraExtractor.invokeIdlix
|
||||||
import com.hexated.SoraExtractor.invokeKimcartoon
|
import com.hexated.SoraExtractor.invokeKimcartoon
|
||||||
import com.hexated.SoraExtractor.invokeMovieHab
|
import com.hexated.SoraExtractor.invokeMovieHab
|
||||||
import com.hexated.SoraExtractor.invokeSeries9
|
|
||||||
import com.hexated.SoraExtractor.invokeVidSrc
|
import com.hexated.SoraExtractor.invokeVidSrc
|
||||||
import com.lagradost.cloudstream3.*
|
import com.lagradost.cloudstream3.*
|
||||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
|
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
|
||||||
|
@ -44,9 +43,9 @@ import com.hexated.SoraExtractor.invokeJump1
|
||||||
import com.hexated.SoraExtractor.invokeMoment
|
import com.hexated.SoraExtractor.invokeMoment
|
||||||
import com.hexated.SoraExtractor.invokeMultimovies
|
import com.hexated.SoraExtractor.invokeMultimovies
|
||||||
import com.hexated.SoraExtractor.invokeNetmovies
|
import com.hexated.SoraExtractor.invokeNetmovies
|
||||||
|
import com.hexated.SoraExtractor.invokeOmega
|
||||||
import com.hexated.SoraExtractor.invokePobmovies
|
import com.hexated.SoraExtractor.invokePobmovies
|
||||||
import com.hexated.SoraExtractor.invokePrimewire
|
import com.hexated.SoraExtractor.invokePrimewire
|
||||||
import com.hexated.SoraExtractor.invokeSusflix
|
|
||||||
import com.hexated.SoraExtractor.invokeTvMovies
|
import com.hexated.SoraExtractor.invokeTvMovies
|
||||||
import com.hexated.SoraExtractor.invokeUhdmovies
|
import com.hexated.SoraExtractor.invokeUhdmovies
|
||||||
import com.hexated.SoraExtractor.invokeVidsrcto
|
import com.hexated.SoraExtractor.invokeVidsrcto
|
||||||
|
@ -91,7 +90,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val dbgoAPI = "https://dbgo.fun"
|
const val dbgoAPI = "https://dbgo.fun"
|
||||||
const val movieHabAPI = "https://moviehab.com"
|
const val movieHabAPI = "https://moviehab.com"
|
||||||
const val dreamfilmAPI = "https://dreamfilmsw.net"
|
const val dreamfilmAPI = "https://dreamfilmsw.net"
|
||||||
const val series9API = "https://series9.cx"
|
|
||||||
const val idlixAPI = "https://tv.idlixplus.net"
|
const val idlixAPI = "https://tv.idlixplus.net"
|
||||||
const val noverseAPI = "https://www.nollyverse.com"
|
const val noverseAPI = "https://www.nollyverse.com"
|
||||||
const val filmxyAPI = "https://www.filmxy.vip"
|
const val filmxyAPI = "https://www.filmxy.vip"
|
||||||
|
@ -134,6 +132,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val animetoshoAPI = "https://animetosho.org"
|
const val animetoshoAPI = "https://animetosho.org"
|
||||||
const val susflixAPI = "https://susflix.tv"
|
const val susflixAPI = "https://susflix.tv"
|
||||||
const val jump1API = "https://ca.jump1.net"
|
const val jump1API = "https://ca.jump1.net"
|
||||||
|
const val omegaAPI = "https://prod.omega.themoviearchive.site"
|
||||||
|
|
||||||
// INDEX SITE
|
// INDEX SITE
|
||||||
const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev"
|
const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev"
|
||||||
|
@ -249,7 +248,8 @@ open class SoraStream : TmdbProvider() {
|
||||||
val year = releaseDate?.split("-")?.first()?.toIntOrNull()
|
val year = releaseDate?.split("-")?.first()?.toIntOrNull()
|
||||||
val rating = res.vote_average.toString().toRatingInt()
|
val rating = res.vote_average.toString().toRatingInt()
|
||||||
val genres = res.genres?.mapNotNull { it.name }
|
val genres = res.genres?.mapNotNull { it.name }
|
||||||
val isAnime = genres?.contains("Animation") == true && (res.original_language == "zh" || res.original_language == "ja")
|
val isAnime =
|
||||||
|
genres?.contains("Animation") == true && (res.original_language == "zh" || res.original_language == "ja")
|
||||||
val isAsian = !isAnime && (res.original_language == "zh" || res.original_language == "ko")
|
val isAsian = !isAnime && (res.original_language == "zh" || res.original_language == "ko")
|
||||||
val keywords = res.keywords?.results?.mapNotNull { it.name }.orEmpty()
|
val keywords = res.keywords?.results?.mapNotNull { it.name }.orEmpty()
|
||||||
.ifEmpty { res.keywords?.keywords?.mapNotNull { it.name } }
|
.ifEmpty { res.keywords?.keywords?.mapNotNull { it.name } }
|
||||||
|
@ -426,16 +426,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
invokeSeries9(
|
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
invokeIdlix(
|
invokeIdlix(
|
||||||
res.title,
|
res.title,
|
||||||
|
@ -749,6 +739,12 @@ open class SoraStream : TmdbProvider() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
if (!res.isAnime && res.season == null) invokeOmega(
|
||||||
|
res.id,
|
||||||
|
callback
|
||||||
|
)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -22,7 +22,6 @@ import com.hexated.SoraExtractor.invokeNinetv
|
||||||
import com.hexated.SoraExtractor.invokeNowTv
|
import com.hexated.SoraExtractor.invokeNowTv
|
||||||
import com.hexated.SoraExtractor.invokeRStream
|
import com.hexated.SoraExtractor.invokeRStream
|
||||||
import com.hexated.SoraExtractor.invokeRidomovies
|
import com.hexated.SoraExtractor.invokeRidomovies
|
||||||
import com.hexated.SoraExtractor.invokeSeries9
|
|
||||||
import com.hexated.SoraExtractor.invokeSmashyStream
|
import com.hexated.SoraExtractor.invokeSmashyStream
|
||||||
import com.hexated.SoraExtractor.invokeDumpStream
|
import com.hexated.SoraExtractor.invokeDumpStream
|
||||||
import com.hexated.SoraExtractor.invokeEmovies
|
import com.hexated.SoraExtractor.invokeEmovies
|
||||||
|
@ -31,6 +30,7 @@ import com.hexated.SoraExtractor.invokeJump1
|
||||||
import com.hexated.SoraExtractor.invokeMoment
|
import com.hexated.SoraExtractor.invokeMoment
|
||||||
import com.hexated.SoraExtractor.invokeMultimovies
|
import com.hexated.SoraExtractor.invokeMultimovies
|
||||||
import com.hexated.SoraExtractor.invokeNetmovies
|
import com.hexated.SoraExtractor.invokeNetmovies
|
||||||
|
import com.hexated.SoraExtractor.invokeOmega
|
||||||
import com.hexated.SoraExtractor.invokePrimewire
|
import com.hexated.SoraExtractor.invokePrimewire
|
||||||
import com.hexated.SoraExtractor.invokeVidSrc
|
import com.hexated.SoraExtractor.invokeVidSrc
|
||||||
import com.hexated.SoraExtractor.invokeVidsrcto
|
import com.hexated.SoraExtractor.invokeVidsrcto
|
||||||
|
@ -134,16 +134,6 @@ class SoraStreamLite : SoraStream() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
invokeSeries9(
|
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
invokeIdlix(
|
invokeIdlix(
|
||||||
res.title,
|
res.title,
|
||||||
|
@ -245,6 +235,12 @@ class SoraStreamLite : SoraStream() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
if (!res.isAnime && res.season == null) invokeOmega(
|
||||||
|
res.id,
|
||||||
|
callback
|
||||||
|
)
|
||||||
|
},
|
||||||
{
|
{
|
||||||
invokeRStream(res.id, res.season, res.episode, callback)
|
invokeRStream(res.id, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue