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