mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
f up kuramanime
This commit is contained in:
parent
e644456bc6
commit
3d6520cdef
4 changed files with 141 additions and 25 deletions
|
@ -1,5 +1,5 @@
|
|||
// use an integer for version numbers
|
||||
version = 28
|
||||
version = 29
|
||||
|
||||
|
||||
cloudstream {
|
||||
|
|
|
@ -1,7 +1,14 @@
|
|||
package com.hexated
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import com.lagradost.cloudstream3.SubtitleFile
|
||||
import com.lagradost.cloudstream3.app
|
||||
import com.lagradost.cloudstream3.extractors.Filesim
|
||||
import com.lagradost.cloudstream3.extractors.StreamSB
|
||||
import com.lagradost.cloudstream3.utils.ExtractorApi
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import com.lagradost.cloudstream3.utils.Qualities
|
||||
import com.lagradost.cloudstream3.utils.getQualityFromName
|
||||
|
||||
class Nyomo : StreamSB() {
|
||||
override var name: String = "Nyomo"
|
||||
|
@ -12,3 +19,100 @@ class Streamhide : Filesim() {
|
|||
override var name: String = "Streamhide"
|
||||
override var mainUrl: String = "https://streamhide.to"
|
||||
}
|
||||
|
||||
open class Lbx : ExtractorApi() {
|
||||
override val name = "Linkbox"
|
||||
override val mainUrl = "https://lbx.to"
|
||||
private val realUrl = "https://www.linkbox.to"
|
||||
override val requiresReferer = true
|
||||
|
||||
override suspend fun getUrl(
|
||||
url: String,
|
||||
referer: String?,
|
||||
subtitleCallback: (SubtitleFile) -> Unit,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
) {
|
||||
val token = Regex("""(?:/f/|/file/|\?id=)(\w+)""").find(url)?.groupValues?.get(1)
|
||||
val id = app.get("$realUrl/api/file/share_out_list/?sortField=utime&sortAsc=0&pageNo=1&pageSize=50&shareToken=$token").parsedSafe<Responses>()?.data?.itemId
|
||||
app.get("$realUrl/api/file/detail?itemId=$id", referer = url)
|
||||
.parsedSafe<Responses>()?.data?.itemInfo?.resolutionList?.map { link ->
|
||||
callback.invoke(
|
||||
ExtractorLink(
|
||||
name,
|
||||
name,
|
||||
link.url ?: return@map null,
|
||||
"$realUrl/",
|
||||
getQualityFromName(link.resolution)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
data class Resolutions(
|
||||
@JsonProperty("url") val url: String? = null,
|
||||
@JsonProperty("resolution") val resolution: String? = null,
|
||||
)
|
||||
|
||||
data class ItemInfo(
|
||||
@JsonProperty("resolutionList") val resolutionList: ArrayList<Resolutions>? = arrayListOf(),
|
||||
)
|
||||
|
||||
data class Data(
|
||||
@JsonProperty("itemInfo") val itemInfo: ItemInfo? = null,
|
||||
@JsonProperty("itemId") val itemId: String? = null,
|
||||
)
|
||||
|
||||
data class Responses(
|
||||
@JsonProperty("data") val data: Data? = null,
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
open class Kuramadrive : ExtractorApi() {
|
||||
override val name = "DriveKurama"
|
||||
override val mainUrl = "https://kuramadrive.com"
|
||||
override val requiresReferer = true
|
||||
|
||||
override suspend fun getUrl(
|
||||
url: String,
|
||||
referer: String?,
|
||||
subtitleCallback: (SubtitleFile) -> Unit,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
) {
|
||||
val req = app.get(url, referer = referer)
|
||||
val doc = req.document
|
||||
|
||||
val title = doc.select("title").text()
|
||||
val token = doc.select("meta[name=csrf-token]").attr("content")
|
||||
val routeCheckAvl = doc.select("input#routeCheckAvl").attr("value")
|
||||
|
||||
val json = app.post(
|
||||
routeCheckAvl, headers = mapOf(
|
||||
"X-Requested-With" to "XMLHttpRequest",
|
||||
"X-CSRF-TOKEN" to token
|
||||
),
|
||||
referer = url,
|
||||
cookies = req.cookies
|
||||
).parsedSafe<Source>()
|
||||
|
||||
callback.invoke(
|
||||
ExtractorLink(
|
||||
name,
|
||||
name,
|
||||
json?.url ?: return,
|
||||
"$mainUrl/",
|
||||
getIndexQuality(title),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private fun getIndexQuality(str: String?): Int {
|
||||
return Regex("(\\d{3,4})[pP]").find(str ?: "")?.groupValues?.getOrNull(1)?.toIntOrNull()
|
||||
?: Qualities.Unknown.value
|
||||
}
|
||||
|
||||
private data class Source(
|
||||
@JsonProperty("url") val url: String,
|
||||
)
|
||||
|
||||
}
|
|
@ -200,32 +200,42 @@ class KuramanimeProvider : MainAPI() {
|
|||
|
||||
val req = app.get(data)
|
||||
val res = req.document
|
||||
val token = res.select("meta[name=csrf-token]").attr("content")
|
||||
val auth = getAuth(data)
|
||||
headers = mapOf(
|
||||
"Accept" to "application/json, text/javascript, */*; q=0.01",
|
||||
"Authorization" to "${auth.authHeader}",
|
||||
"X-Requested-With" to "XMLHttpRequest",
|
||||
"X-CSRF-TOKEN" to token
|
||||
)
|
||||
cookies = req.cookies
|
||||
res.select("select#changeServer option").apmap { source ->
|
||||
val server = source.attr("value")
|
||||
val query = auth.serverUrl?.queryParameterNames
|
||||
val link = "$data?${query?.first()}=${getMisc(auth.authUrl)}&${query?.last()}=$server"
|
||||
if (server.contains(Regex("(?i)kuramadrive|archive"))) {
|
||||
invokeLocalSource(link, server, data, callback)
|
||||
} else {
|
||||
app.get(
|
||||
link,
|
||||
referer = data,
|
||||
headers = headers,
|
||||
cookies = cookies
|
||||
).document.select("div.iframe-container iframe").attr("src").let { videoUrl ->
|
||||
loadExtractor(fixUrl(videoUrl), "$mainUrl/", subtitleCallback, callback)
|
||||
|
||||
argamap(
|
||||
{
|
||||
val token = res.select("meta[name=csrf-token]").attr("content")
|
||||
val auth = getAuth(data)
|
||||
headers = mapOf(
|
||||
"Accept" to "application/json, text/javascript, */*; q=0.01",
|
||||
"Authorization" to "${auth.authHeader}",
|
||||
"X-Requested-With" to "XMLHttpRequest",
|
||||
"X-CSRF-TOKEN" to token
|
||||
)
|
||||
cookies = req.cookies
|
||||
res.select("select#changeServer option").apmap { source ->
|
||||
val server = source.attr("value")
|
||||
val query = auth.serverUrl?.queryParameterNames
|
||||
val link = "$data?${query?.first()}=${getMisc(auth.authUrl)}&${query?.last()}=$server"
|
||||
if (server.contains(Regex("(?i)kuramadrive|archive"))) {
|
||||
invokeLocalSource(link, server, data, callback)
|
||||
} else {
|
||||
app.get(
|
||||
link,
|
||||
referer = data,
|
||||
headers = headers,
|
||||
cookies = cookies
|
||||
).document.select("div.iframe-container iframe").attr("src").let { videoUrl ->
|
||||
loadExtractor(fixUrl(videoUrl), "$mainUrl/", subtitleCallback, callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
res.select("div#animeDownloadLink a").apmap {
|
||||
loadExtractor(it.attr("href"), "$mainUrl/", subtitleCallback, callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -12,5 +12,7 @@ class KuramanimeProviderPlugin: Plugin() {
|
|||
registerMainAPI(KuramanimeProvider())
|
||||
registerExtractorAPI(Nyomo())
|
||||
registerExtractorAPI(Streamhide())
|
||||
registerExtractorAPI(Kuramadrive())
|
||||
registerExtractorAPI(Lbx())
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue