2022-08-20 07:46:57 +00:00
|
|
|
package com.lagradost.cloudstream3.extractors
|
|
|
|
|
2022-09-04 23:13:17 +00:00
|
|
|
import com.lagradost.cloudstream3.SubtitleFile
|
2022-08-20 07:46:57 +00:00
|
|
|
import com.lagradost.cloudstream3.app
|
|
|
|
import com.lagradost.cloudstream3.utils.ExtractorApi
|
|
|
|
import com.lagradost.cloudstream3.utils.ExtractorLink
|
2022-09-04 23:13:17 +00:00
|
|
|
import com.lagradost.cloudstream3.utils.M3u8Helper
|
2022-08-20 07:46:57 +00:00
|
|
|
|
2022-11-06 11:13:45 +00:00
|
|
|
open class UpstreamExtractor : ExtractorApi() {
|
2022-09-04 23:13:17 +00:00
|
|
|
override val name: String = "Upstream"
|
2022-08-20 07:46:57 +00:00
|
|
|
override val mainUrl: String = "https://upstream.to"
|
|
|
|
override val requiresReferer = true
|
|
|
|
|
2022-09-04 23:13:17 +00:00
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
2022-08-20 07:46:57 +00:00
|
|
|
//Log.i(this.name, "Result => (no extractor) ${url}")
|
|
|
|
val doc = app.get(url, referer = referer).text
|
|
|
|
if (doc.isNotBlank()) {
|
|
|
|
var reg = Regex("(?<=master)(.*)(?=hls)")
|
|
|
|
val result = reg.find(doc)?.groupValues?.map {
|
|
|
|
it.trim('|')
|
|
|
|
}?.toList()
|
|
|
|
reg = Regex("(?<=\\|file\\|)(.*)(?=\\|remove\\|)")
|
|
|
|
val domainList = reg.find(doc)?.groupValues?.get(1)?.split("|")
|
|
|
|
var domain = when (!domainList.isNullOrEmpty()) {
|
|
|
|
true -> {
|
|
|
|
if (domainList.isNotEmpty()) {
|
|
|
|
var domName = ""
|
|
|
|
for (part in domainList) {
|
|
|
|
domName = "${part}.${domName}"
|
|
|
|
}
|
|
|
|
domName.trimEnd('.')
|
2022-09-04 23:13:17 +00:00
|
|
|
} else {
|
|
|
|
""
|
|
|
|
}
|
2022-08-20 07:46:57 +00:00
|
|
|
}
|
|
|
|
false -> ""
|
|
|
|
}
|
|
|
|
//Log.i(this.name, "Result => (domain) ${domain}")
|
|
|
|
if (domain.isEmpty()) {
|
|
|
|
domain = "s96.upstreamcdn.co"
|
|
|
|
//Log.i(this.name, "Result => (default domain) ${domain}")
|
|
|
|
}
|
|
|
|
|
|
|
|
result?.forEach {
|
|
|
|
val linkUrl = "https://${domain}/hls/${it}/master.m3u8"
|
2022-09-04 23:13:17 +00:00
|
|
|
M3u8Helper.generateM3u8(
|
|
|
|
this.name,
|
|
|
|
linkUrl,
|
|
|
|
"$mainUrl/",
|
|
|
|
headers = mapOf("Origin" to mainUrl)
|
|
|
|
).forEach(callback)
|
2022-08-20 07:46:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|