mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
fixed Zoro & AnimeKaizoku movie
This commit is contained in:
parent
7ce045ccd7
commit
521e8021d0
2 changed files with 42 additions and 14 deletions
|
@ -1094,16 +1094,26 @@ object SoraExtractor : SoraStream() {
|
|||
suspend fun invokeAnimes(
|
||||
id: Int? = null,
|
||||
title: String? = null,
|
||||
year: Int? = null,
|
||||
season: Int? = null,
|
||||
episode: Int? = null,
|
||||
subtitleCallback: (SubtitleFile) -> Unit,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
) {
|
||||
val malId = if (season != null) app.get("$tmdb2mal/?id=$id&s=$season").text.trim() else null
|
||||
val malId =
|
||||
if (season != null) app.get("$tmdb2mal/?id=$id&s=$season").text.trim()
|
||||
else app.get("${jikanAPI}/anime?q=${title}&start_date=${year}&type=movie&limit=1")
|
||||
.parsedSafe<JikanResponse>()?.data?.firstOrNull()?.mal_id
|
||||
|
||||
val aniId = app.post(
|
||||
"https://graphql.anilist.co/", data = mapOf(
|
||||
"query" to "{Media(idMal:$malId,type:ANIME){id}}",
|
||||
)
|
||||
).parsedSafe<DataAni>()?.data?.media?.id
|
||||
|
||||
argamap(
|
||||
{
|
||||
if (season != null) invokeZoro(malId, episode, subtitleCallback, callback)
|
||||
invokeZoro(aniId, episode, subtitleCallback, callback)
|
||||
},
|
||||
{
|
||||
invokeAnimeKaizoku(title, malId, season, episode, callback)
|
||||
|
@ -1112,14 +1122,14 @@ object SoraExtractor : SoraStream() {
|
|||
}
|
||||
|
||||
private suspend fun invokeZoro(
|
||||
malId: String? = null,
|
||||
aniId: String? = null,
|
||||
episode: Int? = null,
|
||||
subtitleCallback: (SubtitleFile) -> Unit,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
) {
|
||||
val episodeId = app.get("$consumetMalAPI/info/$malId?provider=zoro")
|
||||
val episodeId = app.get("$consumetAnilistAPI/info/$aniId?provider=zoro")
|
||||
.parsedSafe<ConsumetDetails>()?.episodes?.find {
|
||||
it.number == episode
|
||||
it.number == (episode ?: 1)
|
||||
}?.id?.substringBeforeLast("$") ?: return
|
||||
|
||||
listOf(
|
||||
|
@ -1161,15 +1171,12 @@ object SoraExtractor : SoraStream() {
|
|||
episode: Int? = null,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
) {
|
||||
val fixTitle = title.fixTitle()
|
||||
val search = app.get("$animeKaizokuAPI/?s=${fixTitle?.replace("-", " ")}").document
|
||||
val fixTitle = title.fixTitle()?.replace("-", " ")
|
||||
val search = app.get("$animeKaizokuAPI/?s=${fixTitle}").document
|
||||
val detailHref =
|
||||
search.select("ul#posts-container li").map { it.selectFirst("a")?.attr("href") }
|
||||
.find {
|
||||
if (season == null) it?.contains(
|
||||
fixTitle ?: return,
|
||||
true
|
||||
) == true else it?.contains(malId ?: return) == true
|
||||
it?.contains(malId ?: return) == true
|
||||
}?.let { fixUrl(it, animeKaizokuAPI) }
|
||||
|
||||
val detail = app.get(detailHref ?: return).document
|
||||
|
@ -1209,7 +1216,7 @@ object SoraExtractor : SoraStream() {
|
|||
).text.substringAfter("openInNewTab(\"")
|
||||
.substringBefore("\")").let { base64Decode(it) }
|
||||
|
||||
if(!ouo.startsWith("https://ouo")) return@apmap null
|
||||
if (!ouo.startsWith("https://ouo")) return@apmap null
|
||||
callback.invoke(
|
||||
ExtractorLink(
|
||||
"AnimeKaizoku [${episodeData.third}]",
|
||||
|
@ -2125,4 +2132,24 @@ data class Safelink(
|
|||
|
||||
data class FDAds(
|
||||
@JsonProperty("linkr") val linkr: String? = null,
|
||||
)
|
||||
|
||||
data class DataMal(
|
||||
@JsonProperty("mal_id") val mal_id: String? = null,
|
||||
)
|
||||
|
||||
data class JikanResponse(
|
||||
@JsonProperty("data") val data: ArrayList<DataMal>? = arrayListOf(),
|
||||
)
|
||||
|
||||
data class IdAni(
|
||||
@JsonProperty("id") val id: String? = null,
|
||||
)
|
||||
|
||||
data class MediaAni(
|
||||
@JsonProperty("Media") val media: IdAni? = null,
|
||||
)
|
||||
|
||||
data class DataAni(
|
||||
@JsonProperty("data") val data: MediaAni? = null,
|
||||
)
|
|
@ -58,8 +58,9 @@ open class SoraStream : TmdbProvider() {
|
|||
private val apiKey =
|
||||
base64DecodeAPI("ZTM=NTg=MjM=MjM=ODc=MzI=OGQ=MmE=Nzk=Nzk=ZjI=NTA=NDY=NDA=MzA=YjA=") // PLEASE DON'T STEAL
|
||||
const val tmdb2mal = "https://tmdb2mal.slidemovies.org"
|
||||
const val jikanAPI = "https://api.jikan.moe/v4"
|
||||
const val gdbot = "https://gdbot.xyz"
|
||||
const val consumetMalAPI = "https://api.consumet.org/meta/mal"
|
||||
const val consumetAnilistAPI = "https://api.consumet.org/meta/anilist"
|
||||
|
||||
private val mainAPI =
|
||||
base64DecodeAPI("cHA=LmE=ZWw=cmM=dmU=aC4=dGM=d2E=eHA=Ly8=czo=dHA=aHQ=")
|
||||
|
@ -354,7 +355,7 @@ open class SoraStream : TmdbProvider() {
|
|||
// )
|
||||
// },
|
||||
{
|
||||
if (res.isAnime) invokeAnimes(res.id, res.title, res.season, res.episode, subtitleCallback, callback)
|
||||
if (res.isAnime) invokeAnimes(res.id, res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||
},
|
||||
{
|
||||
if (res.season != null && res.isAnime) invokeCrunchyroll(
|
||||
|
|
Loading…
Reference in a new issue