mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
extractors fixed: VidMoxy & RapidVid
This commit is contained in:
parent
9048a51674
commit
2b5e7ff5b3
2 changed files with 46 additions and 28 deletions
|
@ -12,36 +12,45 @@ open class RapidVid : ExtractorApi() {
|
||||||
override val requiresReferer = true
|
override val requiresReferer = true
|
||||||
|
|
||||||
override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) {
|
override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) {
|
||||||
val ext_ref = referer ?: ""
|
val extRef = referer ?: ""
|
||||||
val video_req = app.get(url, referer=ext_ref).text
|
val videoReq = app.get(url, referer=extRef).text
|
||||||
|
|
||||||
val sub_urls = mutableSetOf<String>()
|
val subUrls = mutableSetOf<String>()
|
||||||
Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(video_req).forEach {
|
Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(videoReq).forEach {
|
||||||
val (sub_url, sub_lang) = it.destructured
|
val (subUrl, subLang) = it.destructured
|
||||||
|
|
||||||
if (sub_url in sub_urls) { return@forEach }
|
if (subUrl in subUrls) { return@forEach }
|
||||||
sub_urls.add(sub_url)
|
subUrls.add(subUrl)
|
||||||
|
|
||||||
subtitleCallback.invoke(
|
subtitleCallback.invoke(
|
||||||
SubtitleFile(
|
SubtitleFile(
|
||||||
lang = sub_lang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"),
|
lang = subLang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"),
|
||||||
url = fixUrl(sub_url.replace("\\", ""))
|
url = fixUrl(subUrl.replace("\\", ""))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val extracted_value = Regex("""file": "(.*)",""").find(video_req)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found")
|
var extractedValue = Regex("""file": "(.*)",""").find(videoReq)?.groupValues?.get(1)
|
||||||
|
var decoded: String? = null
|
||||||
|
|
||||||
val bytes = extracted_value.split("\\x").filter { it.isNotEmpty() }.map { it.toInt(16).toByte() }.toByteArray()
|
if (extractedValue != null) {
|
||||||
val decoded = String(bytes, Charsets.UTF_8)
|
val bytes = extractedValue.split("\\x").filter { it.isNotEmpty() }.map { it.toInt(16).toByte() }.toByteArray()
|
||||||
Log.d("Kekik_${this.name}", "decoded » ${decoded}")
|
decoded = String(bytes, Charsets.UTF_8) ?: throw ErrorLoadingException("File not found")
|
||||||
|
} else {
|
||||||
|
val evalJWSsetup = Regex("""\};\s*(eval\(function[\s\S]*?)var played = \d+;""").find(videoReq)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found")
|
||||||
|
val JWSsetup = getAndUnpack(getAndUnpack(evalJWSsetup)).replace("\\\\", "\\")
|
||||||
|
extractedValue = Regex("""file":"(.*)","label""").find(JWSsetup)?.groupValues?.get(1)?.replace("\\\\x", "")
|
||||||
|
|
||||||
|
val bytes = extractedValue?.chunked(2)?.map { it.toInt(16).toByte() }?.toByteArray()
|
||||||
|
decoded = bytes?.toString(Charsets.UTF_8) ?: throw ErrorLoadingException("File not found")
|
||||||
|
}
|
||||||
|
|
||||||
callback.invoke(
|
callback.invoke(
|
||||||
ExtractorLink(
|
ExtractorLink(
|
||||||
source = this.name,
|
source = this.name,
|
||||||
name = this.name,
|
name = this.name,
|
||||||
url = decoded,
|
url = decoded,
|
||||||
referer = ext_ref,
|
referer = extRef,
|
||||||
quality = Qualities.Unknown.value,
|
quality = Qualities.Unknown.value,
|
||||||
isM3u8 = true
|
isM3u8 = true
|
||||||
)
|
)
|
||||||
|
|
|
@ -12,36 +12,45 @@ open class VidMoxy : ExtractorApi() {
|
||||||
override val requiresReferer = true
|
override val requiresReferer = true
|
||||||
|
|
||||||
override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) {
|
override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) {
|
||||||
val ext_ref = referer ?: ""
|
val extRef = referer ?: ""
|
||||||
val video_req = app.get(url, referer=ext_ref).text
|
val videoReq = app.get(url, referer=extRef).text
|
||||||
|
|
||||||
val sub_urls = mutableSetOf<String>()
|
val subUrls = mutableSetOf<String>()
|
||||||
Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(video_req).forEach {
|
Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(videoReq).forEach {
|
||||||
val (sub_url, sub_lang) = it.destructured
|
val (subUrl, subLang) = it.destructured
|
||||||
|
|
||||||
if (sub_url in sub_urls) { return@forEach }
|
if (subUrl in subUrls) { return@forEach }
|
||||||
sub_urls.add(sub_url)
|
subUrls.add(subUrl)
|
||||||
|
|
||||||
subtitleCallback.invoke(
|
subtitleCallback.invoke(
|
||||||
SubtitleFile(
|
SubtitleFile(
|
||||||
lang = sub_lang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"),
|
lang = subLang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"),
|
||||||
url = fixUrl(sub_url.replace("\\", ""))
|
url = fixUrl(subUrl.replace("\\", ""))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val extracted_value = Regex("""file": "(.*)",""").find(video_req)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found")
|
var extractedValue = Regex("""file": "(.*)",""").find(videoReq)?.groupValues?.get(1)
|
||||||
|
var decoded: String? = null
|
||||||
|
|
||||||
val bytes = extracted_value.split("\\x").filter { it.isNotEmpty() }.map { it.toInt(16).toByte() }.toByteArray()
|
if (extractedValue != null) {
|
||||||
val decoded = String(bytes, Charsets.UTF_8)
|
val bytes = extractedValue.split("\\x").filter { it.isNotEmpty() }.map { it.toInt(16).toByte() }.toByteArray()
|
||||||
Log.d("Kekik_${this.name}", "decoded » ${decoded}")
|
decoded = String(bytes, Charsets.UTF_8) ?: throw ErrorLoadingException("File not found")
|
||||||
|
} else {
|
||||||
|
val evaljwSetup = Regex("""\};\s*(eval\(function[\s\S]*?)var played = \d+;""").find(videoReq)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found")
|
||||||
|
val jwSetup = getAndUnpack(getAndUnpack(evaljwSetup)).replace("\\\\", "\\")
|
||||||
|
extractedValue = Regex("""file":"(.*)","label""").find(jwSetup)?.groupValues?.get(1)?.replace("\\\\x", "")
|
||||||
|
|
||||||
|
val bytes = extractedValue?.chunked(2)?.map { it.toInt(16).toByte() }?.toByteArray()
|
||||||
|
decoded = bytes?.toString(Charsets.UTF_8) ?: throw ErrorLoadingException("File not found")
|
||||||
|
}
|
||||||
|
|
||||||
callback.invoke(
|
callback.invoke(
|
||||||
ExtractorLink(
|
ExtractorLink(
|
||||||
source = this.name,
|
source = this.name,
|
||||||
name = this.name,
|
name = this.name,
|
||||||
url = decoded,
|
url = decoded,
|
||||||
referer = ext_ref,
|
referer = extRef,
|
||||||
quality = Qualities.Unknown.value,
|
quality = Qualities.Unknown.value,
|
||||||
isM3u8 = true
|
isM3u8 = true
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue