mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
sora: fix soraextrators
This commit is contained in:
parent
f05a3cfc15
commit
0695426de9
7 changed files with 53 additions and 17 deletions
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
|
@ -55,6 +55,7 @@ jobs:
|
||||||
SFMOVIES_API: ${{ secrets.SFMOVIES_API }}
|
SFMOVIES_API: ${{ secrets.SFMOVIES_API }}
|
||||||
CINEMATV_API: ${{ secrets.CINEMATV_API }}
|
CINEMATV_API: ${{ secrets.CINEMATV_API }}
|
||||||
OMOVIES_API: ${{ secrets.OMOVIES_API }}
|
OMOVIES_API: ${{ secrets.OMOVIES_API }}
|
||||||
|
FEBBOX_API: ${{ secrets.FEBBOX_API }}
|
||||||
run: |
|
run: |
|
||||||
cd $GITHUB_WORKSPACE/src
|
cd $GITHUB_WORKSPACE/src
|
||||||
echo TMDB_API=$TMDB_API >> local.properties
|
echo TMDB_API=$TMDB_API >> local.properties
|
||||||
|
@ -70,6 +71,7 @@ jobs:
|
||||||
echo SFMOVIES_API=$SFMOVIES_API >> local.properties
|
echo SFMOVIES_API=$SFMOVIES_API >> local.properties
|
||||||
echo CINEMATV_API=$CINEMATV_API >> local.properties
|
echo CINEMATV_API=$CINEMATV_API >> local.properties
|
||||||
echo OMOVIES_API=$OMOVIES_API >> local.properties
|
echo OMOVIES_API=$OMOVIES_API >> local.properties
|
||||||
|
echo FEBBOX_API=$FEBBOX_API >> local.properties
|
||||||
|
|
||||||
- name: Build Plugins
|
- name: Build Plugins
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -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 = 206
|
version = 207
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
|
@ -9,6 +9,7 @@ android {
|
||||||
properties.load(project.rootProject.file("local.properties").inputStream())
|
properties.load(project.rootProject.file("local.properties").inputStream())
|
||||||
|
|
||||||
buildConfigField("String", "TMDB_API", "\"${properties.getProperty("TMDB_API")}\"")
|
buildConfigField("String", "TMDB_API", "\"${properties.getProperty("TMDB_API")}\"")
|
||||||
|
buildConfigField("String", "FEBBOX_API", "\"${properties.getProperty("FEBBOX_API")}\"")
|
||||||
buildConfigField("String", "OMOVIES_API", "\"${properties.getProperty("OMOVIES_API")}\"")
|
buildConfigField("String", "OMOVIES_API", "\"${properties.getProperty("OMOVIES_API")}\"")
|
||||||
buildConfigField("String", "CINEMATV_API", "\"${properties.getProperty("CINEMATV_API")}\"")
|
buildConfigField("String", "CINEMATV_API", "\"${properties.getProperty("CINEMATV_API")}\"")
|
||||||
buildConfigField("String", "SFMOVIES_API", "\"${properties.getProperty("SFMOVIES_API")}\"")
|
buildConfigField("String", "SFMOVIES_API", "\"${properties.getProperty("SFMOVIES_API")}\"")
|
||||||
|
|
|
@ -103,7 +103,6 @@ object SoraExtractor : SoraStream() {
|
||||||
id: Int? = null,
|
id: Int? = null,
|
||||||
season: Int? = null,
|
season: Int? = null,
|
||||||
episode: Int? = null,
|
episode: Int? = null,
|
||||||
subtitleCallback: (SubtitleFile) -> Unit,
|
|
||||||
callback: (ExtractorLink) -> Unit
|
callback: (ExtractorLink) -> Unit
|
||||||
) {
|
) {
|
||||||
val url = if (season == null) {
|
val url = if (season == null) {
|
||||||
|
@ -1703,7 +1702,6 @@ object SoraExtractor : SoraStream() {
|
||||||
imdbId: String? = null,
|
imdbId: String? = null,
|
||||||
season: Int? = null,
|
season: Int? = null,
|
||||||
episode: Int? = null,
|
episode: Int? = null,
|
||||||
subtitleCallback: (SubtitleFile) -> Unit,
|
|
||||||
callback: (ExtractorLink) -> Unit,
|
callback: (ExtractorLink) -> Unit,
|
||||||
) {
|
) {
|
||||||
val url = if (season == null) {
|
val url = if (season == null) {
|
||||||
|
@ -2149,8 +2147,8 @@ object SoraExtractor : SoraStream() {
|
||||||
"$blackvidAPI/v3/tv/sources/$tmdbId/$season/$episode?key=$key"
|
"$blackvidAPI/v3/tv/sources/$tmdbId/$season/$episode?key=$key"
|
||||||
}
|
}
|
||||||
|
|
||||||
val res = request(url)
|
val res = request(url).peekBody(1024 * 512)
|
||||||
val bytes = res.peekBody(1024 * 512).bytes().also { res.closeQuietly() }
|
val bytes = res.bytes().also { res.closeQuietly() }
|
||||||
val data = bytes.decrypt("2378f8e4e844f2dc839ab48f66e00acc2305a401")
|
val data = bytes.decrypt("2378f8e4e844f2dc839ab48f66e00acc2305a401")
|
||||||
val json = tryParseJson<BlackvidResponses>(data)
|
val json = tryParseJson<BlackvidResponses>(data)
|
||||||
|
|
||||||
|
@ -2260,7 +2258,6 @@ object SoraExtractor : SoraStream() {
|
||||||
}
|
}
|
||||||
|
|
||||||
val session = "PHPSESSID=ngr4cudjrimdnhkth30ssohs0n; _csrf=a6ffd7bb7654083fce6df528225a238d0e85aa1fb885dc7638c1259ec1ba0d5ca%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22mTTLiDLjxohs-CpKk0bjRH3HdYMB9uBV%22%3B%7D; _ga=GA1.1.1195498587.1701871187; _ga_VZD7HJ3WK6=GS1.1.$unixTime.4.0.1.$unixTime.0.0.0"
|
val session = "PHPSESSID=ngr4cudjrimdnhkth30ssohs0n; _csrf=a6ffd7bb7654083fce6df528225a238d0e85aa1fb885dc7638c1259ec1ba0d5ca%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22mTTLiDLjxohs-CpKk0bjRH3HdYMB9uBV%22%3B%7D; _ga=GA1.1.1195498587.1701871187; _ga_VZD7HJ3WK6=GS1.1.$unixTime.4.0.1.$unixTime.0.0.0"
|
||||||
cinemaCookiesChecker(session)
|
|
||||||
|
|
||||||
val headers = mapOf(
|
val headers = mapOf(
|
||||||
"Cookie" to session,
|
"Cookie" to session,
|
||||||
|
@ -2314,6 +2311,35 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun invokeFebbox(
|
||||||
|
imdbId: String? = null,
|
||||||
|
season: Int? = null,
|
||||||
|
episode: Int? = null,
|
||||||
|
callback: (ExtractorLink) -> Unit,
|
||||||
|
) {
|
||||||
|
val url = if (season == null) {
|
||||||
|
"$febboxAPI/stream/movie/$imdbId.json"
|
||||||
|
} else {
|
||||||
|
"$febboxAPI/stream/series/$imdbId:$season:$episode.json"
|
||||||
|
}
|
||||||
|
|
||||||
|
val res = request(url).body
|
||||||
|
val data = res.string().also { res.closeQuietly() }
|
||||||
|
val video = tryParseJson<FebboxResponse>(data)?.streams?.find { it.url?.startsWith("https://www.febbox.com") == true }?.url
|
||||||
|
|
||||||
|
callback.invoke(
|
||||||
|
ExtractorLink(
|
||||||
|
"Febbox",
|
||||||
|
"Febbox",
|
||||||
|
video ?: return,
|
||||||
|
"",
|
||||||
|
Qualities.P1080.value,
|
||||||
|
INFER_TYPE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun invokeNinetv(
|
suspend fun invokeNinetv(
|
||||||
tmdbId: Int? = null,
|
tmdbId: Int? = null,
|
||||||
season: Int? = null,
|
season: Int? = null,
|
||||||
|
|
|
@ -462,3 +462,11 @@ data class AoneroomResponse(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class FebboxResponse(
|
||||||
|
@JsonProperty("streams") val streams: ArrayList<Streams>? = arrayListOf(),
|
||||||
|
) {
|
||||||
|
data class Streams(
|
||||||
|
@JsonProperty("url") val url: String? = null,
|
||||||
|
)
|
||||||
|
}
|
|
@ -45,6 +45,7 @@ import com.hexated.SoraExtractor.invokeUhdmovies
|
||||||
import com.hexated.SoraExtractor.invokeVegamovies
|
import com.hexated.SoraExtractor.invokeVegamovies
|
||||||
import com.hexated.SoraExtractor.invokeVidsrcto
|
import com.hexated.SoraExtractor.invokeVidsrcto
|
||||||
import com.hexated.SoraExtractor.invokeCinemaTv
|
import com.hexated.SoraExtractor.invokeCinemaTv
|
||||||
|
import com.hexated.SoraExtractor.invokeFebbox
|
||||||
import com.hexated.SoraExtractor.invokeOmovies
|
import com.hexated.SoraExtractor.invokeOmovies
|
||||||
import com.hexated.SoraExtractor.invokeWatchsomuch
|
import com.hexated.SoraExtractor.invokeWatchsomuch
|
||||||
import com.hexated.SoraExtractor.invokeZshow
|
import com.hexated.SoraExtractor.invokeZshow
|
||||||
|
@ -115,6 +116,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val blackvidAPI = "https://prod.api.blackvid.space"
|
const val blackvidAPI = "https://prod.api.blackvid.space"
|
||||||
const val showflixAPI = "https://showflix.space"
|
const val showflixAPI = "https://showflix.space"
|
||||||
const val aoneroomAPI = "https://api3.aoneroom.com"
|
const val aoneroomAPI = "https://api3.aoneroom.com"
|
||||||
|
const val febboxAPI = BuildConfig.FEBBOX_API
|
||||||
|
|
||||||
const val fdMoviesAPI = "https://freedrivemovie.lol"
|
const val fdMoviesAPI = "https://freedrivemovie.lol"
|
||||||
const val uhdmoviesAPI = "https://uhdmovies.zip"
|
const val uhdmoviesAPI = "https://uhdmovies.zip"
|
||||||
|
@ -362,11 +364,10 @@ open class SoraStream : TmdbProvider() {
|
||||||
|
|
||||||
argamap(
|
argamap(
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeBlackvid(
|
if (!res.isAnime) invokeFebbox(
|
||||||
res.id,
|
res.imdbId,
|
||||||
res.season,
|
res.season,
|
||||||
res.episode,
|
res.episode,
|
||||||
subtitleCallback,
|
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
@ -392,7 +393,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeVidSrc(res.id, res.season, res.episode, subtitleCallback, callback)
|
invokeVidSrc(res.id, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
|
@ -567,7 +568,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
res.imdbId,
|
res.imdbId,
|
||||||
res.season,
|
res.season,
|
||||||
res.episode,
|
res.episode,
|
||||||
subtitleCallback,
|
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
|
@ -31,6 +31,7 @@ import com.hexated.SoraExtractor.invokeShowflix
|
||||||
import com.hexated.SoraExtractor.invokeVidSrc
|
import com.hexated.SoraExtractor.invokeVidSrc
|
||||||
import com.hexated.SoraExtractor.invokeVidsrcto
|
import com.hexated.SoraExtractor.invokeVidsrcto
|
||||||
import com.hexated.SoraExtractor.invokeCinemaTv
|
import com.hexated.SoraExtractor.invokeCinemaTv
|
||||||
|
import com.hexated.SoraExtractor.invokeFebbox
|
||||||
import com.hexated.SoraExtractor.invokeOmovies
|
import com.hexated.SoraExtractor.invokeOmovies
|
||||||
import com.hexated.SoraExtractor.invokeWatchsomuch
|
import com.hexated.SoraExtractor.invokeWatchsomuch
|
||||||
import com.hexated.SoraExtractor.invokeZshow
|
import com.hexated.SoraExtractor.invokeZshow
|
||||||
|
@ -53,11 +54,10 @@ class SoraStreamLite : SoraStream() {
|
||||||
|
|
||||||
argamap(
|
argamap(
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeBlackvid(
|
if (!res.isAnime) invokeFebbox(
|
||||||
res.id,
|
res.imdbId,
|
||||||
res.season,
|
res.season,
|
||||||
res.episode,
|
res.episode,
|
||||||
subtitleCallback,
|
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
@ -100,7 +100,7 @@ class SoraStreamLite : SoraStream() {
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeVidSrc(res.id, res.season, res.episode, subtitleCallback, callback)
|
invokeVidSrc(res.id, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
|
@ -158,7 +158,6 @@ class SoraStreamLite : SoraStream() {
|
||||||
res.imdbId,
|
res.imdbId,
|
||||||
res.season,
|
res.season,
|
||||||
res.episode,
|
res.episode,
|
||||||
subtitleCallback,
|
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
|
@ -648,7 +648,7 @@ suspend fun getTvMoviesServer(url: String, season: Int?, episode: Int?): Pair<St
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun cinemaCookiesChecker(session: String) = cinemaCookiesChecker ?: fetchCinemaCookiesChecker(session).also { cinemaCookiesChecker = it }
|
suspend fun refreshCinemaCookies(session: String) = cinemaCookiesChecker ?: fetchCinemaCookiesChecker(session).also { cinemaCookiesChecker = it }
|
||||||
|
|
||||||
suspend fun fetchCinemaCookiesChecker(session: String): Boolean {
|
suspend fun fetchCinemaCookiesChecker(session: String): Boolean {
|
||||||
val wiwiApi = base64Decode("aHR0cHM6Ly9jaW5lbWEud2l3aWNlbnRlci5jb20=")
|
val wiwiApi = base64Decode("aHR0cHM6Ly9jaW5lbWEud2l3aWNlbnRlci5jb20=")
|
||||||
|
|
Loading…
Reference in a new issue