sora: clean series9 & cryMovies

This commit is contained in:
hexated 2023-04-20 14:22:52 +07:00
parent 9df7df0cd7
commit a47811680d
6 changed files with 59 additions and 80 deletions

View File

@ -1,5 +1,5 @@
// use an integer for version numbers
version = 121
version = 122
cloudstream {

View File

@ -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"

View File

@ -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,32 +305,41 @@ 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) }
if (server.startsWith("https://movembed.cc")) {
val iv = "9225679083961858"
val secretKey = "25742532592138496744665879883281"
val secretDecryptKey = secretKey
GogoExtractor.extractVidstream(
server,
"Vidstream",
callback,
iv,
secretKey,
secretDecryptKey,
isUsingAdaptiveKeys = false,
isUsingAdaptiveData = true,
iframeDocument = app.get(server).document
)
} else {
loadExtractor(server, series9API, subtitleCallback, callback)
}
}
}.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"
val secretDecryptKey = secretKey
extractVidstream(
iframe.url,
"Vidstream",
callback,
iv,
secretKey,
secretDecryptKey,
isUsingAdaptiveKeys = false,
isUsingAdaptiveData = true,
iframeDocument = iframeDoc
)
})
}
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()

View File

@ -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
)
}

View File

@ -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,

View File

@ -19,5 +19,6 @@ class SoraStreamPlugin: Plugin() {
registerExtractorAPI(Chillx())
registerExtractorAPI(Watchx())
registerExtractorAPI(StreamhideCom())
registerExtractorAPI(Movhide())
}
}