2022-10-03 14:22:01 +00:00
|
|
|
package com.hexated
|
|
|
|
|
2023-11-30 22:19:52 +00:00
|
|
|
import com.fasterxml.jackson.annotation.JsonProperty
|
|
|
|
import com.lagradost.cloudstream3.SubtitleFile
|
|
|
|
import com.lagradost.cloudstream3.app
|
2023-03-08 10:50:26 +00:00
|
|
|
import com.lagradost.cloudstream3.extractors.Filesim
|
2022-10-03 14:22:01 +00:00
|
|
|
import com.lagradost.cloudstream3.extractors.StreamSB
|
2023-11-30 22:19:52 +00:00
|
|
|
import com.lagradost.cloudstream3.utils.ExtractorApi
|
|
|
|
import com.lagradost.cloudstream3.utils.ExtractorLink
|
|
|
|
import com.lagradost.cloudstream3.utils.Qualities
|
|
|
|
import com.lagradost.cloudstream3.utils.getQualityFromName
|
2022-10-03 14:22:01 +00:00
|
|
|
|
|
|
|
class Nyomo : StreamSB() {
|
2023-01-17 11:11:51 +00:00
|
|
|
override var name: String = "Nyomo"
|
2022-10-03 14:22:01 +00:00
|
|
|
override var mainUrl = "https://nyomo.my.id"
|
2023-01-17 11:11:51 +00:00
|
|
|
}
|
|
|
|
|
2023-03-08 10:50:26 +00:00
|
|
|
class Streamhide : Filesim() {
|
2023-01-17 11:11:51 +00:00
|
|
|
override var name: String = "Streamhide"
|
|
|
|
override var mainUrl: String = "https://streamhide.to"
|
2023-11-30 22:19:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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")
|
|
|
|
|
2023-12-06 04:15:42 +00:00
|
|
|
val json = app.get(
|
2023-11-30 22:19:52 +00:00
|
|
|
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,
|
|
|
|
)
|
|
|
|
|
2022-10-03 14:22:01 +00:00
|
|
|
}
|