mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
fixed nineTv
This commit is contained in:
parent
e30bce94ab
commit
063fdb6bcf
6 changed files with 9 additions and 81 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 = 24
|
version = 25
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
|
|
|
@ -106,7 +106,7 @@ object NineTv {
|
||||||
) {
|
) {
|
||||||
val mainUrl = getBaseUrl(url)
|
val mainUrl = getBaseUrl(url)
|
||||||
val res = app.get(url, referer = referer)
|
val res = app.get(url, referer = referer)
|
||||||
val master = Regex("JScript\\s*=\\s*'([^']+)").find(res.text)?.groupValues?.get(1)
|
val master = Regex("JScripts\\s*=\\s*'([^']+)").find(res.text)?.groupValues?.get(1)
|
||||||
val key = res.document.getKeys() ?: throw ErrorLoadingException("can't generate key")
|
val key = res.document.getKeys() ?: throw ErrorLoadingException("can't generate key")
|
||||||
val decrypt = AesHelper.cryptoAESHandler(master ?: return, key.toByteArray(), false)
|
val decrypt = AesHelper.cryptoAESHandler(master ?: return, key.toByteArray(), false)
|
||||||
?.replace("\\", "")
|
?.replace("\\", "")
|
||||||
|
|
|
@ -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 = 188
|
version = 189
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
|
|
|
@ -248,7 +248,7 @@ object NineTv {
|
||||||
) {
|
) {
|
||||||
val mainUrl = getBaseUrl(url)
|
val mainUrl = getBaseUrl(url)
|
||||||
val res = app.get(url, referer = referer)
|
val res = app.get(url, referer = referer)
|
||||||
val master = Regex("JScript\\s*=\\s*'([^']+)").find(res.text)?.groupValues?.get(1)
|
val master = Regex("JScripts\\s*=\\s*'([^']+)").find(res.text)?.groupValues?.get(1)
|
||||||
val key = res.document.getKeys() ?: throw ErrorLoadingException("can't generate key")
|
val key = res.document.getKeys() ?: throw ErrorLoadingException("can't generate key")
|
||||||
val decrypt = AesHelper.cryptoAESHandler(master ?: return, key.toByteArray(), false)
|
val decrypt = AesHelper.cryptoAESHandler(master ?: return, key.toByteArray(), false)
|
||||||
?.replace("\\", "")
|
?.replace("\\", "")
|
||||||
|
|
|
@ -1160,69 +1160,6 @@ object SoraExtractor : SoraStream() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun invokePobmovies(
|
|
||||||
title: String? = null, year: Int? = null, callback: (ExtractorLink) -> Unit
|
|
||||||
) {
|
|
||||||
val detailDoc = app.get("$pobmoviesAPI/${title.createSlug()}-$year").document
|
|
||||||
val iframeList = detailDoc.select("div.entry-content p").map { it }
|
|
||||||
.filter { it.text().filterIframe(year = year, title = title) }.mapNotNull {
|
|
||||||
it.text() to it.nextElementSibling()?.select("a")?.attr("href")
|
|
||||||
}.filter { it.second?.contains(Regex("(https:)|(http:)")) == true }
|
|
||||||
|
|
||||||
val sources = mutableListOf<Pair<String, String?>>()
|
|
||||||
if (iframeList.any {
|
|
||||||
it.first.contains(
|
|
||||||
"2160p", true
|
|
||||||
)
|
|
||||||
}) {
|
|
||||||
sources.addAll(iframeList.filter {
|
|
||||||
it.first.contains(
|
|
||||||
"2160p", true
|
|
||||||
)
|
|
||||||
})
|
|
||||||
sources.add(iframeList.first {
|
|
||||||
it.first.contains(
|
|
||||||
"1080p", true
|
|
||||||
)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
sources.addAll(iframeList.filter { it.first.contains("1080p", true) })
|
|
||||||
}
|
|
||||||
|
|
||||||
sources.apmap { (name, link) ->
|
|
||||||
if (link.isNullOrEmpty()) return@apmap
|
|
||||||
val videoLink = when {
|
|
||||||
link.contains("gdtot") -> {
|
|
||||||
val gdBotLink = extractGdbot(link)
|
|
||||||
extractGdflix(gdBotLink ?: return@apmap)
|
|
||||||
}
|
|
||||||
|
|
||||||
link.contains("gdflix") -> {
|
|
||||||
extractGdflix(link)
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
|
||||||
return@apmap
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val tags = getUhdTags(name)
|
|
||||||
val qualities = getIndexQuality(name)
|
|
||||||
val size = getIndexSize(name)
|
|
||||||
callback.invoke(
|
|
||||||
ExtractorLink(
|
|
||||||
"Pobmovies",
|
|
||||||
"Pobmovies $tags [${size}]",
|
|
||||||
videoLink ?: return@apmap,
|
|
||||||
"",
|
|
||||||
qualities
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun invokeHdmovies4u(
|
suspend fun invokeHdmovies4u(
|
||||||
title: String? = null,
|
title: String? = null,
|
||||||
imdbId: String? = null,
|
imdbId: String? = null,
|
||||||
|
|
|
@ -38,7 +38,6 @@ 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.invokePobmovies
|
|
||||||
import com.hexated.SoraExtractor.invokeGomovies
|
import com.hexated.SoraExtractor.invokeGomovies
|
||||||
import com.hexated.SoraExtractor.invokeMovies123
|
import com.hexated.SoraExtractor.invokeMovies123
|
||||||
import com.hexated.SoraExtractor.invokeSFMovies
|
import com.hexated.SoraExtractor.invokeSFMovies
|
||||||
|
@ -82,7 +81,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
|
|
||||||
/** ALL SOURCES */
|
/** ALL SOURCES */
|
||||||
const val twoEmbedAPI = "https://www.2embed.cc"
|
const val twoEmbedAPI = "https://www.2embed.cc"
|
||||||
const val vidSrcAPI = "https://v2.vidsrc.me"
|
const val vidSrcAPI = "https://vidsrc.me"
|
||||||
const val dbgoAPI = "https://dbgo.fun"
|
const val dbgoAPI = "https://dbgo.fun"
|
||||||
const val dreamfilmAPI = "https://dreamfilmsw.net"
|
const val dreamfilmAPI = "https://dreamfilmsw.net"
|
||||||
const val noverseAPI = "https://www.nollyverse.com"
|
const val noverseAPI = "https://www.nollyverse.com"
|
||||||
|
@ -92,7 +91,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val crunchyrollAPI = "https://beta-api.crunchyroll.com"
|
const val crunchyrollAPI = "https://beta-api.crunchyroll.com"
|
||||||
const val kissKhAPI = "https://kisskh.co"
|
const val kissKhAPI = "https://kisskh.co"
|
||||||
const val lingAPI = "https://ling-online.net"
|
const val lingAPI = "https://ling-online.net"
|
||||||
const val uhdmoviesAPI = "https://uhdmovies.click"
|
const val uhdmoviesAPI = "https://uhdmovies.dev"
|
||||||
const val gMoviesAPI = "https://gdrivemovies.xyz"
|
const val gMoviesAPI = "https://gdrivemovies.xyz"
|
||||||
const val fdMoviesAPI = "https://freedrivemovie.lol"
|
const val fdMoviesAPI = "https://freedrivemovie.lol"
|
||||||
const val m4uhdAPI = "https://ww2.m4ufree.com"
|
const val m4uhdAPI = "https://ww2.m4ufree.com"
|
||||||
|
@ -104,13 +103,12 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val smashyStreamAPI = "https://embed.smashystream.com"
|
const val smashyStreamAPI = "https://embed.smashystream.com"
|
||||||
const val watchSomuchAPI = "https://watchsomuch.tv" // sub only
|
const val watchSomuchAPI = "https://watchsomuch.tv" // sub only
|
||||||
const val watchOnlineAPI = "https://lookmovie.foundation"
|
const val watchOnlineAPI = "https://lookmovie.foundation"
|
||||||
const val nineTvAPI = "https://moviesapi.club"
|
const val nineTvAPI = "https://ww1.moviesapi.club"
|
||||||
const val nowTvAPI = "https://myfilestorage.xyz"
|
const val nowTvAPI = "https://myfilestorage.xyz"
|
||||||
const val gokuAPI = "https://goku.sx"
|
const val gokuAPI = "https://goku.sx"
|
||||||
const val ridomoviesAPI = "https://ridomovies.pw"
|
const val ridomoviesAPI = "https://ridomovies.pw"
|
||||||
const val navyAPI = "https://navy-issue-i-239.site"
|
const val navyAPI = "https://navy-issue-i-239.site"
|
||||||
const val emoviesAPI = "https://emovies.si"
|
const val emoviesAPI = "https://emovies.si"
|
||||||
const val pobmoviesAPI = "https://pobmovies.cam"
|
|
||||||
const val multimoviesAPI = "https://multimovies.info"
|
const val multimoviesAPI = "https://multimovies.info"
|
||||||
const val netmoviesAPI = "https://netmovies.to"
|
const val netmoviesAPI = "https://netmovies.to"
|
||||||
const val momentAPI = "https://moment-explanation-i-244.site"
|
const val momentAPI = "https://moment-explanation-i-244.site"
|
||||||
|
@ -120,11 +118,11 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val animetoshoAPI = "https://animetosho.org"
|
const val animetoshoAPI = "https://animetosho.org"
|
||||||
const val movies123API = "https://new-movies123.link"
|
const val movies123API = "https://new-movies123.link"
|
||||||
const val jump1API = "https://ca.jump1.net"
|
const val jump1API = "https://ca.jump1.net"
|
||||||
const val vegaMoviesAPI = "https://vegamovies.id"
|
const val vegaMoviesAPI = "https://vegamovies.zip"
|
||||||
const val hdmovies4uAPI = "https://hdmovies4u.name"
|
const val hdmovies4uAPI = "https://hdmovies4u.name"
|
||||||
const val watchflxAPI = "https://watchflx.tv"
|
const val watchflxAPI = "https://watchflx.tv"
|
||||||
const val gomoviesAPI = "https://gomovies-online.cam"
|
const val gomoviesAPI = "https://gomovies-online.cam"
|
||||||
const val dotmoviesAPI = "https://dotmovies.monster"
|
const val dotmoviesAPI = "https://dotmovies.tattoo"
|
||||||
const val blackvidAPI = "https://prod.api.blackvid.space"
|
const val blackvidAPI = "https://prod.api.blackvid.space"
|
||||||
const val showflixAPI = "https://showflix.online"
|
const val showflixAPI = "https://showflix.online"
|
||||||
const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev"
|
const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev"
|
||||||
|
@ -645,13 +643,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
if (!res.isAnime && res.season == null) invokePobmovies(
|
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
invokeMultimovies(res.title, res.season, res.episode, subtitleCallback, callback)
|
invokeMultimovies(res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue