From 740340f5befe2e0bfad1620b693567df349b4d24 Mon Sep 17 00:00:00 2001 From: Zaw <42999156+ImZaw@users.noreply.github.com> Date: Thu, 25 Aug 2022 15:47:02 +0300 Subject: [PATCH] removed extractors since its in the app now --- Extractors/build.gradle.kts | 10 --- Extractors/src/main/AndroidManifest.xml | 2 - .../kotlin/com/extractors/DoodExtractor.kt | 62 ------------------- .../kotlin/com/extractors/ExtractorPlugin.kt | 28 --------- .../com/extractors/JWPlayerExtractor.kt | 61 ------------------ .../com/extractors/StreamTapeExtractor.kt | 33 ---------- .../com/extractors/StreamlareExtractor.kt | 60 ------------------ .../com/extractors/UpstreamExtractor.kt | 59 ------------------ .../kotlin/com/extractors/UqloadExtractor.kt | 49 --------------- .../kotlin/com/extractors/VoeExtractor.kt | 51 --------------- 10 files changed, 415 deletions(-) delete mode 100644 Extractors/build.gradle.kts delete mode 100644 Extractors/src/main/AndroidManifest.xml delete mode 100644 Extractors/src/main/kotlin/com/extractors/DoodExtractor.kt delete mode 100644 Extractors/src/main/kotlin/com/extractors/ExtractorPlugin.kt delete mode 100644 Extractors/src/main/kotlin/com/extractors/JWPlayerExtractor.kt delete mode 100644 Extractors/src/main/kotlin/com/extractors/StreamTapeExtractor.kt delete mode 100644 Extractors/src/main/kotlin/com/extractors/StreamlareExtractor.kt delete mode 100644 Extractors/src/main/kotlin/com/extractors/UpstreamExtractor.kt delete mode 100644 Extractors/src/main/kotlin/com/extractors/UqloadExtractor.kt delete mode 100644 Extractors/src/main/kotlin/com/extractors/VoeExtractor.kt diff --git a/Extractors/build.gradle.kts b/Extractors/build.gradle.kts deleted file mode 100644 index 0c115e1..0000000 --- a/Extractors/build.gradle.kts +++ /dev/null @@ -1,10 +0,0 @@ -version = 1 - -cloudstream { - description = "" - authors = listOf( "ImZaw" ) - - status = 1 - - tvTypes = listOf( "Others" ) -} \ No newline at end of file diff --git a/Extractors/src/main/AndroidManifest.xml b/Extractors/src/main/AndroidManifest.xml deleted file mode 100644 index ddff5e9..0000000 --- a/Extractors/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Extractors/src/main/kotlin/com/extractors/DoodExtractor.kt b/Extractors/src/main/kotlin/com/extractors/DoodExtractor.kt deleted file mode 100644 index 238ac6c..0000000 --- a/Extractors/src/main/kotlin/com/extractors/DoodExtractor.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.extractors - -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.getQualityFromName - -class DoodCxExtractor : DoodLaExtractor() { - override var mainUrl = "https://dood.cx" -} - -class DoodShExtractor : DoodLaExtractor() { - override var mainUrl = "https://dood.sh" -} -class DoodWatchExtractor : DoodLaExtractor() { - override var mainUrl = "https://dood.watch" -} - -class DoodPmExtractor : DoodLaExtractor() { - override var mainUrl = "https://dood.pm" -} - -class DoodToExtractor : DoodLaExtractor() { - override var mainUrl = "https://dood.to" -} - -class DoodSoExtractor : DoodLaExtractor() { - override var mainUrl = "https://dood.so" -} - -class DoodWsExtractor : DoodLaExtractor() { - override var mainUrl = "https://dood.ws" -} - - -open class DoodLaExtractor : ExtractorApi() { - override var name = "DoodStream" - override var mainUrl = "https://dood.la" - override val requiresReferer = false - - override fun getExtractorUrl(id: String): String { - return "$mainUrl/d/$id" - } - - override suspend fun getUrl(url: String, referer: String?): List? { - val response0 = app.get(url).text // html of DoodStream page to look for /pass_md5/... - val md5 =mainUrl+(Regex("/pass_md5/[^']*").find(response0)?.value ?: return null) // get https://dood.ws/pass_md5/... - val trueUrl = app.get(md5, referer = url).text + "zUEJeL3mUN?token=" + md5.substringAfterLast("/") //direct link to extract (zUEJeL3mUN is random) - val quality = Regex("\\d{3,4}p").find(response0.substringAfter("").substringBefore(""))?.groupValues?.get(0) - return listOf( - ExtractorLink( - trueUrl, - this.name, - trueUrl, - mainUrl, - getQualityFromName(quality), - false - ) - ) // links are valid in 8h - - } -} \ No newline at end of file diff --git a/Extractors/src/main/kotlin/com/extractors/ExtractorPlugin.kt b/Extractors/src/main/kotlin/com/extractors/ExtractorPlugin.kt deleted file mode 100644 index 296714e..0000000 --- a/Extractors/src/main/kotlin/com/extractors/ExtractorPlugin.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.extractors - -import com.lagradost.cloudstream3.plugins.CloudstreamPlugin -import com.lagradost.cloudstream3.plugins.Plugin -import android.content.Context - -@CloudstreamPlugin -class ExtractorPlugin: Plugin() { - override fun load(context: Context) { - registerExtractorAPI(DoodLaExtractor()) - registerExtractorAPI(DoodCxExtractor()) - registerExtractorAPI(DoodShExtractor()) - registerExtractorAPI(DoodWatchExtractor()) - registerExtractorAPI(DoodPmExtractor()) - registerExtractorAPI(DoodToExtractor()) - registerExtractorAPI(DoodSoExtractor()) - registerExtractorAPI(DoodWsExtractor()) - registerExtractorAPI(Uqload()) - registerExtractorAPI(Uqload1()) - registerExtractorAPI(StreamTape()) - registerExtractorAPI(VoeExtractor()) - registerExtractorAPI(JWPlayer()) - registerExtractorAPI(VidBom()) - registerExtractorAPI(UpstreamExtractor()) - registerExtractorAPI(Streamlare()) - registerExtractorAPI(Slmaxed()) - } -} diff --git a/Extractors/src/main/kotlin/com/extractors/JWPlayerExtractor.kt b/Extractors/src/main/kotlin/com/extractors/JWPlayerExtractor.kt deleted file mode 100644 index b1474f9..0000000 --- a/Extractors/src/main/kotlin/com/extractors/JWPlayerExtractor.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.Qualities -import com.lagradost.cloudstream3.utils.getQualityFromName - -class VidBom : JWPlayer() { - override val name = "Vidbom" - override val mainUrl = "https://vidbam.org" -} - -open class JWPlayer : ExtractorApi() { - override val name = "JWPlayer" - override val mainUrl = "https://www.jwplayer.com" - override val requiresReferer = false - - override suspend fun getUrl(url: String, referer: String?): List? { - val sources = mutableListOf() - with(app.get(url).document) { - val data = this.select("script").mapNotNull { script -> - if (script.data().contains("sources: [")) { - script.data().substringAfter("sources: [") - .substringBefore("],").replace("'", "\"") - } else if (script.data().contains("otakudesu('")) { - script.data().substringAfter("otakudesu('") - .substringBefore("');") - } else { - null - } - } - - tryParseJson>("$data")?.map { - sources.add( - ExtractorLink( - name, - name, - it.file, - referer = url, - quality = getQualityFromName( - Regex("(\\d{3,4}p)").find(it.file)?.groupValues?.get( - 1 - ) - ) - ) - ) - } - } - return sources - } - - private data class ResponseSource( - @JsonProperty("file") val file: String, - @JsonProperty("type") val type: String?, - @JsonProperty("label") val label: String? - ) - -} \ No newline at end of file diff --git a/Extractors/src/main/kotlin/com/extractors/StreamTapeExtractor.kt b/Extractors/src/main/kotlin/com/extractors/StreamTapeExtractor.kt deleted file mode 100644 index 8f3b865..0000000 --- a/Extractors/src/main/kotlin/com/extractors/StreamTapeExtractor.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.extractors - -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.Qualities - -class StreamTape : ExtractorApi() { - override var name = "StreamTape" - override var mainUrl = "https://streamtape.com" - override val requiresReferer = false - - private val linkRegex = - Regex("""'robotlink'\)\.innerHTML = '(.+?)'\+ \('(.+?)'\)""") - - override suspend fun getUrl(url: String, referer: String?): List? { - with(app.get(url)) { - linkRegex.find(this.text)?.let { - val extractedUrl = "https:${it.groups[1]!!.value + it.groups[2]!!.value.substring(3,)}" - return listOf( - ExtractorLink( - name, - name, - extractedUrl, - url, - Qualities.Unknown.value, - ) - ) - } - } - return null - } -} diff --git a/Extractors/src/main/kotlin/com/extractors/StreamlareExtractor.kt b/Extractors/src/main/kotlin/com/extractors/StreamlareExtractor.kt deleted file mode 100644 index 35fb24f..0000000 --- a/Extractors/src/main/kotlin/com/extractors/StreamlareExtractor.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.Qualities -import com.lagradost.nicehttp.RequestBodyTypes -import okhttp3.MediaType.Companion.toMediaTypeOrNull -import okhttp3.RequestBody.Companion.toRequestBody - - -class Streamlare : Slmaxed() { - override val mainUrl = "https://streamlare.com/" -} - -open class Slmaxed : ExtractorApi() { - override val name = "Streamlare" - override val mainUrl = "https://slmaxed.com/" - override val requiresReferer = true - - // https://slmaxed.com/e/oLvgezw3LjPzbp8E -> oLvgezw3LjPzbp8E - val embedRegex = Regex("""/e/([^/]*)""") - - - data class JsonResponse( - @JsonProperty val status: String? = null, - @JsonProperty val message: String? = null, - @JsonProperty val type: String? = null, - @JsonProperty val token: String? = null, - @JsonProperty val result: Map? = null - ) - - data class Result( - @JsonProperty val label: String? = null, - @JsonProperty val file: String? = null, - @JsonProperty val type: String? = null - ) - - override suspend fun getUrl(url: String, referer: String?): List? { - val id = embedRegex.find(url)!!.groupValues[1] - val json = app.post( - "${mainUrl}api/video/stream/get", - requestBody = """{"id":"$id"}""".toRequestBody(RequestBodyTypes.JSON.toMediaTypeOrNull()) - ).parsed() - return json.result?.mapNotNull { - it.value.let { result -> - ExtractorLink( - this.name, - this.name, - result.file ?: return@mapNotNull null, - url, - result.label?.replace("p", "", ignoreCase = true)?.trim()?.toIntOrNull() - ?: Qualities.Unknown.value, - isM3u8 = result.type?.contains("hls", ignoreCase = true) == true - ) - } - } - } -} \ No newline at end of file diff --git a/Extractors/src/main/kotlin/com/extractors/UpstreamExtractor.kt b/Extractors/src/main/kotlin/com/extractors/UpstreamExtractor.kt deleted file mode 100644 index a2ec2d8..0000000 --- a/Extractors/src/main/kotlin/com/extractors/UpstreamExtractor.kt +++ /dev/null @@ -1,59 +0,0 @@ -package com.extractors - -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.Qualities - -class UpstreamExtractor: ExtractorApi() { - override val name: String = "Upstream.to" - override val mainUrl: String = "https://upstream.to" - override val requiresReferer = true - - override suspend fun getUrl(url: String, referer: String?): List { - // WIP: m3u8 link fetched but sometimes not playing - //Log.i(this.name, "Result => (no extractor) ${url}") - val sources: MutableList = mutableListOf() - 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('.') - } else { "" } - } - 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" - sources.add( - ExtractorLink( - name = "Upstream m3u8", - source = this.name, - url = linkUrl, - quality = Qualities.Unknown.value, - referer = referer ?: linkUrl, - isM3u8 = true - ) - ) - } - } - return sources - } -} \ No newline at end of file diff --git a/Extractors/src/main/kotlin/com/extractors/UqloadExtractor.kt b/Extractors/src/main/kotlin/com/extractors/UqloadExtractor.kt deleted file mode 100644 index 06fd459..0000000 --- a/Extractors/src/main/kotlin/com/extractors/UqloadExtractor.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.extractors - -import com.lagradost.cloudstream3.utils.* -import com.lagradost.cloudstream3.app - -class Uqload1 : Uqload() { - override var mainUrl = "https://uqload.com" -} - -open class Uqload : ExtractorApi() { - override val name: String = "Uqload" - override val mainUrl: String = "https://www.uqload.com" - private val srcRegex = Regex("""sources:.\[(.*?)\]""") // would be possible to use the parse and find src attribute - override val requiresReferer = true - - - override suspend fun getUrl(url: String, referer: String?): List? { - val lang = url.substring(0, 2) - val flag = - if (lang == "vo") { - " \uD83C\uDDEC\uD83C\uDDE7" - } - else if (lang == "vf"){ - " \uD83C\uDDE8\uD83C\uDDF5" - } else { - "" - } - - val cleaned_url = if (lang == "ht") { // if url doesn't contain a flag and the url starts with http:// - url - } else { - url.substring(2, url.length) - } - with(app.get(cleaned_url)) { // raised error ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED (3003) is due to the response: "error_nofile" - srcRegex.find(this.text)?.groupValues?.get(1)?.replace("\"", "")?.let { link -> - return listOf( - ExtractorLink( - name, - name + flag, - link, - cleaned_url, - Qualities.Unknown.value, - ) - ) - } - } - return null - } -} diff --git a/Extractors/src/main/kotlin/com/extractors/VoeExtractor.kt b/Extractors/src/main/kotlin/com/extractors/VoeExtractor.kt deleted file mode 100644 index 6b6fd6f..0000000 --- a/Extractors/src/main/kotlin/com/extractors/VoeExtractor.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils.parseJson -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.getQualityFromName - -open class VoeExtractor : ExtractorApi() { - override val name: String = "Voe" - override val mainUrl: String = "https://voe.sx" - override val requiresReferer = false - - private data class ResponseLinks( - @JsonProperty("hls") val url: String?, - @JsonProperty("video_height") val label: Int? - //val type: String // Mp4 - ) - - override suspend fun getUrl(url: String, referer: String?): List { - val extractedLinksList: MutableList = mutableListOf() - val doc = app.get(url).text - if (doc.isNotBlank()) { - val start = "const sources =" - var src = doc.substring(doc.indexOf(start)) - src = src.substring(start.length, src.indexOf(";")) - .replace("0,", "0") - .trim() - //Log.i(this.name, "Result => (src) ${src}") - parseJson(src)?.let { voelink -> - //Log.i(this.name, "Result => (voelink) ${voelink}") - val linkUrl = voelink.url - val linkLabel = voelink.label?.toString() ?: "" - if (!linkUrl.isNullOrEmpty()) { - extractedLinksList.add( - ExtractorLink( - name = this.name, - source = this.name, - url = linkUrl, - quality = getQualityFromName(linkLabel), - referer = url, - isM3u8 = true - ) - ) - } - } - } - return extractedLinksList - } -} \ No newline at end of file