mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
Added CineGrabber Extractor
This commit is contained in:
parent
cf08c958eb
commit
f49d9de09b
2 changed files with 65 additions and 17 deletions
|
@ -1,36 +1,83 @@
|
||||||
package com.lagradost.cloudstream3.extractors
|
package com.lagradost.cloudstream3.extractors
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.lagradost.cloudstream3.SubtitleFile
|
||||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||||
import com.lagradost.cloudstream3.app
|
import com.lagradost.cloudstream3.app
|
||||||
import com.lagradost.cloudstream3.utils.*
|
import com.lagradost.cloudstream3.utils.*
|
||||||
|
|
||||||
|
class CineGrabber : GuardareStream() {
|
||||||
|
override var name = "CineGrabber"
|
||||||
|
override var mainUrl = "https://cinegrabber.com"
|
||||||
|
}
|
||||||
|
|
||||||
open class GuardareStream : ExtractorApi() {
|
open class GuardareStream : ExtractorApi() {
|
||||||
override var name = "Guardare"
|
override var name = "Guardare"
|
||||||
override var mainUrl = "https://guardare.stream"
|
override var mainUrl = "https://guardare.stream"
|
||||||
override val requiresReferer = false
|
override val requiresReferer = false
|
||||||
|
|
||||||
data class GuardareJsonData (
|
data class GuardareJsonData(
|
||||||
@JsonProperty("data") val data : List<GuardareData>,
|
@JsonProperty("data") val data: List<GuardareData>,
|
||||||
|
@JsonProperty("captions") val captions: List<GuardareCaptions?>?,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class GuardareData (
|
data class GuardareData(
|
||||||
@JsonProperty("file") val file : String,
|
@JsonProperty("file") val file: String,
|
||||||
@JsonProperty("label") val label : String,
|
@JsonProperty("label") val label: String,
|
||||||
@JsonProperty("type") val type : String
|
@JsonProperty("type") val type: String
|
||||||
)
|
)
|
||||||
|
|
||||||
override suspend fun getUrl(url: String, referer: String?): List<ExtractorLink>? {
|
|
||||||
val response = app.post(url.replace("/v/","/api/source/"), data = mapOf("d" to mainUrl)).text
|
// https://cinegrabber.com/asset/userdata/224879/caption/gqdmzh-71ez76z8/876438.srt
|
||||||
val jsonvideodata = AppUtils.parseJson<GuardareJsonData>(response)
|
data class GuardareCaptions(
|
||||||
return jsonvideodata.data.map {
|
@JsonProperty("id") val id: String,
|
||||||
ExtractorLink(
|
@JsonProperty("hash") val hash: String,
|
||||||
it.file+".${it.type}",
|
@JsonProperty("language") val language: String?,
|
||||||
this.name,
|
@JsonProperty("extension") val extension: String
|
||||||
it.file+".${it.type}",
|
) {
|
||||||
mainUrl,
|
fun getUrl(mainUrl: String, userId: String): String {
|
||||||
it.label.filter{ it.isDigit() }.toInt(),
|
return "$mainUrl/asset/userdata/$userId/caption/$hash/$id.$extension"
|
||||||
false
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getUrl(
|
||||||
|
url: String,
|
||||||
|
referer: String?,
|
||||||
|
subtitleCallback: (SubtitleFile) -> Unit,
|
||||||
|
callback: (ExtractorLink) -> Unit
|
||||||
|
) {
|
||||||
|
val response =
|
||||||
|
app.post(url.replace("/v/", "/api/source/"), data = mapOf("d" to mainUrl)).text
|
||||||
|
|
||||||
|
val jsonVideoData = AppUtils.parseJson<GuardareJsonData>(response)
|
||||||
|
jsonVideoData.data.forEach {
|
||||||
|
callback.invoke(
|
||||||
|
ExtractorLink(
|
||||||
|
it.file + ".${it.type}",
|
||||||
|
this.name,
|
||||||
|
it.file + ".${it.type}",
|
||||||
|
mainUrl,
|
||||||
|
it.label.filter { it.isDigit() }.toInt(),
|
||||||
|
false
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!jsonVideoData.captions.isNullOrEmpty()){
|
||||||
|
val iframe = app.get(url)
|
||||||
|
// var USER_ID = '224879';
|
||||||
|
val userIdRegex = Regex("""USER_ID.*?(\d+)""")
|
||||||
|
val userId = userIdRegex.find(iframe.text)?.groupValues?.getOrNull(1) ?: return
|
||||||
|
jsonVideoData.captions.forEach {
|
||||||
|
if (it == null) return@forEach
|
||||||
|
val subUrl = it.getUrl(mainUrl, userId)
|
||||||
|
subtitleCallback.invoke(
|
||||||
|
SubtitleFile(
|
||||||
|
it.language ?: "",
|
||||||
|
subUrl
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -283,6 +283,7 @@ val extractorApis: MutableList<ExtractorApi> = arrayListOf(
|
||||||
Userload(),
|
Userload(),
|
||||||
Supervideo(),
|
Supervideo(),
|
||||||
GuardareStream(),
|
GuardareStream(),
|
||||||
|
CineGrabber(),
|
||||||
|
|
||||||
// StreamSB.kt works
|
// StreamSB.kt works
|
||||||
// SBPlay(),
|
// SBPlay(),
|
||||||
|
|
Loading…
Reference in a new issue