Skip to content

Commit 4e406f2

Browse files
Last Sync: 2025-12-24 07:20 (Mobile)
1 parent 5c71a15 commit 4e406f2

5 files changed

Lines changed: 473 additions & 0 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// use an integer for version numbers
2+
version = 42
3+
4+
5+
cloudstream {
6+
language = "id"
7+
// All of these properties are optional, you can safely remove them
8+
9+
// description = "Lorem Ipsum"
10+
authors = listOf("Hexated")
11+
12+
/**
13+
* Status int as the following:
14+
* 0: Down
15+
* 1: Ok
16+
* 2: Slow
17+
* 3: Beta only
18+
* */
19+
status = 1 // will be 3 if unspecified
20+
tvTypes = listOf(
21+
"AnimeMovie",
22+
"Anime",
23+
"OVA",
24+
)
25+
26+
iconUrl = "https://www.google.com/s2/favicons?domain=kuramanime.com&sz=%size%"
27+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest package="com.hexated"/>
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
package com.hexated
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty
4+
import com.lagradost.cloudstream3.SubtitleFile
5+
import com.lagradost.cloudstream3.app
6+
import com.lagradost.cloudstream3.extractors.Filesim
7+
import com.lagradost.cloudstream3.extractors.StreamSB
8+
import com.lagradost.cloudstream3.utils.ExtractorApi
9+
import com.lagradost.cloudstream3.utils.ExtractorLink
10+
import com.lagradost.cloudstream3.utils.INFER_TYPE
11+
import com.lagradost.cloudstream3.utils.Qualities
12+
import com.lagradost.cloudstream3.utils.getQualityFromName
13+
import com.lagradost.cloudstream3.utils.newExtractorLink
14+
15+
class Nyomo : StreamSB() {
16+
override var name: String = "Nyomo"
17+
override var mainUrl = "https://nyomo.my.id"
18+
}
19+
20+
class Streamhide : Filesim() {
21+
override var name: String = "Streamhide"
22+
override var mainUrl: String = "https://streamhide.to"
23+
}
24+
25+
open class Lbx : ExtractorApi() {
26+
override val name = "Linkbox"
27+
override val mainUrl = "https://lbx.to"
28+
private val realUrl = "https://www.linkbox.to"
29+
override val requiresReferer = true
30+
31+
override suspend fun getUrl(
32+
url: String,
33+
referer: String?,
34+
subtitleCallback: (SubtitleFile) -> Unit,
35+
callback: (ExtractorLink) -> Unit
36+
) {
37+
val token = Regex("""(?:/f/|/file/|\?id=)(\w+)""").find(url)?.groupValues?.get(1)
38+
val id =
39+
app.get("$realUrl/api/file/share_out_list/?sortField=utime&sortAsc=0&pageNo=1&pageSize=50&shareToken=$token")
40+
.parsedSafe<Responses>()?.data?.itemId
41+
app.get("$realUrl/api/file/detail?itemId=$id", referer = url)
42+
.parsedSafe<Responses>()?.data?.itemInfo?.resolutionList?.map { link ->
43+
callback.invoke(
44+
newExtractorLink(
45+
name,
46+
name,
47+
link.url ?: return@map null,
48+
INFER_TYPE
49+
) {
50+
this.referer = "$realUrl/"
51+
this.quality = getQualityFromName(link.resolution)
52+
}
53+
)
54+
}
55+
}
56+
57+
data class Resolutions(
58+
@JsonProperty("url") val url: String? = null,
59+
@JsonProperty("resolution") val resolution: String? = null,
60+
)
61+
62+
data class ItemInfo(
63+
@JsonProperty("resolutionList") val resolutionList: ArrayList<Resolutions>? = arrayListOf(),
64+
)
65+
66+
data class Data(
67+
@JsonProperty("itemInfo") val itemInfo: ItemInfo? = null,
68+
@JsonProperty("itemId") val itemId: String? = null,
69+
)
70+
71+
data class Responses(
72+
@JsonProperty("data") val data: Data? = null,
73+
)
74+
75+
}
76+
77+
open class Kuramadrive : ExtractorApi() {
78+
override val name = "DriveKurama"
79+
override val mainUrl = "https://kuramadrive.com"
80+
override val requiresReferer = true
81+
82+
override suspend fun getUrl(
83+
url: String,
84+
referer: String?,
85+
subtitleCallback: (SubtitleFile) -> Unit,
86+
callback: (ExtractorLink) -> Unit
87+
) {
88+
val req = app.get(url, referer = referer)
89+
val doc = req.document
90+
91+
val title = doc.select("title").text()
92+
val token = doc.select("meta[name=csrf-token]").attr("content")
93+
val routeCheckAvl = doc.select("input#routeCheckAvl").attr("value")
94+
95+
val json = app.get(
96+
routeCheckAvl, headers = mapOf(
97+
"X-Requested-With" to "XMLHttpRequest",
98+
"X-CSRF-TOKEN" to token
99+
),
100+
referer = url,
101+
cookies = req.cookies
102+
).parsedSafe<Source>()
103+
104+
callback.invoke(
105+
newExtractorLink(
106+
name,
107+
name,
108+
json?.url ?: return,
109+
INFER_TYPE
110+
) {
111+
this.referer = "$mainUrl/"
112+
this.quality = getIndexQuality(title)
113+
}
114+
)
115+
}
116+
117+
private fun getIndexQuality(str: String?): Int {
118+
return Regex("(\\d{3,4})[pP]").find(str ?: "")?.groupValues?.getOrNull(1)?.toIntOrNull()
119+
?: Qualities.Unknown.value
120+
}
121+
122+
private data class Source(
123+
@JsonProperty("url") val url: String,
124+
)
125+
126+
}

0 commit comments

Comments
 (0)