sora: added moment
This commit is contained in:
parent
b9bcf80c2a
commit
36c6022afa
|
@ -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 = 150
|
version = 151
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
|
|
|
@ -596,16 +596,8 @@ object SoraExtractor : SoraStream() {
|
||||||
} else {
|
} else {
|
||||||
"${filmxyAPI}/tv/$imdbId"
|
"${filmxyAPI}/tv/$imdbId"
|
||||||
}
|
}
|
||||||
val filmxyCookies = getFilmxyCookies(imdbId, season) ?: return
|
val filmxyCookies = getFilmxyCookies(imdbId, season)
|
||||||
|
val doc = session.get(url, cookies = filmxyCookies).document
|
||||||
val cookies = mapOf(
|
|
||||||
"G_ENABLED_IDPS" to "google",
|
|
||||||
"wp-secure-id" to "${filmxyCookies.wpSec}",
|
|
||||||
"wp-guest-token" to "${filmxyCookies.wpGuest}",
|
|
||||||
"PHPSESSID" to "${filmxyCookies.phpsessid}"
|
|
||||||
)
|
|
||||||
|
|
||||||
val doc = session.get(url, cookies = cookies).document
|
|
||||||
val script = doc.selectFirst("script:containsData(var isSingle)")?.data() ?: return
|
val script = doc.selectFirst("script:containsData(var isSingle)")?.data() ?: return
|
||||||
|
|
||||||
val sourcesData =
|
val sourcesData =
|
||||||
|
@ -655,7 +647,7 @@ object SoraExtractor : SoraStream() {
|
||||||
"Origin" to filmxyAPI,
|
"Origin" to filmxyAPI,
|
||||||
"X-Requested-With" to "XMLHttpRequest",
|
"X-Requested-With" to "XMLHttpRequest",
|
||||||
),
|
),
|
||||||
cookies = cookies
|
cookies = filmxyCookies
|
||||||
).text.let { tryParseJson<HashMap<String, String>>(it) }
|
).text.let { tryParseJson<HashMap<String, String>>(it) }
|
||||||
|
|
||||||
sources?.map { source ->
|
sources?.map { source ->
|
||||||
|
@ -3109,18 +3101,39 @@ object SoraExtractor : SoraStream() {
|
||||||
season: Int? = null,
|
season: Int? = null,
|
||||||
episode: Int? = null,
|
episode: Int? = null,
|
||||||
callback: (ExtractorLink) -> Unit,
|
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.green", imdbId, season, episode, callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun invokeHindi(
|
||||||
|
host: String? = null,
|
||||||
|
referer: String? = null,
|
||||||
|
imdbId: String? = null,
|
||||||
|
season: Int? = null,
|
||||||
|
episode: Int? = null,
|
||||||
|
callback: (ExtractorLink) -> Unit,
|
||||||
) {
|
) {
|
||||||
val res = app.get(
|
val res = app.get(
|
||||||
"$navyAPI/play/$imdbId",
|
"$host/play/$imdbId",
|
||||||
referer = "$navyAPI/"
|
referer = "$referer/"
|
||||||
).document.selectFirst("script:containsData(player =)")?.data()?.substringAfter("{")
|
).document.selectFirst("script:containsData(player =)")?.data()?.substringAfter("{")
|
||||||
?.substringBefore(";")?.substringBefore(")")
|
?.substringBefore(";")?.substringBefore(")")
|
||||||
val json = tryParseJson<NavyPlaylist>("{${res ?: return}")
|
val json = tryParseJson<NavyPlaylist>("{${res ?: return}")
|
||||||
val headers = mapOf(
|
val headers = mapOf(
|
||||||
"X-CSRF-TOKEN" to "${json?.key}"
|
"X-CSRF-TOKEN" to "${json?.key}"
|
||||||
)
|
)
|
||||||
|
|
||||||
val serverRes = app.get(
|
val serverRes = app.get(
|
||||||
fixUrl(json?.file ?: return, navyAPI), headers = headers, referer = "$navyAPI/"
|
fixUrl(json?.file ?: return, navyAPI), headers = headers, referer = "$referer/"
|
||||||
).text.replace(Regex(""",\s*\[]"""), "")
|
).text.replace(Regex(""",\s*\[]"""), "")
|
||||||
val server = tryParseJson<ArrayList<NavyServer>>(serverRes).let { server ->
|
val server = tryParseJson<ArrayList<NavyServer>>(serverRes).let { server ->
|
||||||
if (season == null) {
|
if (season == null) {
|
||||||
|
@ -3135,15 +3148,15 @@ object SoraExtractor : SoraStream() {
|
||||||
}
|
}
|
||||||
|
|
||||||
val path = app.post(
|
val path = app.post(
|
||||||
"${navyAPI}/playlist/${server ?: return}.txt",
|
"${host}/playlist/${server ?: return}.txt",
|
||||||
headers = headers,
|
headers = headers,
|
||||||
referer = "$navyAPI/"
|
referer = "$referer/"
|
||||||
).text
|
).text
|
||||||
|
|
||||||
M3u8Helper.generateM3u8(
|
M3u8Helper.generateM3u8(
|
||||||
"Navy",
|
if(host == navyAPI) "Navy" else "Moment",
|
||||||
path,
|
path,
|
||||||
"${navyAPI}/"
|
"${referer}/"
|
||||||
).forEach(callback)
|
).forEach(callback)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ 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
|
||||||
import com.hexated.SoraExtractor.invokeFourCartoon
|
import com.hexated.SoraExtractor.invokeFourCartoon
|
||||||
|
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.invokePobmovies
|
||||||
|
@ -135,6 +136,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val fourCartoonAPI = "https://4cartoon.net"
|
const val fourCartoonAPI = "https://4cartoon.net"
|
||||||
const val multimoviesAPI = "https://multimovies.xyz"
|
const val multimoviesAPI = "https://multimovies.xyz"
|
||||||
const val netmoviesAPI = "https://netmovies.to"
|
const val netmoviesAPI = "https://netmovies.to"
|
||||||
|
const val momentAPI = "https://moment-explanation-i-244.site"
|
||||||
|
|
||||||
// INDEX SITE
|
// INDEX SITE
|
||||||
const val blackMoviesAPI = "https://dl.blacklistedbois.workers.dev/0:"
|
const val blackMoviesAPI = "https://dl.blacklistedbois.workers.dev/0:"
|
||||||
|
@ -835,6 +837,9 @@ open class SoraStream : TmdbProvider() {
|
||||||
{
|
{
|
||||||
invokeNavy(res.imdbId, res.season, res.episode, callback)
|
invokeNavy(res.imdbId, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
invokeMoment(res.imdbId, res.season, res.episode, callback)
|
||||||
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeEmovies(
|
if (!res.isAnime) invokeEmovies(
|
||||||
res.title,
|
res.title,
|
||||||
|
|
|
@ -29,6 +29,7 @@ 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
|
||||||
import com.hexated.SoraExtractor.invokeFourCartoon
|
import com.hexated.SoraExtractor.invokeFourCartoon
|
||||||
|
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.invokeVidSrc
|
import com.hexated.SoraExtractor.invokeVidSrc
|
||||||
|
@ -345,7 +346,10 @@ class SoraStreamLite : SoraStream() {
|
||||||
subtitleCallback,
|
subtitleCallback,
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
invokeMoment(res.imdbId, res.season, res.episode, callback)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -105,12 +105,6 @@ val mimeType = arrayOf(
|
||||||
"video/x-msvideo"
|
"video/x-msvideo"
|
||||||
)
|
)
|
||||||
|
|
||||||
data class FilmxyCookies(
|
|
||||||
val phpsessid: String? = null,
|
|
||||||
val wpSec: String? = null,
|
|
||||||
val wpGuest: String? = null,
|
|
||||||
)
|
|
||||||
|
|
||||||
fun String.filterIframe(
|
fun String.filterIframe(
|
||||||
seasonNum: Int? = null,
|
seasonNum: Int? = null,
|
||||||
lastSeason: Int? = null,
|
lastSeason: Int? = null,
|
||||||
|
@ -901,7 +895,7 @@ suspend fun getTvMoviesServer(url: String, season: Int?, episode: Int?): Pair<St
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getFilmxyCookies(imdbId: String? = null, season: Int? = null): FilmxyCookies? {
|
suspend fun getFilmxyCookies(imdbId: String? = null, season: Int? = null): Map<String,String> {
|
||||||
|
|
||||||
val url = if (season == null) {
|
val url = if (season == null) {
|
||||||
"${filmxyAPI}/movie/$imdbId"
|
"${filmxyAPI}/movie/$imdbId"
|
||||||
|
@ -917,7 +911,7 @@ suspend fun getFilmxyCookies(imdbId: String? = null, season: Int? = null): Filmx
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!res.isSuccessful) return FilmxyCookies()
|
if (!res.isSuccessful) return emptyMap()
|
||||||
|
|
||||||
val userNonce =
|
val userNonce =
|
||||||
res.document.select("script").find { it.data().contains("var userNonce") }?.data()?.let {
|
res.document.select("script").find { it.data().contains("var userNonce") }?.data()?.let {
|
||||||
|
@ -938,13 +932,8 @@ suspend fun getFilmxyCookies(imdbId: String? = null, season: Int? = null): Filmx
|
||||||
"X-Requested-With" to "XMLHttpRequest",
|
"X-Requested-With" to "XMLHttpRequest",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
val cookieJar = session.baseClient.cookieJar.loadForRequest(cookieUrl.toHttpUrl()).associate { it.name to it.value }.toMutableMap()
|
||||||
val cookieJar = session.baseClient.cookieJar.loadForRequest(cookieUrl.toHttpUrl())
|
return cookieJar.plus(mapOf("G_ENABLED_IDPS" to "google"))
|
||||||
phpsessid = cookieJar.first { it.name == "PHPSESSID" }.value
|
|
||||||
val wpSec = cookieJar.first { it.name == "wp-secure-id" }.value
|
|
||||||
val wpGuest = cookieJar.first { it.name == "wp-guest-token" }.value
|
|
||||||
|
|
||||||
return FilmxyCookies(phpsessid, wpSec, wpGuest)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Document.findTvMoviesIframe(): String? {
|
fun Document.findTvMoviesIframe(): String? {
|
||||||
|
|
Loading…
Reference in New Issue