forked from recloudstream/cloudstream
Vidstream fix (#923)
This commit is contained in:
parent
ca8b1293bb
commit
4f8b8a09de
3 changed files with 84 additions and 2 deletions
|
@ -5,6 +5,7 @@ import com.fasterxml.jackson.module.kotlin.readValue
|
||||||
import com.lagradost.cloudstream3.*
|
import com.lagradost.cloudstream3.*
|
||||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addActors
|
import com.lagradost.cloudstream3.LoadResponse.Companion.addActors
|
||||||
import com.lagradost.cloudstream3.mvvm.safeApiCall
|
import com.lagradost.cloudstream3.mvvm.safeApiCall
|
||||||
|
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||||
import com.lagradost.cloudstream3.utils.M3u8Helper
|
import com.lagradost.cloudstream3.utils.M3u8Helper
|
||||||
import com.lagradost.cloudstream3.utils.getQualityFromName
|
import com.lagradost.cloudstream3.utils.getQualityFromName
|
||||||
|
@ -20,7 +21,7 @@ class AllAnimeProvider : MainAPI() {
|
||||||
override var mainUrl = "https://allanime.site"
|
override var mainUrl = "https://allanime.site"
|
||||||
override var name = "AllAnime"
|
override var name = "AllAnime"
|
||||||
override val hasQuickSearch = false
|
override val hasQuickSearch = false
|
||||||
override val hasMainPage = false
|
override val hasMainPage = true
|
||||||
|
|
||||||
private val hlsHelper = M3u8Helper()
|
private val hlsHelper = M3u8Helper()
|
||||||
|
|
||||||
|
@ -87,6 +88,82 @@ class AllAnimeProvider : MainAPI() {
|
||||||
@JsonProperty("data") val data: Data
|
@JsonProperty("data") val data: Data
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class RandomMain (
|
||||||
|
@JsonProperty("data" ) var data : DataRan? = DataRan()
|
||||||
|
)
|
||||||
|
|
||||||
|
data class DataRan (
|
||||||
|
@JsonProperty("queryRandomRecommendation" ) var queryRandomRecommendation : ArrayList<QueryRandomRecommendation> = arrayListOf()
|
||||||
|
)
|
||||||
|
|
||||||
|
data class QueryRandomRecommendation (
|
||||||
|
@JsonProperty("_id" ) val Id : String? = null,
|
||||||
|
@JsonProperty("name" ) val name : String? = null,
|
||||||
|
@JsonProperty("englishName" ) val englishName : String? = null,
|
||||||
|
@JsonProperty("nativeName" ) val nativeName : String? = null,
|
||||||
|
@JsonProperty("thumbnail" ) val thumbnail : String? = null,
|
||||||
|
@JsonProperty("airedStart" ) val airedStart : String? = null,
|
||||||
|
@JsonProperty("availableChapters" ) val availableChapters : String? = null,
|
||||||
|
@JsonProperty("availableEpisodes" ) val availableEpisodes : String? = null,
|
||||||
|
@JsonProperty("__typename" ) val _typename : String? = null
|
||||||
|
)
|
||||||
|
|
||||||
|
override suspend fun getMainPage(): HomePageResponse {
|
||||||
|
val items = ArrayList<HomePageList>()
|
||||||
|
val urls = listOf(
|
||||||
|
Pair("Top Anime",
|
||||||
|
"$mainUrl/graphql?variables=%7B%22search%22%3A%7B%22allowAdult%22%3Afalse%2C%22sortBy%22%3A%22Top%22%7D%2C%22limit%22%3A26%2C%22page%22%3A1%2C%22translationType%22%3A%22sub%22%7D&extensions=%7B%22persistedQuery%22%3A%7B%22version%22%3A1%2C%22sha256Hash%22%3A%229343797cc3d9e3f444e2d3b7db9a84d759b816a4d84512ea72d079f85bb96e98%22%7D%7D"),
|
||||||
|
Pair("Animes",
|
||||||
|
"$mainUrl/graphql?variables=%7B%22search%22%3A%7B%22allowAdult%22%3Afalse%7D%2C%22limit%22%3A26%2C%22page%22%3A1%2C%22translationType%22%3A%22sub%22%7D&extensions=%7B%22persistedQuery%22%3A%7B%22version%22%3A1%2C%22sha256Hash%22%3A%229343797cc3d9e3f444e2d3b7db9a84d759b816a4d84512ea72d079f85bb96e98%22%7D%7D"),
|
||||||
|
)
|
||||||
|
|
||||||
|
val random = "$mainUrl/graphql?variables=%7B%22format%22%3A%22anime%22%7D&extensions=%7B%22persistedQuery%22%3A%7B%22version%22%3A1%2C%22sha256Hash%22%3A%2221ac672633498a3698e8f6a93ce6c2b3722b29a216dcca93363bf012c360cd54%22%7D%7D"
|
||||||
|
val ranlink = app.get(random).text
|
||||||
|
val jsonran = parseJson<RandomMain>(ranlink)
|
||||||
|
val ranhome = jsonran.data?.queryRandomRecommendation?.map {
|
||||||
|
AnimeSearchResponse(
|
||||||
|
it.name!!,
|
||||||
|
"$mainUrl/anime/${it.Id}",
|
||||||
|
this.name,
|
||||||
|
TvType.Anime,
|
||||||
|
it.thumbnail,
|
||||||
|
null,
|
||||||
|
EnumSet.of(DubStatus.Subbed, DubStatus.Dubbed),
|
||||||
|
it.nativeName,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
items.add(HomePageList("Random", ranhome!!))
|
||||||
|
|
||||||
|
urls.apmap { (HomeName, url) ->
|
||||||
|
val test = app.get(url).text
|
||||||
|
val json = parseJson<AllAnimeQuery>(test)
|
||||||
|
val home = ArrayList<SearchResponse>()
|
||||||
|
val results = json.data.shows.edges.filter {
|
||||||
|
// filtering in case there is an anime with 0 episodes available on the site.
|
||||||
|
!(it.availableEpisodes?.raw == 0 && it.availableEpisodes.sub == 0 && it.availableEpisodes.dub == 0)
|
||||||
|
}
|
||||||
|
results.map {
|
||||||
|
home.add(AnimeSearchResponse(
|
||||||
|
it.name,
|
||||||
|
"$mainUrl/anime/${it.Id}",
|
||||||
|
this.name,
|
||||||
|
TvType.Anime,
|
||||||
|
it.thumbnail,
|
||||||
|
it.airedStart?.year,
|
||||||
|
EnumSet.of(DubStatus.Subbed, DubStatus.Dubbed),
|
||||||
|
it.englishName,
|
||||||
|
it.availableEpisodes?.dub,
|
||||||
|
it.availableEpisodes?.sub
|
||||||
|
))
|
||||||
|
}
|
||||||
|
items.add(HomePageList(HomeName, home))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (items.size <= 0) throw ErrorLoadingException()
|
||||||
|
return HomePageResponse(items)
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun search(query: String): List<SearchResponse> {
|
override suspend fun search(query: String): List<SearchResponse> {
|
||||||
val link =
|
val link =
|
||||||
"""$mainUrl/graphql?variables=%7B%22search%22%3A%7B%22allowAdult%22%3Afalse%2C%22query%22%3A%22$query%22%7D%2C%22limit%22%3A26%2C%22page%22%3A1%2C%22translationType%22%3A%22sub%22%7D&extensions=%7B%22persistedQuery%22%3A%7B%22version%22%3A1%2C%22sha256Hash%22%3A%229343797cc3d9e3f444e2d3b7db9a84d759b816a4d84512ea72d079f85bb96e98%22%7D%7D"""
|
"""$mainUrl/graphql?variables=%7B%22search%22%3A%7B%22allowAdult%22%3Afalse%2C%22query%22%3A%22$query%22%7D%2C%22limit%22%3A26%2C%22page%22%3A1%2C%22translationType%22%3A%22sub%22%7D&extensions=%7B%22persistedQuery%22%3A%7B%22version%22%3A1%2C%22sha256Hash%22%3A%229343797cc3d9e3f444e2d3b7db9a84d759b816a4d84512ea72d079f85bb96e98%22%7D%7D"""
|
||||||
|
|
|
@ -26,6 +26,10 @@ class VizcloudXyz : WcoStream() {
|
||||||
override var mainUrl = "https://vizcloud.xyz"
|
override var mainUrl = "https://vizcloud.xyz"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class VizcloudLive : WcoStream() {
|
||||||
|
override var mainUrl = "https://vizcloud.live"
|
||||||
|
}
|
||||||
|
|
||||||
open class WcoStream : ExtractorApi() {
|
open class WcoStream : ExtractorApi() {
|
||||||
override var name = "VidStream" //Cause works for animekisa and wco
|
override var name = "VidStream" //Cause works for animekisa and wco
|
||||||
override var mainUrl = "https://vidstream.pro"
|
override var mainUrl = "https://vidstream.pro"
|
||||||
|
@ -99,7 +103,7 @@ open class WcoStream : ExtractorApi() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mainUrl == "https://vidstream.pro" || mainUrl == "https://vidstreamz.online" || mainUrl == "https://vizcloud2.online"
|
if (mainUrl == "https://vidstream.pro" || mainUrl == "https://vidstreamz.online" || mainUrl == "https://vizcloud2.online"
|
||||||
|| mainUrl == "https://vizcloud.xyz") {
|
|| mainUrl == "https://vizcloud.xyz" || mainUrl == "https://vizcloud.live") {
|
||||||
if (it.file.contains("m3u8")) {
|
if (it.file.contains("m3u8")) {
|
||||||
hlsHelper.m3u8Generation(M3u8Helper.M3u8Stream(it.file.replace("#.mp4",""), null,
|
hlsHelper.m3u8Generation(M3u8Helper.M3u8Stream(it.file.replace("#.mp4",""), null,
|
||||||
headers = mapOf("Referer" to url)), true)
|
headers = mapOf("Referer" to url)), true)
|
||||||
|
|
|
@ -99,6 +99,7 @@ val extractorApis: Array<ExtractorApi> = arrayOf(
|
||||||
Vizcloud2(),
|
Vizcloud2(),
|
||||||
VizcloudOnline(),
|
VizcloudOnline(),
|
||||||
VizcloudXyz(),
|
VizcloudXyz(),
|
||||||
|
VizcloudLive(),
|
||||||
Mp4Upload(),
|
Mp4Upload(),
|
||||||
StreamTape(),
|
StreamTape(),
|
||||||
MixDrop(),
|
MixDrop(),
|
||||||
|
|
Loading…
Reference in a new issue