fix(en/fmovies): Fix vidsrc extractor + vrf helper (#2363)
This commit is contained in:
@ -8,7 +8,7 @@ ext {
|
||||
extName = 'FMovies'
|
||||
pkgNameSuffix = 'en.fmovies'
|
||||
extClass = '.FMovies'
|
||||
extVersionCode = 10
|
||||
extVersionCode = 11
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ class FMoviesHelper(private val client: OkHttpClient, private val headers: Heade
|
||||
|
||||
fun getVidSrc(query: String, host: String): String {
|
||||
val url = API_URL.newBuilder().apply {
|
||||
addPathSegment(if (host == "vidstream.pro") "rawVizcloud" else "rawMcloud")
|
||||
addPathSegment(if (host.contains("mcloud", true)) "rawMcloud" else "rawVizcloud")
|
||||
addQueryParameter("apikey", API_KEY)
|
||||
}.build().toString()
|
||||
|
||||
|
@ -21,19 +21,27 @@ class VidsrcExtractor(private val client: OkHttpClient, private val headers: Hea
|
||||
private val playlistUtils by lazy { PlaylistUtils(client, headers) }
|
||||
|
||||
fun videosFromUrl(url: String, name: String): List<Video> {
|
||||
val host = when (name) {
|
||||
"Vidplay" -> "vidstream.pro"
|
||||
else -> "mcloud.to"
|
||||
}
|
||||
val httpUrl = url.toHttpUrl()
|
||||
val host = httpUrl.host
|
||||
val referer = "https://$host/"
|
||||
|
||||
val httpUrl = url.toHttpUrl()
|
||||
val query = buildString {
|
||||
append(httpUrl.pathSegments.last())
|
||||
append("?")
|
||||
append(
|
||||
httpUrl.queryParameterNames.joinToString("&") {
|
||||
"$it=${httpUrl.queryParameter(it)}"
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
val query = "${httpUrl.pathSegments.last()}?t=${httpUrl.queryParameter("t")!!}"
|
||||
val rawUrl = vrfHelper.getVidSrc(query, host)
|
||||
val rawUrl = vrfHelper.getVidSrc(query, host).addAutoStart()
|
||||
|
||||
val refererHeaders = headers.newBuilder().apply {
|
||||
add("Referer", referer)
|
||||
add("Accept", "application/json, text/javascript, */*; q=0.01")
|
||||
add("Host", host)
|
||||
add("Referer", url.addAutoStart())
|
||||
add("X-Requested-With", "XMLHttpRequest")
|
||||
}.build()
|
||||
|
||||
val infoJson = client.newCall(
|
||||
@ -41,18 +49,36 @@ class VidsrcExtractor(private val client: OkHttpClient, private val headers: Hea
|
||||
).execute().parseAs<VidsrcResponse>()
|
||||
|
||||
val subtitleList = httpUrl.queryParameter("sub.info")?.let {
|
||||
val subtitlesHeaders = headers.newBuilder().apply {
|
||||
add("Accept", "application/json, text/javascript, */*; q=0.01")
|
||||
add("Host", it.toHttpUrl().host)
|
||||
add("Origin", "https://$host")
|
||||
add("Referer", referer)
|
||||
}.build()
|
||||
|
||||
client.newCall(
|
||||
GET(it, headers = refererHeaders),
|
||||
GET(it, headers = subtitlesHeaders),
|
||||
).execute().parseAs<List<FMoviesSubs>>().map {
|
||||
Track(it.file, it.label)
|
||||
}
|
||||
} ?: emptyList()
|
||||
|
||||
return infoJson.result.sources.distinctBy { it.file }.flatMap {
|
||||
playlistUtils.extractFromHls(it.file, subtitleList = subtitleList, referer = referer, videoNameGen = { q -> "$name - $q" })
|
||||
val url = it.file
|
||||
.toHttpUrl()
|
||||
.newBuilder()
|
||||
.fragment(null)
|
||||
.build()
|
||||
.toString()
|
||||
|
||||
playlistUtils.extractFromHls(url, subtitleList = subtitleList, referer = referer, videoNameGen = { q -> "$name - $q" })
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.addAutoStart(): String {
|
||||
return this.toHttpUrl().newBuilder().setQueryParameter("autostart", "true").build().toString()
|
||||
}
|
||||
|
||||
private inline fun <reified T> Response.parseAs(transform: (String) -> String = { it }): T {
|
||||
val responseBody = use { transform(it.body.string()) }
|
||||
return json.decodeFromString(responseBody)
|
||||
|
@ -8,7 +8,7 @@ ext {
|
||||
extName = 'Seez'
|
||||
pkgNameSuffix = 'en.seez'
|
||||
extClass = '.Seez'
|
||||
extVersionCode = 3
|
||||
extVersionCode = 4
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@ class VrfHelper(private val client: OkHttpClient, private val headers: Headers)
|
||||
|
||||
fun getVidSrc(query: String, host: String): String {
|
||||
val url = API_URL.newBuilder().apply {
|
||||
addPathSegment("rawVizcloud")
|
||||
addPathSegment(if (host.contains("mcloud", true)) "rawMcloud" else "rawVizcloud")
|
||||
addQueryParameter("apikey", API_KEY)
|
||||
}.build().toString()
|
||||
|
||||
|
@ -21,17 +21,27 @@ class VidsrcExtractor(private val client: OkHttpClient, private val headers: Hea
|
||||
private val playlistUtils by lazy { PlaylistUtils(client, headers) }
|
||||
|
||||
fun videosFromUrl(url: String, name: String): List<Video> {
|
||||
val host = "vidstream.pro"
|
||||
|
||||
val httpUrl = url.toHttpUrl()
|
||||
val host = httpUrl.host
|
||||
val referer = "https://$host/"
|
||||
|
||||
val httpUrl = url.toHttpUrl()
|
||||
val query = buildString {
|
||||
append(httpUrl.pathSegments.last())
|
||||
append("?")
|
||||
append(
|
||||
httpUrl.queryParameterNames.joinToString("&") {
|
||||
"$it=${httpUrl.queryParameter(it)}"
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
val query = "${httpUrl.pathSegments.last()}?t=${httpUrl.queryParameter("t")!!}"
|
||||
val rawUrl = vrfHelper.getVidSrc(query, host)
|
||||
val rawUrl = vrfHelper.getVidSrc(query, host).addAutoStart()
|
||||
|
||||
val refererHeaders = headers.newBuilder().apply {
|
||||
add("Referer", referer)
|
||||
add("Accept", "application/json, text/javascript, */*; q=0.01")
|
||||
add("Host", host)
|
||||
add("Referer", url.addAutoStart())
|
||||
add("X-Requested-With", "XMLHttpRequest")
|
||||
}.build()
|
||||
|
||||
val infoJson = client.newCall(
|
||||
@ -39,18 +49,36 @@ class VidsrcExtractor(private val client: OkHttpClient, private val headers: Hea
|
||||
).execute().parseAs<VidsrcResponse>()
|
||||
|
||||
val subtitleList = httpUrl.queryParameter("sub.info")?.let {
|
||||
val subtitlesHeaders = headers.newBuilder().apply {
|
||||
add("Accept", "application/json, text/javascript, */*; q=0.01")
|
||||
add("Host", it.toHttpUrl().host)
|
||||
add("Origin", "https://$host")
|
||||
add("Referer", referer)
|
||||
}.build()
|
||||
|
||||
client.newCall(
|
||||
GET(it, headers = refererHeaders),
|
||||
GET(it, headers = subtitlesHeaders),
|
||||
).execute().parseAs<List<FMoviesSubs>>().map {
|
||||
Track(it.file, it.label)
|
||||
}
|
||||
} ?: emptyList()
|
||||
|
||||
return infoJson.result.sources.distinctBy { it.file }.flatMap {
|
||||
playlistUtils.extractFromHls(it.file, subtitleList = subtitleList, referer = referer, videoNameGen = { q -> "$name - $q" })
|
||||
val url = it.file
|
||||
.toHttpUrl()
|
||||
.newBuilder()
|
||||
.fragment(null)
|
||||
.build()
|
||||
.toString()
|
||||
|
||||
playlistUtils.extractFromHls(url, subtitleList = subtitleList, referer = referer, videoNameGen = { q -> "$name - $q" })
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.addAutoStart(): String {
|
||||
return this.toHttpUrl().newBuilder().setQueryParameter("autostart", "true").build().toString()
|
||||
}
|
||||
|
||||
private inline fun <reified T> Response.parseAs(transform: (String) -> String = { it }): T {
|
||||
val responseBody = use { transform(it.body.string()) }
|
||||
return json.decodeFromString(responseBody)
|
||||
|
Reference in New Issue
Block a user