mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
added fwatayakoAPI into Sora
This commit is contained in:
parent
7f4ecec6e0
commit
151260f572
3 changed files with 63 additions and 2 deletions
|
@ -1,5 +1,5 @@
|
||||||
// use an integer for version numbers
|
// use an integer for version numbers
|
||||||
version = 35
|
version = 36
|
||||||
|
|
||||||
|
|
||||||
cloudstream {
|
cloudstream {
|
||||||
|
|
|
@ -1234,7 +1234,7 @@ object SoraExtractor : SoraStream() {
|
||||||
delay(1000)
|
delay(1000)
|
||||||
val res = app.get(link ?: return@apmap null).document
|
val res = app.get(link ?: return@apmap null).document
|
||||||
val bitLink = res.selectFirst("a.btn.btn-outline-success")?.attr("href") ?: return@apmap null
|
val bitLink = res.selectFirst("a.btn.btn-outline-success")?.attr("href") ?: return@apmap null
|
||||||
val downLink = app.get(fixUrl(bitLink, base)).document.selectFirst("div.mb-4 a")?.attr("href")
|
val downLink = app.get(fixUrl(bitLink, base)).document.select("div.mb-4 a").randomOrNull()?.attr("href")
|
||||||
val downPage = app.get(downLink ?: return@apmap null).document
|
val downPage = app.get(downLink ?: return@apmap null).document
|
||||||
|
|
||||||
val downloadLink = downPage.selectFirst("form[method=post] a.btn.btn-success")
|
val downloadLink = downPage.selectFirst("form[method=post] a.btn.btn-success")
|
||||||
|
@ -1263,6 +1263,48 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun invokeFwatayako(
|
||||||
|
imdbId: String? = null,
|
||||||
|
season: Int? = null,
|
||||||
|
episode: Int? = null,
|
||||||
|
subtitleCallback: (SubtitleFile) -> Unit,
|
||||||
|
callback: (ExtractorLink) -> Unit
|
||||||
|
) {
|
||||||
|
val request = app.get("$fwatayakoAPI/IAF0wWTdNYZm?imdb_id=$imdbId")
|
||||||
|
if (!request.isSuccessful) return
|
||||||
|
val files = request.document.selectFirst("input#files")?.attr("value")
|
||||||
|
.let {
|
||||||
|
if (season == null) {
|
||||||
|
it?.replace("\"381\"", "\"movie\"")
|
||||||
|
} else {
|
||||||
|
it?.replace("\"381\"", "\"tv\"")
|
||||||
|
}
|
||||||
|
}.let { tryParseJson<SourcesFwatayako>(it) } ?: return
|
||||||
|
|
||||||
|
val sourcesLink = if (season == null) {
|
||||||
|
files.sourcesMovie
|
||||||
|
} else {
|
||||||
|
files.sourcesTv?.find { it.id == season }?.folder?.find { it.id == "${season}_${episode}" }?.file
|
||||||
|
}
|
||||||
|
|
||||||
|
sourcesLink?.split(",")?.map {
|
||||||
|
val source = it.substringBefore("or").trim()
|
||||||
|
val quality =
|
||||||
|
Regex("\\[([0-9]{3,4})p]").find(source)?.groupValues?.getOrNull(1)?.toIntOrNull()
|
||||||
|
val link = httpsify(source.replace("[${quality}p]", "").trim())
|
||||||
|
callback.invoke(
|
||||||
|
ExtractorLink(
|
||||||
|
"Fwatayako",
|
||||||
|
"Fwatayako",
|
||||||
|
link,
|
||||||
|
"$fwatayakoAPI/",
|
||||||
|
quality ?: Qualities.Unknown.value,
|
||||||
|
isM3u8 = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data class FilmxyCookies(
|
data class FilmxyCookies(
|
||||||
|
@ -1578,3 +1620,17 @@ data class AnimixData(
|
||||||
@JsonProperty("title_japanese") val title_japanese: String? = null,
|
@JsonProperty("title_japanese") val title_japanese: String? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class EpisodesFwatayako(
|
||||||
|
@JsonProperty("id") val id: String? = null,
|
||||||
|
@JsonProperty("file") val file: String? = null,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class SeasonFwatayako(
|
||||||
|
@JsonProperty("id") val id: Int? = null,
|
||||||
|
@JsonProperty("folder") val folder: ArrayList<EpisodesFwatayako>? = arrayListOf(),
|
||||||
|
)
|
||||||
|
|
||||||
|
data class SourcesFwatayako(
|
||||||
|
@JsonProperty("movie") val sourcesMovie: String? = null,
|
||||||
|
@JsonProperty("tv") val sourcesTv: ArrayList<SeasonFwatayako>? = arrayListOf(),
|
||||||
|
)
|
|
@ -22,6 +22,7 @@ import com.lagradost.cloudstream3.*
|
||||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
|
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
|
||||||
import com.lagradost.cloudstream3.metaproviders.TmdbProvider
|
import com.lagradost.cloudstream3.metaproviders.TmdbProvider
|
||||||
import com.hexated.SoraExtractor.invoZoro
|
import com.hexated.SoraExtractor.invoZoro
|
||||||
|
import com.hexated.SoraExtractor.invokeFwatayako
|
||||||
import com.hexated.SoraExtractor.invokeLing
|
import com.hexated.SoraExtractor.invokeLing
|
||||||
import com.hexated.SoraExtractor.invokeUhdmovies
|
import com.hexated.SoraExtractor.invokeUhdmovies
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||||
|
@ -70,6 +71,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val kissKhAPI = "https://kisskh.me"
|
const val kissKhAPI = "https://kisskh.me"
|
||||||
const val lingAPI = "https://ling-online.net"
|
const val lingAPI = "https://ling-online.net"
|
||||||
const val uhdmoviesAPI = "https://uhdmovies.site"
|
const val uhdmoviesAPI = "https://uhdmovies.site"
|
||||||
|
const val fwatayakoAPI = "https://5100.svetacdn.in"
|
||||||
|
|
||||||
fun getType(t: String?): TvType {
|
fun getType(t: String?): TvType {
|
||||||
return when (t) {
|
return when (t) {
|
||||||
|
@ -440,6 +442,9 @@ open class SoraStream : TmdbProvider() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
invokeFwatayako(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
Loading…
Reference in a new issue