mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
sora: clean series9 & cryMovies
This commit is contained in:
parent
9df7df0cd7
commit
a47811680d
6 changed files with 59 additions and 80 deletions
|
@ -1,5 +1,5 @@
|
|||
// use an integer for version numbers
|
||||
version = 121
|
||||
version = 122
|
||||
|
||||
|
||||
cloudstream {
|
||||
|
|
|
@ -45,6 +45,11 @@ class StreamhideCom : Filesim() {
|
|||
override var mainUrl: String = "https://streamhide.com"
|
||||
}
|
||||
|
||||
class Movhide : Filesim() {
|
||||
override var name: String = "Movhide"
|
||||
override var mainUrl: String = "https://movhide.pro"
|
||||
}
|
||||
|
||||
class Watchx : Chillx() {
|
||||
override val name = "Watchx"
|
||||
override val mainUrl = "https://watchx.top"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.hexated
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import com.hexated.GogoExtractor.extractVidstream
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.utils.*
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
|
||||
|
@ -157,38 +158,6 @@ object SoraExtractor : SoraStream() {
|
|||
|
||||
}
|
||||
|
||||
suspend fun invoke123Movie(
|
||||
tmdbId: Int? = null,
|
||||
imdbId: String? = null,
|
||||
season: Int? = null,
|
||||
episode: Int? = null,
|
||||
subtitleCallback: (SubtitleFile) -> Unit,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
) {
|
||||
val url = if (season == null) {
|
||||
"$movie123API/imdb.php?imdb=$imdbId&server=vcu"
|
||||
} else {
|
||||
"$movie123API/tmdb_api.php?se=$season&ep=$episode&tmdb=$tmdbId&server_name=vcu"
|
||||
}
|
||||
val iframe = app.get(url).document.selectFirst("iframe")?.attr("src") ?: return
|
||||
|
||||
val doc = app.get(
|
||||
iframe,
|
||||
referer = url,
|
||||
headers = mapOf("Accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8")
|
||||
).document
|
||||
|
||||
doc.select("ul.list-server-items li.linkserver").mapNotNull { server ->
|
||||
server.attr("data-video").let {
|
||||
Regex("(.*?)((\\?cap)|(\\?sub)|(#cap)|(#sub))").find(it)?.groupValues?.get(1)
|
||||
}
|
||||
}.apmap { link ->
|
||||
loadExtractor(
|
||||
link, "https://123moviesjr.cc/", subtitleCallback, callback
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun invokeMovieHab(
|
||||
imdbId: String? = null,
|
||||
season: Int? = null,
|
||||
|
@ -336,19 +305,31 @@ object SoraExtractor : SoraStream() {
|
|||
app.get("$series9API/film/$fixTitle-season-$season/watching.html").document
|
||||
}
|
||||
|
||||
doc.select("div#list-eps div.le-server").apmap { ele ->
|
||||
val server = if (season == null) {
|
||||
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")
|
||||
}.let { httpsify(it) }
|
||||
}
|
||||
}.find { it.contains(Regex("movembed|membed")) }
|
||||
|
||||
if (server.startsWith("https://movembed.cc")) {
|
||||
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"
|
||||
val secretDecryptKey = secretKey
|
||||
GogoExtractor.extractVidstream(
|
||||
server,
|
||||
extractVidstream(
|
||||
iframe.url,
|
||||
"Vidstream",
|
||||
callback,
|
||||
iv,
|
||||
|
@ -356,12 +337,9 @@ object SoraExtractor : SoraStream() {
|
|||
secretDecryptKey,
|
||||
isUsingAdaptiveKeys = false,
|
||||
isUsingAdaptiveData = true,
|
||||
iframeDocument = app.get(server).document
|
||||
iframeDocument = iframeDoc
|
||||
)
|
||||
} else {
|
||||
loadExtractor(server, series9API, subtitleCallback, callback)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
suspend fun invokeIdlix(
|
||||
|
@ -2983,12 +2961,26 @@ object SoraExtractor : SoraStream() {
|
|||
|
||||
suspend fun invokeCryMovies(
|
||||
imdbId: String? = null,
|
||||
title: String? = null,
|
||||
year: Int? = null,
|
||||
season: Int? = null,
|
||||
episode: Int? = null,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
) {
|
||||
app.get("$cryMoviesAPI/stream/movie/$imdbId.json")
|
||||
.parsedSafe<CryMoviesResponse>()?.streams?.map { stream ->
|
||||
.parsedSafe<CryMoviesResponse>()?.streams?.filter {
|
||||
matchingIndex(
|
||||
it.title,
|
||||
null,
|
||||
title,
|
||||
year,
|
||||
season,
|
||||
episode,
|
||||
true
|
||||
)
|
||||
}?.map { stream ->
|
||||
val quality = getIndexQuality(stream.title)
|
||||
val tags = getIndexQualityTags(stream.title, true)
|
||||
val tags = getIndexQualityTags(stream.title)
|
||||
val size = getIndexSize(stream.title)
|
||||
val headers = stream.behaviorHints?.proxyHeaders?.request ?: mapOf()
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package com.hexated
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import com.hexated.SoraExtractor.invoke123Movie
|
||||
import com.hexated.SoraExtractor.invokeAnimes
|
||||
import com.hexated.SoraExtractor.invokeAsk4Movies
|
||||
import com.hexated.SoraExtractor.invokeBlackmovies
|
||||
|
@ -90,7 +89,6 @@ open class SoraStream : TmdbProvider() {
|
|||
const val twoEmbedAPI = "https://www.2embed.to"
|
||||
const val vidSrcAPI = "https://v2.vidsrc.me"
|
||||
const val dbgoAPI = "https://dbgo.fun"
|
||||
const val movie123API = "https://api.123movie.cc"
|
||||
const val movieHabAPI = "https://moviehab.com"
|
||||
const val databaseGdriveAPI = "https://databasegdriveplayer.co"
|
||||
const val hdMovieBoxAPI = "https://hdmoviebox.net"
|
||||
|
@ -387,16 +385,6 @@ open class SoraStream : TmdbProvider() {
|
|||
{
|
||||
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||
},
|
||||
{
|
||||
invoke123Movie(
|
||||
res.id,
|
||||
res.imdbId,
|
||||
res.season,
|
||||
res.episode,
|
||||
subtitleCallback,
|
||||
callback
|
||||
)
|
||||
},
|
||||
{
|
||||
invokeMovieHab(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||
},
|
||||
|
@ -817,6 +805,10 @@ open class SoraStream : TmdbProvider() {
|
|||
{
|
||||
if(!res.isAnime && res.season == null) invokeCryMovies(
|
||||
res.imdbId,
|
||||
res.title,
|
||||
res.year,
|
||||
res.season,
|
||||
res.episode,
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.hexated
|
||||
|
||||
import com.hexated.SoraExtractor.invoke123Movie
|
||||
import com.hexated.SoraExtractor.invokeAnimes
|
||||
import com.hexated.SoraExtractor.invokeAsk4Movies
|
||||
import com.hexated.SoraExtractor.invokeCrunchyroll
|
||||
|
@ -93,16 +92,6 @@ class SoraStreamLite : SoraStream() {
|
|||
{
|
||||
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||
},
|
||||
{
|
||||
invoke123Movie(
|
||||
res.id,
|
||||
res.imdbId,
|
||||
res.season,
|
||||
res.episode,
|
||||
subtitleCallback,
|
||||
callback
|
||||
)
|
||||
},
|
||||
{
|
||||
invokeMovie123Net(
|
||||
res.title,
|
||||
|
|
|
@ -19,5 +19,6 @@ class SoraStreamPlugin: Plugin() {
|
|||
registerExtractorAPI(Chillx())
|
||||
registerExtractorAPI(Watchx())
|
||||
registerExtractorAPI(StreamhideCom())
|
||||
registerExtractorAPI(Movhide())
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue