mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
fixed #216
This commit is contained in:
parent
c2c1445a95
commit
f0ffa72c1f
6 changed files with 6 additions and 169 deletions
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
|
@ -56,7 +56,6 @@ jobs:
|
||||||
ANICHI_APP: ${{ secrets.ANICHI_APP }}
|
ANICHI_APP: ${{ secrets.ANICHI_APP }}
|
||||||
PRIMEWIRE_KEY: ${{ secrets.PRIMEWIRE_KEY }}
|
PRIMEWIRE_KEY: ${{ secrets.PRIMEWIRE_KEY }}
|
||||||
ZSHOW_API: ${{ secrets.ZSHOW_API }}
|
ZSHOW_API: ${{ secrets.ZSHOW_API }}
|
||||||
VATIC_API: ${{ secrets.VATIC_API }}
|
|
||||||
run: |
|
run: |
|
||||||
cd $GITHUB_WORKSPACE/src
|
cd $GITHUB_WORKSPACE/src
|
||||||
echo SORA_API=$SORA_API >> local.properties
|
echo SORA_API=$SORA_API >> local.properties
|
||||||
|
@ -73,7 +72,6 @@ jobs:
|
||||||
echo ANICHI_APP=$ANICHI_APP >> local.properties
|
echo ANICHI_APP=$ANICHI_APP >> local.properties
|
||||||
echo PRIMEWIRE_KEY=$PRIMEWIRE_KEY >> local.properties
|
echo PRIMEWIRE_KEY=$PRIMEWIRE_KEY >> local.properties
|
||||||
echo ZSHOW_API=$ZSHOW_API >> local.properties
|
echo ZSHOW_API=$ZSHOW_API >> local.properties
|
||||||
echo VATIC_API=$VATIC_API >> local.properties
|
|
||||||
|
|
||||||
- name: Build Plugins
|
- name: Build Plugins
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
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 = 182
|
version = 183
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
val properties = Properties()
|
val properties = Properties()
|
||||||
properties.load(project.rootProject.file("local.properties").inputStream())
|
properties.load(project.rootProject.file("local.properties").inputStream())
|
||||||
|
|
||||||
buildConfigField("String", "VATIC_API", "\"${properties.getProperty("VATIC_API")}\"")
|
|
||||||
buildConfigField("String", "ZSHOW_API", "\"${properties.getProperty("ZSHOW_API")}\"")
|
buildConfigField("String", "ZSHOW_API", "\"${properties.getProperty("ZSHOW_API")}\"")
|
||||||
buildConfigField("String", "SORA_API", "\"${properties.getProperty("SORA_API")}\"")
|
buildConfigField("String", "SORA_API", "\"${properties.getProperty("SORA_API")}\"")
|
||||||
buildConfigField("String", "SORAHE", "\"${properties.getProperty("SORAHE")}\"")
|
buildConfigField("String", "SORAHE", "\"${properties.getProperty("SORAHE")}\"")
|
||||||
|
|
|
@ -1278,7 +1278,7 @@ object SoraExtractor : SoraStream() {
|
||||||
it.select("img").attr("src")
|
it.select("img").attr("src")
|
||||||
)
|
)
|
||||||
}.filter {
|
}.filter {
|
||||||
it.quality.contains(Regex("(?i)(1080p|4k)")) && it.type.contains(Regex("(gdtot|oiya)"))
|
it.quality.contains(Regex("(?i)(1080p|4k)")) && it.type.contains(Regex("(gdtot|oiya|rarbgx)"))
|
||||||
}
|
}
|
||||||
iframe.apmap { (link, quality, size, type) ->
|
iframe.apmap { (link, quality, size, type) ->
|
||||||
val qualities = getFDoviesQuality(quality)
|
val qualities = getFDoviesQuality(quality)
|
||||||
|
@ -1289,7 +1289,7 @@ object SoraExtractor : SoraStream() {
|
||||||
extractGdflix(gdBotLink ?: return@apmap null)
|
extractGdflix(gdBotLink ?: return@apmap null)
|
||||||
}
|
}
|
||||||
|
|
||||||
type.contains("oiya") -> {
|
type.contains("oiya") || type.contains("rarbgx") -> {
|
||||||
val oiyaLink = extractOiya(fdLink ?: return@apmap null, qualities)
|
val oiyaLink = extractOiya(fdLink ?: return@apmap null, qualities)
|
||||||
if (oiyaLink?.contains("gdtot") == true) {
|
if (oiyaLink?.contains("gdtot") == true) {
|
||||||
val gdBotLink = extractGdbot(oiyaLink)
|
val gdBotLink = extractGdbot(oiyaLink)
|
||||||
|
@ -1602,12 +1602,12 @@ object SoraExtractor : SoraStream() {
|
||||||
"$rStreamAPI/e/?tmdb=$id&s=$season&e=$episode"
|
"$rStreamAPI/e/?tmdb=$id&s=$season&e=$episode"
|
||||||
}
|
}
|
||||||
|
|
||||||
val res = app.get(url, referer = "https://watcha.movie/").text
|
val res = app.get("$url&apikey=whXgvN4kVyoubGwqXpw26Oy3PVryl8dm", referer = "https://watcha.movie/").text
|
||||||
val link = Regex("\"file\":\"(http.*?)\"").find(res)?.groupValues?.getOrNull(1) ?: return
|
val link = Regex("\"file\":\"(http.*?)\"").find(res)?.groupValues?.getOrNull(1) ?: return
|
||||||
|
|
||||||
callback.invoke(
|
callback.invoke(
|
||||||
ExtractorLink(
|
ExtractorLink(
|
||||||
"RStream", "RStream", link, rStreamAPI, Qualities.P720.value, INFER_TYPE
|
"RStream", "RStream", link, "$rStreamAPI/", Qualities.P720.value, INFER_TYPE
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -2305,43 +2305,6 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun invokeCryMovies(
|
|
||||||
imdbId: String? = null,
|
|
||||||
title: String? = null,
|
|
||||||
year: Int? = null,
|
|
||||||
episode: Int? = null,
|
|
||||||
callback: (ExtractorLink) -> Unit
|
|
||||||
) {
|
|
||||||
app.get("${cryMoviesAPI}/stream/movie/$imdbId.json")
|
|
||||||
.parsedSafe<CryMoviesResponse>()?.streams?.filter {
|
|
||||||
matchingIndex(
|
|
||||||
it.title, null, title, year, null, episode, false
|
|
||||||
)
|
|
||||||
}?.apmap { stream ->
|
|
||||||
val quality = getIndexQuality(stream.title)
|
|
||||||
val tags = getIndexQualityTags(stream.title)
|
|
||||||
val size = getIndexSize(stream.title)
|
|
||||||
val headers = stream.behaviorHints?.proxyHeaders?.request ?: mapOf()
|
|
||||||
|
|
||||||
if (!app.get(
|
|
||||||
stream.url ?: return@apmap, headers = headers
|
|
||||||
).isSuccessful
|
|
||||||
) return@apmap
|
|
||||||
|
|
||||||
callback.invoke(
|
|
||||||
ExtractorLink(
|
|
||||||
"CryMovies",
|
|
||||||
"CryMovies $tags [${size}]",
|
|
||||||
stream.url,
|
|
||||||
"",
|
|
||||||
quality,
|
|
||||||
headers = headers
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun invokeNowTv(
|
suspend fun invokeNowTv(
|
||||||
tmdbId: Int? = null,
|
tmdbId: Int? = null,
|
||||||
season: Int? = null,
|
season: Int? = null,
|
||||||
|
@ -2554,47 +2517,5 @@ object SoraExtractor : SoraStream() {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun invokeVatic(
|
|
||||||
tmdbId: Int? = null,
|
|
||||||
season: Int? = null,
|
|
||||||
episode: Int? = null,
|
|
||||||
subtitleCallback: (SubtitleFile) -> Unit,
|
|
||||||
callback: (ExtractorLink) -> Unit,
|
|
||||||
) {
|
|
||||||
val vaticAPI = BuildConfig.VATIC_API
|
|
||||||
val url = if (season == null) {
|
|
||||||
"$vaticAPI/api/movie?id=$tmdbId"
|
|
||||||
} else {
|
|
||||||
"$vaticAPI/api/tv?id=$tmdbId&s=$season&e=$episode"
|
|
||||||
}
|
|
||||||
|
|
||||||
val res = app.get(
|
|
||||||
url
|
|
||||||
).parsedSafe<VaticSources>()
|
|
||||||
|
|
||||||
res?.qualities?.map { source ->
|
|
||||||
callback.invoke(
|
|
||||||
ExtractorLink(
|
|
||||||
"Vatic",
|
|
||||||
"Vatic",
|
|
||||||
source.path ?: return@map,
|
|
||||||
"$vaticAPI/",
|
|
||||||
if(source.quality.equals("auto", true)) Qualities.P1080.value else getQualityFromName(source.quality),
|
|
||||||
INFER_TYPE
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
res?.srtfiles?.map { sub ->
|
|
||||||
subtitleCallback.invoke(
|
|
||||||
SubtitleFile(
|
|
||||||
sub.caption ?: return@map,
|
|
||||||
sub.url ?: return@map,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -183,25 +183,6 @@ data class WatchOnlineResponse(
|
||||||
@JsonProperty("subtitles") val subtitles: ArrayList<WatchOnlineSubtitles>? = arrayListOf(),
|
@JsonProperty("subtitles") val subtitles: ArrayList<WatchOnlineSubtitles>? = arrayListOf(),
|
||||||
)
|
)
|
||||||
|
|
||||||
data class CryMoviesProxyHeaders(
|
|
||||||
@JsonProperty("request") val request: Map<String, String>?,
|
|
||||||
)
|
|
||||||
|
|
||||||
data class CryMoviesBehaviorHints(
|
|
||||||
@JsonProperty("proxyHeaders") val proxyHeaders: CryMoviesProxyHeaders?,
|
|
||||||
)
|
|
||||||
|
|
||||||
data class CryMoviesStream(
|
|
||||||
@JsonProperty("title") val title: String? = null,
|
|
||||||
@JsonProperty("url") val url: String? = null,
|
|
||||||
@JsonProperty("description") val description: String? = null,
|
|
||||||
@JsonProperty("behaviorHints") val behaviorHints: CryMoviesBehaviorHints? = null,
|
|
||||||
)
|
|
||||||
|
|
||||||
data class CryMoviesResponse(
|
|
||||||
@JsonProperty("streams") val streams: List<CryMoviesStream>? = null,
|
|
||||||
)
|
|
||||||
|
|
||||||
data class FmoviesSubtitles(
|
data class FmoviesSubtitles(
|
||||||
@JsonProperty("label") val label: String? = null,
|
@JsonProperty("label") val label: String? = null,
|
||||||
@JsonProperty("file") val file: String? = null,
|
@JsonProperty("file") val file: String? = null,
|
||||||
|
@ -401,18 +382,3 @@ data class ShowflixSearchMovies(
|
||||||
data class ShowflixSearchSeries(
|
data class ShowflixSearchSeries(
|
||||||
@JsonProperty("results") val resultsSeries: ArrayList<ShowflixResultsSeries>? = arrayListOf(),
|
@JsonProperty("results") val resultsSeries: ArrayList<ShowflixResultsSeries>? = arrayListOf(),
|
||||||
)
|
)
|
||||||
|
|
||||||
data class VaticSrtfiles(
|
|
||||||
@JsonProperty("caption") var caption: String? = null,
|
|
||||||
@JsonProperty("url") var url: String? = null,
|
|
||||||
)
|
|
||||||
|
|
||||||
data class VaticQualities(
|
|
||||||
@JsonProperty("path") var path: String? = null,
|
|
||||||
@JsonProperty("quality") var quality: String? = null,
|
|
||||||
)
|
|
||||||
|
|
||||||
data class VaticSources(
|
|
||||||
@JsonProperty("Qualities") var qualities: ArrayList<VaticQualities> = arrayListOf(),
|
|
||||||
@JsonProperty("Srtfiles") var srtfiles: ArrayList<VaticSrtfiles> = arrayListOf(),
|
|
||||||
)
|
|
|
@ -5,7 +5,6 @@ import com.hexated.SoraExtractor.invoke2embed
|
||||||
import com.hexated.SoraExtractor.invokeAnimes
|
import com.hexated.SoraExtractor.invokeAnimes
|
||||||
import com.hexated.SoraExtractor.invokeBlackvid
|
import com.hexated.SoraExtractor.invokeBlackvid
|
||||||
import com.hexated.SoraExtractor.invokeBollyMaza
|
import com.hexated.SoraExtractor.invokeBollyMaza
|
||||||
import com.hexated.SoraExtractor.invokeCryMovies
|
|
||||||
import com.hexated.SoraExtractor.invokeDbgo
|
import com.hexated.SoraExtractor.invokeDbgo
|
||||||
import com.hexated.SoraExtractor.invokeFilmxy
|
import com.hexated.SoraExtractor.invokeFilmxy
|
||||||
import com.hexated.SoraExtractor.invokeKimcartoon
|
import com.hexated.SoraExtractor.invokeKimcartoon
|
||||||
|
@ -31,7 +30,6 @@ import com.hexated.SoraExtractor.invokeNinetv
|
||||||
import com.hexated.SoraExtractor.invokeNowTv
|
import com.hexated.SoraExtractor.invokeNowTv
|
||||||
import com.hexated.SoraExtractor.invokeRStream
|
import com.hexated.SoraExtractor.invokeRStream
|
||||||
import com.hexated.SoraExtractor.invokeRidomovies
|
import com.hexated.SoraExtractor.invokeRidomovies
|
||||||
import com.hexated.SoraExtractor.invokeShinobiMovies
|
|
||||||
import com.hexated.SoraExtractor.invokeSmashyStream
|
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
|
||||||
|
@ -46,7 +44,6 @@ import com.hexated.SoraExtractor.invokePutactor
|
||||||
import com.hexated.SoraExtractor.invokeShowflix
|
import com.hexated.SoraExtractor.invokeShowflix
|
||||||
import com.hexated.SoraExtractor.invokeTvMovies
|
import com.hexated.SoraExtractor.invokeTvMovies
|
||||||
import com.hexated.SoraExtractor.invokeUhdmovies
|
import com.hexated.SoraExtractor.invokeUhdmovies
|
||||||
import com.hexated.SoraExtractor.invokeVatic
|
|
||||||
import com.hexated.SoraExtractor.invokeVegamovies
|
import com.hexated.SoraExtractor.invokeVegamovies
|
||||||
import com.hexated.SoraExtractor.invokeVidsrcto
|
import com.hexated.SoraExtractor.invokeVidsrcto
|
||||||
import com.hexated.SoraExtractor.invokeWatchOnline
|
import com.hexated.SoraExtractor.invokeWatchOnline
|
||||||
|
@ -103,7 +100,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val tvMoviesAPI = "https://www.tvseriesnmovies.com"
|
const val tvMoviesAPI = "https://www.tvseriesnmovies.com"
|
||||||
const val moviezAddAPI = "https://ww3.moviezaddiction.click"
|
const val moviezAddAPI = "https://ww3.moviezaddiction.click"
|
||||||
const val bollyMazaAPI = "https://ww3.bollymaza.click"
|
const val bollyMazaAPI = "https://ww3.bollymaza.click"
|
||||||
const val rStreamAPI = "https://remotestre.am"
|
const val rStreamAPI = "https://remotestream.cc"
|
||||||
const val flixonAPI = "https://flixon.lol"
|
const val flixonAPI = "https://flixon.lol"
|
||||||
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
|
||||||
|
@ -131,12 +128,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val dotmoviesAPI = "https://dotmovies.monster"
|
const val dotmoviesAPI = "https://dotmovies.monster"
|
||||||
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"
|
||||||
|
|
||||||
// INDEX SITE
|
|
||||||
const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev"
|
const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev"
|
||||||
const val shinobiMovieAPI = "https://home.shinobicloud.cf/0:"
|
|
||||||
val cryMoviesAPI =
|
|
||||||
base64DecodeAPI("ZXY=LmQ=cnM=a2U=b3I=Lnc=ZXI=ZGQ=bGE=cy0=b2I=YWM=Lmo=YWw=aW4=LWY=cm4=Ym8=cmU=Ly8=czo=dHA=aHQ=")
|
|
||||||
|
|
||||||
fun getType(t: String?): TvType {
|
fun getType(t: String?): TvType {
|
||||||
return when (t) {
|
return when (t) {
|
||||||
|
@ -585,17 +577,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokePutactor(res.title, res.year, res.season, res.episode, callback)
|
if (!res.isAnime) invokePutactor(res.title, res.year, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
if (!res.isAnime) invokeShinobiMovies(
|
|
||||||
shinobiMovieAPI,
|
|
||||||
"ShinobiMovies",
|
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
invokeWatchOnline(
|
invokeWatchOnline(
|
||||||
res.imdbId,
|
res.imdbId,
|
||||||
|
@ -607,15 +588,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
if (!res.isAnime && res.season == null) invokeCryMovies(
|
|
||||||
res.imdbId,
|
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.episode,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeNowTv(res.id, res.season, res.episode, callback)
|
if (!res.isAnime) invokeNowTv(res.id, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
|
@ -753,15 +725,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
if (!res.isAnime) invokeVatic(
|
|
||||||
res.id,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -29,7 +29,6 @@ import com.hexated.SoraExtractor.invokeNetmovies
|
||||||
import com.hexated.SoraExtractor.invokeGomovies
|
import com.hexated.SoraExtractor.invokeGomovies
|
||||||
import com.hexated.SoraExtractor.invokePutactor
|
import com.hexated.SoraExtractor.invokePutactor
|
||||||
import com.hexated.SoraExtractor.invokeShowflix
|
import com.hexated.SoraExtractor.invokeShowflix
|
||||||
import com.hexated.SoraExtractor.invokeVatic
|
|
||||||
import com.hexated.SoraExtractor.invokeVidSrc
|
import com.hexated.SoraExtractor.invokeVidSrc
|
||||||
import com.hexated.SoraExtractor.invokeVidsrcto
|
import com.hexated.SoraExtractor.invokeVidsrcto
|
||||||
import com.hexated.SoraExtractor.invokeWatchOnline
|
import com.hexated.SoraExtractor.invokeWatchOnline
|
||||||
|
@ -312,15 +311,6 @@ class SoraStreamLite : SoraStream() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
if (!res.isAnime) invokeVatic(
|
|
||||||
res.id,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
Loading…
Reference in a new issue