Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,54 +1,44 @@
package com.lagradost.cloudstream3.extractors

import com.lagradost.cloudstream3.SubtitleFile
import com.lagradost.cloudstream3.amap
import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.extractors.helper.JwPlayerHelper
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8
import com.lagradost.cloudstream3.utils.getAndUnpack
import org.jsoup.nodes.Document
import com.lagradost.cloudstream3.utils.getPacked

open class Fastream: ExtractorApi() {
open class Fastream : ExtractorApi() {
override var mainUrl = "https://fastream.to"
override var name = "Fastream"
override val requiresReferer = false
suspend fun getstream(
response: Document,
sources: ArrayList<ExtractorLink>): Boolean{
response.select("script").amap { script ->
if (script.data().contains(Regex("eval\\(function\\(p,a,c,k,e,[rd]"))) {
val unpacked = getAndUnpack(script.data())
//val m3u8regex = Regex("((https:|http:)\\/\\/.*\\.m3u8)")
val newm3u8link = unpacked.substringAfter("file:\"").substringBefore("\"")
//val m3u8link = m3u8regex.find(unpacked)?.value ?: return@forEach
generateM3u8(
name,
newm3u8link,
mainUrl
).forEach { link ->
sources.add(link)
}
}
}
return true
}

override suspend fun getUrl(url: String, referer: String?): List<ExtractorLink> {
val sources = ArrayList<ExtractorLink>()
override suspend fun getUrl(
url: String,
referer: String?,
subtitleCallback: (SubtitleFile) -> Unit,
callback: (ExtractorLink) -> Unit
) {
val idregex = Regex("emb.html\\?(.*)=")
if (url.contains(Regex("(emb.html.*fastream)"))) {
val response = if (url.contains(Regex("(emb.html.*fastream)"))) {
val id = idregex.find(url)?.destructured?.component1() ?: ""
val response = app.post("https://fastream.to/dl", allowRedirects = false,
app.post(
"$mainUrl/dl", allowRedirects = false,
data = mapOf(
"op" to "embed",
"file_code" to id,
"auto" to "1"
)
).document
getstream(response, sources)
} else {
app.get(url, referer = url).document
}
response.select("script").amap { script ->
if (getPacked(script.data()) != null) {
val unPacked = getAndUnpack(script.data())
JwPlayerHelper.extractStreamLinks(unPacked, name, mainUrl, callback, subtitleCallback)
}
}
val response = app.get(url, referer = url).document
getstream(response, sources)
return sources
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@ package com.lagradost.cloudstream3.extractors
import com.lagradost.cloudstream3.SubtitleFile
import com.lagradost.cloudstream3.USER_AGENT
import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.extractors.helper.JwPlayerHelper
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.M3u8Helper
import com.lagradost.cloudstream3.utils.fixUrl
import com.lagradost.cloudstream3.utils.getAndUnpack
import org.jsoup.nodes.Element

Expand Down Expand Up @@ -35,15 +34,8 @@ open class Filegram : ExtractorApi() {

val doc = app.get(getEmbedUrl(url), referer = referer).document
val unpackedJs = unpackJs(doc).toString()
val videoUrl = Regex("""file:\s*"([^"]+\.m3u8[^"]*)"""").find(unpackedJs)?.groupValues?.get(1)
if (videoUrl != null) {
M3u8Helper.generateM3u8(
this.name,
fixUrl(videoUrl),
"$mainUrl/",
headers = header
).forEach(callback)
}

JwPlayerHelper.extractStreamLinks(unpackedJs, name, mainUrl, callback, subtitleCallback, headers = header)
}

private fun unpackJs(script: Element): String? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.extractors
import com.lagradost.api.Log
import com.lagradost.cloudstream3.SubtitleFile
import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.extractors.helper.JwPlayerHelper
import com.lagradost.cloudstream3.network.WebViewResolver
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
Expand Down Expand Up @@ -54,18 +55,16 @@ open class FilemoonV2 : ExtractorApi() {
?.data().orEmpty()
val unpackedScript = JsUnpacker(fallbackScriptData).unpack()

val videoUrl = unpackedScript?.let {
Regex("""sources:\[\{file:"(.*?)"""").find(it)?.groupValues?.get(1)
}
val linkFound = JwPlayerHelper.extractStreamLinks(
unpackedScript.orEmpty(),
name,
mainUrl,
callback,
subtitleCallback,
defaultHeaders
)

if (!videoUrl.isNullOrEmpty()) {
M3u8Helper.generateM3u8(
name,
videoUrl,
mainUrl,
headers = defaultHeaders
).forEach(callback)
} else {
if (!linkFound) {
Log.d("FilemoonV2", "No iframe and no video URL found in script fallback.")
}
return
Expand All @@ -81,18 +80,15 @@ open class FilemoonV2 : ExtractorApi() {

val unpackedScript = JsUnpacker(iframeScriptData).unpack()

val videoUrl = unpackedScript?.let {
Regex("""sources:\[\{file:"(.*?)"""").find(it)?.groupValues?.get(1)
}
val linkFound = JwPlayerHelper.extractStreamLinks(
unpackedScript.orEmpty(),
name,
mainUrl,
callback,
subtitleCallback
)

if (!videoUrl.isNullOrEmpty()) {
M3u8Helper.generateM3u8(
name,
videoUrl,
mainUrl,
headers = defaultHeaders
).forEach(callback)
} else {
if (!linkFound) {
// Last-resort fallback using WebView interception
val resolver = WebViewResolver(
interceptUrl = Regex("""(m3u8|master\.txt)"""),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.lagradost.cloudstream3.SubtitleFile
import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.utils.*
import com.lagradost.api.Log
import com.lagradost.cloudstream3.extractors.helper.JwPlayerHelper
import com.lagradost.cloudstream3.network.WebViewResolver


Expand Down Expand Up @@ -76,17 +77,9 @@ open class Filesim : ExtractorApi() {
pageResponse.document.selectFirst("script:containsData(sources:)")?.data()
}

val m3u8Url = scriptData?.let {
Regex("""file:\s*"(.*?m3u8.*?)"""").find(it)?.groupValues?.getOrNull(1)
}
val linkFound = JwPlayerHelper.extractStreamLinks(scriptData.orEmpty(), name, mainUrl, callback, subtitleCallback)

if (!m3u8Url.isNullOrEmpty()) {
M3u8Helper.generateM3u8(
name,
m3u8Url,
mainUrl
).forEach(callback)
} else {
if (!linkFound) {
// Fallback using WebViewResolver
val resolver = WebViewResolver(
interceptUrl = Regex("""(m3u8|master\.txt)"""),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.lagradost.cloudstream3.extractors

import com.lagradost.cloudstream3.SubtitleFile
import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.utils.*
import com.lagradost.cloudstream3.extractors.helper.JwPlayerHelper
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink


open class GamoVideo : ExtractorApi() {
Expand All @@ -11,21 +14,13 @@ open class GamoVideo : ExtractorApi() {

override suspend fun getUrl(
url: String,
referer: String?
): List<ExtractorLink>? {
return app.get(url, referer = referer).document.select("script")
.firstOrNull { it.html().contains("sources:") }!!.html().substringAfter("file: \"")
.substringBefore("\",").let {
listOf(
newExtractorLink(
name,
name,
it,
) {
this.referer = url
this.quality = Qualities.Unknown.value
}
)
}
referer: String?,
subtitleCallback: (SubtitleFile) -> Unit,
callback: (ExtractorLink) -> Unit
) {
app.get(url, referer = referer).document.select("script")
.firstOrNull { JwPlayerHelper.canParseJwScript(it.data()) }!!.let {
JwPlayerHelper.extractStreamLinks(it.data(), name, mainUrl, callback, subtitleCallback)
}
}
}
Loading