fixed some sources TimefourTv

This commit is contained in:
hexated 2022-10-06 04:48:01 +07:00
parent 5feaa12f44
commit b911503a6c
3 changed files with 125 additions and 52 deletions

View file

@ -1,5 +1,5 @@
// use an integer for version numbers // use an integer for version numbers
version = 3 version = 4
cloudstream { cloudstream {

View file

@ -4,10 +4,9 @@ import com.lagradost.cloudstream3.*
import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.Qualities
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import java.net.URI
class TimefourTv : MainAPI() { open class TimefourTv : MainAPI() {
override var mainUrl = "https://time4tv.stream" final override var mainUrl = "https://time4tv.stream"
override var name = "Time4tv" override var name = "Time4tv"
override val hasDownloadSupport = false override val hasDownloadSupport = false
override val hasMainPage = true override val hasMainPage = true
@ -97,51 +96,6 @@ class TimefourTv : MainAPI() {
} }
} }
private fun getBaseUrl(url: String): String {
return URI(url).let {
"${it.scheme}://${it.host}"
}
}
private var mainServer: String? = null
private suspend fun getLink(url: String): String? {
val (channel, iframe) = if (url.contains("width=")) {
val doc = app.get(url, referer = "$mainUrl/").document
val tempIframe = doc.selectFirst("iframe")?.attr("src") ?: return null
val doctwo = app.get(fixUrl(tempIframe), referer = url).text
listOf(
tempIframe.split("?").last().removePrefix("id=").replace(".php", ""),
doctwo.substringAfterLast("<iframe src=\"").substringBefore("'+")
)
} else {
val doc = app.get(url, referer = "$mainUrl/").text
listOf(
url.split("?").last().removePrefix("id=").replace(".php", ""),
doc.substringAfterLast("<iframe src=\"").substringBefore("'+")
)
}
val linkFirst = "$iframe$channel.php"
val refFirst = getBaseUrl(url)
val docSecond = app.get(fixUrl(linkFirst), referer = refFirst).document
val iframeSecond = docSecond.select("iframe:last-child, iframe#thatframe").attr("src")
val refSecond = getBaseUrl(linkFirst)
val docThird = app.get(fixUrl(iframeSecond), referer = "$refSecond/")
mainServer = getBaseUrl(iframeSecond)
return Regex("""source:['|"](\S+.m3u8)['|"],""").find(docThird.text)?.groupValues?.getOrNull(
1
) ?: run {
val scriptData =
docThird.document.selectFirst("div#player")?.nextElementSibling()?.data()
?.substringAfterLast("return(")?.substringBefore(".join")
scriptData?.removeSurrounding("[", "]")?.replace("\"", "")?.split(",")
?.joinToString("")
}
}
override suspend fun loadLinks( override suspend fun loadLinks(
data: String, data: String,
isCasting: Boolean, isCasting: Boolean,
@ -154,7 +108,7 @@ class TimefourTv : MainAPI() {
} else { } else {
data data
} ?: throw ErrorLoadingException() } ?: throw ErrorLoadingException()
getLink(fixUrl(link))?.let { m3uLink -> TimefourTvExtractor().getLink(fixUrl(link))?.let { m3uLink ->
callback.invoke( callback.invoke(
ExtractorLink( ExtractorLink(
this.name, this.name,
@ -162,7 +116,7 @@ class TimefourTv : MainAPI() {
m3uLink, m3uLink,
referer = "$mainServer/", referer = "$mainServer/",
quality = Qualities.Unknown.value, quality = Qualities.Unknown.value,
isM3u8 = true isM3u8 = true,
) )
) )
} }

View file

@ -0,0 +1,119 @@
package com.hexated
import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.fixUrl
import com.lagradost.cloudstream3.utils.getAndUnpack
import java.net.URI
var mainServer: String? = null
class TimefourTvExtractor : TimefourTv() {
private fun getBaseUrl(url: String): String {
return URI(url).let {
"${it.scheme}://${it.host}"
}
}
private suspend fun getSportLink(url: String): String? {
val iframe = app.get(url, referer = "$mainUrl/").document.select("iframe").attr("src")
.let { fixUrl(it) }
val ref = getBaseUrl(url)
val data = app.get(iframe, referer = ref).document.select("script")
.find { it.data().contains("eval(function(p,a,c,k,e,d)") }?.data()
.let { getAndUnpack(it.toString()) }
mainServer = getBaseUrl(iframe)
return Regex("var\\ssrc=['|\"](.*?.m3u8.*?)['|\"];").find(data)?.groupValues?.get(1)
}
private suspend fun getCricfreeLink(url: String, ref: String): String? {
val doc = app.get(url, referer = ref).document
val iframe = doc.select("iframe").attr("src")
val channel = iframe.split("/").last().removeSuffix(".php")
val refTwo = getBaseUrl(url)
val docTwo =
app.get(fixUrl(iframe), referer = refTwo).document.selectFirst("script[src*=embed.]")
?.attr("src")
val refThree = getBaseUrl(iframe)
val linkTwo = fixUrl("${docTwo?.replace(".js", ".php")}?player=desktop&live=$channel")
val docThree = app.get(
linkTwo,
referer = "$refThree/",
)
mainServer = getBaseUrl(linkTwo)
val scriptData = docThree.document.selectFirst("div#player")?.nextElementSibling()?.data()
?.substringAfterLast("return(")?.substringBefore(".join")
val link = scriptData?.removeSurrounding("[", "]")?.replace("\"", "")?.split(",")
?.joinToString("") ?: return null
return app.get(link, referer = "$mainUrl/").url
}
private suspend fun getFootyhunter(url: String, ref: String): String? {
val doc = app.get(url, referer = ref).document
val iframe = doc.selectFirst("iframe")?.attr("src") ?: return null
val referer = getBaseUrl(url)
val docTwo = app.get(fixUrl(iframe), referer = "$referer/").text
mainServer = getBaseUrl(iframe)
val link = Regex("""source:['|"](\S+.m3u8)['|"],""").find(docTwo)?.groupValues?.getOrNull(1)
?: return null
return app.get(link, referer = "$mainUrl/").url
}
suspend fun getLink(url: String): String? {
if (url.contains("sportzonline") || url.contains("sportsonline")) {
return getSportLink(url)
}
val (channel, iframe) = if (url.contains("width=")) {
val doc = app.get(url, referer = "$mainUrl/").document
val tempIframe = doc.selectFirst("iframe")?.attr("src") ?: return null
if (tempIframe.contains("cricfree")) {
return getCricfreeLink(tempIframe, getBaseUrl(url))
}
if (tempIframe.contains("footyhunter")) {
return getFootyhunter(tempIframe, getBaseUrl(url))
}
val doctwo = app.get(fixUrl(tempIframe), referer = url).text
listOf(
tempIframe.split("?").last().removePrefix("id=").replace(".php", ""),
doctwo.substringAfterLast("<iframe src=\"").substringBefore("'+")
)
} else {
val doc = app.get(url, referer = "$mainUrl/").text
listOf(
url.split("?").last().removePrefix("id=").replace(".php", ""),
doc.substringAfterLast("<iframe src=\"").substringBefore("'+")
)
}
val linkFirst = "$iframe$channel.php"
val refFirst = getBaseUrl(url)
val docSecond = app.get(fixUrl(linkFirst), referer = refFirst).document
val iframeSecond = docSecond.select("iframe:last-child, iframe#thatframe").attr("src")
val refSecond = getBaseUrl(linkFirst)
val docThird = app.get(fixUrl(iframeSecond), referer = "$refSecond/")
mainServer = getBaseUrl(iframeSecond)
return Regex("""source:['|"](\S+.m3u8)['|"],""").find(docThird.text)?.groupValues?.getOrNull(
1
) ?: run {
val scriptData =
docThird.document.selectFirst("div#player")?.nextElementSibling()?.data()
?.substringAfterLast("return(")?.substringBefore(".join")
scriptData?.removeSurrounding("[", "]")?.replace("\"", "")?.split(",")
?.joinToString("")
}
}
}