This commit is contained in:
helo 2023-10-11 22:47:03 +07:00
parent c2c1445a95
commit f0ffa72c1f
6 changed files with 6 additions and 169 deletions

View file

@ -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: |

View file

@ -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")}\"")

View file

@ -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,
)
)
}
}
} }

View file

@ -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,
@ -400,19 +381,4 @@ 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(),
) )

View file

@ -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

View file

@ -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