fixed Sflix and Zoro

This commit is contained in:
Blatzar 2021-10-28 13:28:19 +02:00
parent 2f71fa5664
commit 70c14d116c
4 changed files with 51 additions and 17 deletions

View file

@ -250,7 +250,10 @@ class ZoroProvider : MainAPI() {
private fun getM3u8FromRapidCloud(url: String): String {
return get(
"$url&autoPlay=1&oa=0",
headers = mapOf("Referer" to "https://zoro.to/", "User-Agent" to "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"),
headers = mapOf(
"Referer" to "https://zoro.to/",
"User-Agent" to "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"
),
interceptor = WebViewResolver(
Regex("""/getSources""")
)
@ -284,17 +287,35 @@ class ZoroProvider : MainAPI() {
Regex("""/getSources""")
)
)
// println("RES TEXT ${res.text}")
val recaptchaToken = res.request.url.queryParameter("_token")
val responses = servers.map {
val link = "$mainUrl/ajax/v2/episode/sources?id=${it.second}&_token=$recaptchaToken"
Pair(it.first, getM3u8FromRapidCloud(mapper.readValue<RapidCloudResponse>(get(link, res.request.headers.toMap()).text).link))
Pair(
it.first,
getM3u8FromRapidCloud(
mapper.readValue<RapidCloudResponse>(
get(
link,
res.request.headers.toMap()
).text
).link
)
)
}
responses.forEach {
if (it.second.contains("<html")) return@forEach
val mapped = mapper.readValue<SflixProvider.SourceObject>(it.second)
mapped.tracks?.forEach { track ->
track?.toSubtitleFile()?.let { subtitleFile ->
subtitleCallback.invoke(subtitleFile)
}
}
val list = listOf(
mapped.sources to "source 1",
mapped.sources1 to "source 2",
@ -307,12 +328,6 @@ class ZoroProvider : MainAPI() {
a?.toExtractorLink(this, subList.second + " - ${it.first}")?.forEach(callback)
}
}
mapped.tracks?.forEach { track ->
track?.toSubtitleFile()?.let { subtitleFile ->
subtitleCallback.invoke(subtitleFile)
}
}
}
return true

View file

@ -297,7 +297,11 @@ class SflixProvider : MainAPI() {
).text
val mapped = mapper.readValue<SourceObject>(sources)
mapped.tracks?.forEach {
it?.toSubtitleFile()?.let { subtitleFile ->
subtitleCallback.invoke(subtitleFile)
}
}
val list = listOf(
mapped.sources to "source 1",
mapped.sources1 to "source 2",
@ -309,11 +313,6 @@ class SflixProvider : MainAPI() {
it?.toExtractorLink(this, subList.second)?.forEach(callback)
}
}
mapped.tracks?.forEach {
it?.toSubtitleFile()?.let { subtitleFile ->
subtitleCallback.invoke(subtitleFile)
}
}
return true
}

View file

@ -15,7 +15,7 @@ var baseClient = OkHttpClient()
private const val DEFAULT_TIME = 10
private val DEFAULT_TIME_UNIT = TimeUnit.MINUTES
private const val DEFAULT_USER_AGENT = USER_AGENT
private val DEFAULT_HEADERS = mapOf("User-Agent" to DEFAULT_USER_AGENT)
private val DEFAULT_HEADERS = mapOf("user-agent" to DEFAULT_USER_AGENT)
private val DEFAULT_DATA: Map<String, String> = mapOf()
private val DEFAULT_COOKIES: Map<String, String> = mapOf()
private val DEFAULT_REFERER: String? = null

View file

@ -4,12 +4,14 @@ import android.annotation.SuppressLint
import android.net.http.SslError
import android.webkit.*
import com.lagradost.cloudstream3.AcraApplication
import com.lagradost.cloudstream3.USER_AGENT
import com.lagradost.cloudstream3.utils.Coroutines.main
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Response
import java.net.URI
import java.util.concurrent.TimeUnit
class WebViewResolver(val interceptUrl: Regex) : Interceptor {
@ -48,6 +50,7 @@ class WebViewResolver(val interceptUrl: Regex) : Interceptor {
// Bare minimum to bypass captcha
settings.javaScriptEnabled = true
settings.domStorageEnabled = true
settings.userAgentString = USER_AGENT
}
webView?.webViewClient = object : WebViewClient() {
@ -56,6 +59,7 @@ class WebViewResolver(val interceptUrl: Regex) : Interceptor {
request: WebResourceRequest
): WebResourceResponse? {
val webViewUrl = request.url.toString()
// println("Loading WebView URL: $webViewUrl")
if (interceptUrl.containsMatchIn(webViewUrl)) {
fixedRequest = getRequestCreator(
@ -70,12 +74,28 @@ class WebViewResolver(val interceptUrl: Regex) : Interceptor {
println("Web-view request finished: $webViewUrl")
destroyWebView()
return null
}
// Suppress image requests as we don't display them anywhere
// Less data, low chance of causing issues.
val blacklistedFiles = listOf(".jpg", ".png", ".webp", ".jpeg", ".webm", ".mp4")
/** NOTE! request.requestHeaders is not perfect!
* They don't contain all the headers the browser actually gives.
* Overriding with okhttp might fuck up otherwise working requests,
* e.g the recaptcha request.
* **/
return try {
when {
// suppress favicon requests as we don't display them anywhere
webViewUrl.endsWith("/favicon.ico") -> WebResourceResponse("image/png", null, null)
blacklistedFiles.any { URI(webViewUrl).path.endsWith(it) } || webViewUrl.endsWith(
"/favicon.ico"
) -> WebResourceResponse(
"image/png",
null,
null
)
webViewUrl.contains("recaptcha") -> super.shouldInterceptRequest(view, request)
request.method == "GET" -> get(