mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
parent
bf4337aa9c
commit
638b60dd5d
5 changed files with 51 additions and 79 deletions
|
@ -1,7 +1,7 @@
|
|||
import org.jetbrains.kotlin.konan.properties.Properties
|
||||
|
||||
// use an integer for version numbers
|
||||
version = 209
|
||||
version = 210
|
||||
|
||||
android {
|
||||
defaultConfig {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.hexated
|
||||
|
||||
import com.hexated.AESGCM.decrypt
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.APIHolder.unixTime
|
||||
import com.lagradost.cloudstream3.APIHolder.unixTimeMS
|
||||
|
@ -9,7 +8,6 @@ import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
|
|||
import com.lagradost.nicehttp.Requests
|
||||
import com.lagradost.nicehttp.Session
|
||||
import com.lagradost.cloudstream3.extractors.helper.AesHelper.cryptoAESHandler
|
||||
import com.lagradost.cloudstream3.network.CloudflareKiller
|
||||
import com.lagradost.nicehttp.RequestBodyTypes
|
||||
import kotlinx.coroutines.delay
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
|
@ -294,7 +292,7 @@ object SoraExtractor : SoraStream() {
|
|||
}?.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",
|
||||
"$aoneroomAPI/wefeed-mobile-bff/subject-api/resource?subjectId=${subjectId ?: return}&page=1&perPage=20&all=0&startPosition=1&endPosition=1&pagerMode=0&resolution=480",
|
||||
headers = headers
|
||||
).parsedSafe<AoneroomResponse>()?.data?.list?.findLast {
|
||||
it.se == (season ?: 0) && it.ep == (episode ?: 0)
|
||||
|
@ -1229,7 +1227,7 @@ object SoraExtractor : SoraStream() {
|
|||
val selector =
|
||||
if (season == null) "p a:contains(V-Cloud)" else "h4:matches(0?$episode) + p a:contains(V-Cloud)"
|
||||
val server = app.get(
|
||||
href ?: return, interceptor = CloudflareKiller()
|
||||
href ?: return, interceptor = wpredisInterceptor
|
||||
).document.selectFirst("div.entry-content > $selector")
|
||||
?.attr("href") ?: return
|
||||
|
||||
|
@ -1695,9 +1693,9 @@ object SoraExtractor : SoraStream() {
|
|||
imdbId: String? = null,
|
||||
season: Int? = null,
|
||||
episode: Int? = null,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
callback: (ExtractorLink) -> Unit,
|
||||
onionUrl: String = "https://onionplay.se/"
|
||||
) {
|
||||
val onionUrl = "https://onionplay.se/"
|
||||
val request = if (season == null) {
|
||||
val res = app.get("$flixonAPI/$imdbId", referer = onionUrl)
|
||||
if (res.text.contains("BEGIN PGP SIGNED MESSAGE")) app.get(
|
||||
|
@ -2319,13 +2317,10 @@ object SoraExtractor : SoraStream() {
|
|||
lastSeason: Int? = null,
|
||||
episode: Int? = null,
|
||||
callback: (ExtractorLink) -> Unit,
|
||||
showboxApi: String = "https://www.showbox.media"
|
||||
) {
|
||||
|
||||
val showboxApi = "https://www.showbox.media"
|
||||
val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode)
|
||||
|
||||
val res = app.get("$showboxApi/search?keyword=$title").document
|
||||
|
||||
val res = app.get("$showboxApi/search?keyword=$title", interceptor = showboxInterceptor).document
|
||||
val mediaRes = res.select("div.film_list-wrap div.flw-item").map {
|
||||
ShowboxMedia(
|
||||
it.select("h2.film-name a").attr("href"),
|
||||
|
@ -2350,7 +2345,7 @@ object SoraExtractor : SoraStream() {
|
|||
val shareId = media?.url?.substringAfterLast("/") ?: return
|
||||
|
||||
val shareKey =
|
||||
app.get("$showboxApi/index/share_link?id=${shareId}&type=${if (season == null) "1" else "2"}")
|
||||
app.get("$showboxApi/index/share_link?id=${shareId}&type=${if (season == null) "1" else "2"}", interceptor = showboxInterceptor)
|
||||
.parsedSafe<FebboxResponse>()?.data?.link?.substringAfterLast("/")
|
||||
|
||||
val headers = mapOf("Accept-Language" to "en")
|
||||
|
@ -2417,9 +2412,9 @@ object SoraExtractor : SoraStream() {
|
|||
imdbId: String? = null,
|
||||
season: Int? = null,
|
||||
episode: Int? = null,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
callback: (ExtractorLink) -> Unit,
|
||||
referer: String = "https://bflix.gs/"
|
||||
) {
|
||||
val referer = "https://bflix.gs/"
|
||||
val slug = getEpisodeSlug(season, episode)
|
||||
var url =
|
||||
if (season == null) "$nowTvAPI/$tmdbId.mp4" else "$nowTvAPI/tv/$tmdbId/s${season}e${slug.second}.mp4"
|
||||
|
@ -2472,63 +2467,45 @@ object SoraExtractor : SoraStream() {
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun invokeNavy(
|
||||
imdbId: String? = null,
|
||||
season: Int? = null,
|
||||
episode: Int? = null,
|
||||
callback: (ExtractorLink) -> Unit,
|
||||
) {
|
||||
invokeHindi(navyAPI, navyAPI, imdbId, season, episode, callback)
|
||||
}
|
||||
|
||||
suspend fun invokeMoment(
|
||||
imdbId: String? = null,
|
||||
season: Int? = null,
|
||||
episode: Int? = null,
|
||||
callback: (ExtractorLink) -> Unit,
|
||||
) {
|
||||
invokeHindi(momentAPI, "https://hdmovies4u.band", imdbId, season, episode, callback)
|
||||
}
|
||||
|
||||
private suspend fun invokeHindi(
|
||||
host: String? = null,
|
||||
referer: String? = null,
|
||||
suspend fun invokeAllMovieland(
|
||||
imdbId: String? = null,
|
||||
season: Int? = null,
|
||||
episode: Int? = null,
|
||||
callback: (ExtractorLink) -> Unit,
|
||||
host: String = "https://esh-bostewsom-i-273.site",
|
||||
) {
|
||||
val res = app.get(
|
||||
"$host/play/$imdbId", referer = "$referer/"
|
||||
"$host/play/$imdbId", referer = "$allmovielandAPI/"
|
||||
).document.selectFirst("script:containsData(player =)")?.data()?.substringAfter("{")
|
||||
?.substringBefore(";")?.substringBefore(")")
|
||||
val json = tryParseJson<NavyPlaylist>("{${res ?: return}")
|
||||
val json = tryParseJson<AllMovielandPlaylist>("{${res ?: return}")
|
||||
val headers = mapOf(
|
||||
"X-CSRF-TOKEN" to "${json?.key}"
|
||||
)
|
||||
|
||||
val serverRes = app.get(
|
||||
fixUrl(json?.file ?: return, navyAPI), headers = headers, referer = "$referer/"
|
||||
fixUrl(json?.file ?: return, host), headers = headers, referer = "$allmovielandAPI/"
|
||||
).text.replace(Regex(""",\s*\[]"""), "")
|
||||
val server = tryParseJson<ArrayList<NavyServer>>(serverRes).let { server ->
|
||||
val servers = tryParseJson<ArrayList<AllMovielandServer>>(serverRes).let { server ->
|
||||
if (season == null) {
|
||||
server?.find { it.title == "English" }?.file
|
||||
server?.map { it.file to it.title }
|
||||
} else {
|
||||
server?.find { it.id.equals("$season") }?.folder?.find { it.episode.equals("$episode") }?.folder?.find {
|
||||
it.title.equals(
|
||||
"English"
|
||||
)
|
||||
}?.file
|
||||
server?.find { it.id.equals("$season") }?.folder?.find { it.episode.equals("$episode") }?.folder?.map {
|
||||
it.file to it.title
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
servers?.apmap { (server, lang) ->
|
||||
val path = app.post(
|
||||
"${host}/playlist/${server ?: return}.txt", headers = headers, referer = "$referer/"
|
||||
"${host}/playlist/${server ?: return@apmap}.txt", headers = headers, referer = "$allmovielandAPI/"
|
||||
).text
|
||||
|
||||
M3u8Helper.generateM3u8(
|
||||
if (host == navyAPI) "Navy" else "Moment", path, "${referer}/"
|
||||
"Allmovieland [$lang]",
|
||||
path,
|
||||
"$allmovielandAPI/"
|
||||
).forEach(callback)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -269,26 +269,26 @@ data class GokuServer(
|
|||
@JsonProperty("data") val data: GokuData? = GokuData(),
|
||||
)
|
||||
|
||||
data class NavyEpisodeFolder(
|
||||
data class AllMovielandEpisodeFolder(
|
||||
@JsonProperty("title") val title: String? = null,
|
||||
@JsonProperty("id") val id: String? = null,
|
||||
@JsonProperty("file") val file: String? = null,
|
||||
)
|
||||
|
||||
data class NavySeasonFolder(
|
||||
data class AllMovielandSeasonFolder(
|
||||
@JsonProperty("episode") val episode: String? = null,
|
||||
@JsonProperty("id") val id: String? = null,
|
||||
@JsonProperty("folder") val folder: ArrayList<NavyEpisodeFolder>? = arrayListOf(),
|
||||
@JsonProperty("folder") val folder: ArrayList<AllMovielandEpisodeFolder>? = arrayListOf(),
|
||||
)
|
||||
|
||||
data class NavyServer(
|
||||
data class AllMovielandServer(
|
||||
@JsonProperty("title") val title: String? = null,
|
||||
@JsonProperty("id") val id: String? = null,
|
||||
@JsonProperty("file") val file: String? = null,
|
||||
@JsonProperty("folder") val folder: ArrayList<NavySeasonFolder>? = arrayListOf(),
|
||||
@JsonProperty("folder") val folder: ArrayList<AllMovielandSeasonFolder>? = arrayListOf(),
|
||||
)
|
||||
|
||||
data class NavyPlaylist(
|
||||
data class AllMovielandPlaylist(
|
||||
@JsonProperty("file") val file: String? = null,
|
||||
@JsonProperty("key") val key: String? = null,
|
||||
@JsonProperty("href") val href: String? = null,
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.hexated
|
|||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import com.hexated.SoraExtractor.invoke2embed
|
||||
import com.hexated.SoraExtractor.invokeAllMovieland
|
||||
import com.hexated.SoraExtractor.invokeAnimes
|
||||
import com.hexated.SoraExtractor.invokeAoneroom
|
||||
import com.hexated.SoraExtractor.invokeBollyMaza
|
||||
|
@ -25,7 +26,6 @@ import com.hexated.SoraExtractor.invokeKisskh
|
|||
import com.hexated.SoraExtractor.invokeLing
|
||||
import com.hexated.SoraExtractor.invokeM4uhd
|
||||
import com.hexated.SoraExtractor.invokeMoviezAdd
|
||||
import com.hexated.SoraExtractor.invokeNavy
|
||||
import com.hexated.SoraExtractor.invokeNinetv
|
||||
import com.hexated.SoraExtractor.invokeNowTv
|
||||
import com.hexated.SoraExtractor.invokeRStream
|
||||
|
@ -34,7 +34,6 @@ import com.hexated.SoraExtractor.invokeSmashyStream
|
|||
import com.hexated.SoraExtractor.invokeDumpStream
|
||||
import com.hexated.SoraExtractor.invokeEmovies
|
||||
import com.hexated.SoraExtractor.invokeHdmovies4u
|
||||
import com.hexated.SoraExtractor.invokeMoment
|
||||
import com.hexated.SoraExtractor.invokeMultimovies
|
||||
import com.hexated.SoraExtractor.invokeNetmovies
|
||||
import com.hexated.SoraExtractor.invokeSFMovies
|
||||
|
@ -51,6 +50,7 @@ import com.hexated.SoraExtractor.invokeWatchsomuch
|
|||
import com.hexated.SoraExtractor.invokeZshow
|
||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addImdbId
|
||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addTMDbId
|
||||
import com.lagradost.cloudstream3.network.CloudflareKiller
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.toJson
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
|
@ -68,6 +68,9 @@ open class SoraStream : TmdbProvider() {
|
|||
TvType.Anime,
|
||||
)
|
||||
|
||||
val showboxInterceptor by lazy { CloudflareKiller() }
|
||||
val wpredisInterceptor by lazy { CloudflareKiller() }
|
||||
|
||||
/** AUTHOR : Hexated & Sora */
|
||||
companion object {
|
||||
/** TOOLS */
|
||||
|
@ -102,12 +105,11 @@ open class SoraStream : TmdbProvider() {
|
|||
const val gokuAPI = "https://goku.sx"
|
||||
const val zshowAPI = BuildConfig.ZSHOW_API
|
||||
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.top"
|
||||
const val multimovies2API = "https://multimovies.click"
|
||||
const val netmoviesAPI = "https://netmovies.to"
|
||||
const val momentAPI = "https://izzillent-dickstonyx-i-262.site"
|
||||
const val allmovielandAPI = "https://allmovieland.fun"
|
||||
const val doomoviesAPI = "https://doomovies.net"
|
||||
const val vidsrctoAPI = "https://vidsrc.to"
|
||||
const val dramadayAPI = "https://dramaday.me"
|
||||
|
@ -121,7 +123,7 @@ open class SoraStream : TmdbProvider() {
|
|||
const val fdMoviesAPI = "https://freedrivemovie.com"
|
||||
const val uhdmoviesAPI = "https://uhdmovies.zip"
|
||||
const val gMoviesAPI = "https://gdrivemovies.xyz"
|
||||
const val hdmovies4uAPI = "https://hdmovies4u.band"
|
||||
const val hdmovies4uAPI = "https://hdmovies4u.dad"
|
||||
const val vegaMoviesAPI = "https://vegamovies.dad"
|
||||
const val dotmoviesAPI = "https://dotmovies.bet"
|
||||
const val tvMoviesAPI = "https://www.tvseriesnmovies.com"
|
||||
|
@ -632,10 +634,7 @@ open class SoraStream : TmdbProvider() {
|
|||
)
|
||||
},
|
||||
{
|
||||
invokeNavy(res.imdbId, res.season, res.episode, callback)
|
||||
},
|
||||
{
|
||||
invokeMoment(res.imdbId, res.season, res.episode, callback)
|
||||
if (!res.isAnime) invokeAllMovieland(res.imdbId, res.season, res.episode, callback)
|
||||
},
|
||||
{
|
||||
if (!res.isAnime) invokeEmovies(
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.hexated
|
||||
|
||||
import com.hexated.SoraExtractor.invoke2embed
|
||||
import com.hexated.SoraExtractor.invokeAllMovieland
|
||||
import com.hexated.SoraExtractor.invokeAnimes
|
||||
import com.hexated.SoraExtractor.invokeAoneroom
|
||||
import com.hexated.SoraExtractor.invokeDbgo
|
||||
|
@ -14,7 +15,6 @@ import com.hexated.SoraExtractor.invokeKimcartoon
|
|||
import com.hexated.SoraExtractor.invokeKisskh
|
||||
import com.hexated.SoraExtractor.invokeLing
|
||||
import com.hexated.SoraExtractor.invokeM4uhd
|
||||
import com.hexated.SoraExtractor.invokeNavy
|
||||
import com.hexated.SoraExtractor.invokeNinetv
|
||||
import com.hexated.SoraExtractor.invokeNowTv
|
||||
import com.hexated.SoraExtractor.invokeRStream
|
||||
|
@ -22,7 +22,6 @@ import com.hexated.SoraExtractor.invokeRidomovies
|
|||
import com.hexated.SoraExtractor.invokeSmashyStream
|
||||
import com.hexated.SoraExtractor.invokeDumpStream
|
||||
import com.hexated.SoraExtractor.invokeEmovies
|
||||
import com.hexated.SoraExtractor.invokeMoment
|
||||
import com.hexated.SoraExtractor.invokeMultimovies
|
||||
import com.hexated.SoraExtractor.invokeNetmovies
|
||||
import com.hexated.SoraExtractor.invokeSFMovies
|
||||
|
@ -244,9 +243,6 @@ class SoraStreamLite : SoraStream() {
|
|||
callback
|
||||
)
|
||||
},
|
||||
{
|
||||
invokeNavy(res.imdbId, res.season, res.episode, callback)
|
||||
},
|
||||
{
|
||||
if (!res.isAnime && res.season == null) invokeRidomovies(
|
||||
res.id,
|
||||
|
@ -281,7 +277,7 @@ class SoraStreamLite : SoraStream() {
|
|||
)
|
||||
},
|
||||
{
|
||||
invokeMoment(res.imdbId, res.season, res.episode, callback)
|
||||
if (!res.isAnime) invokeAllMovieland(res.imdbId, res.season, res.episode, callback)
|
||||
},
|
||||
{
|
||||
if (!res.isAnime && res.season == null) invokeDoomovies(
|
||||
|
|
Loading…
Reference in a new issue