From 8ed5c8354d18615bea962cad844d59d060385cf2 Mon Sep 17 00:00:00 2001 From: hexated Date: Tue, 18 Oct 2022 21:30:49 +0700 Subject: [PATCH 1/5] added sub to streamsb & xtreamCdn --- .../cloudstream3/extractors/SpeedoStream.kt | 6 +- .../cloudstream3/extractors/StreamSB.kt | 15 ++++- .../cloudstream3/extractors/XStreamCdn.kt | 58 ++++++++++++++----- .../cloudstream3/utils/ExtractorApi.kt | 2 + 4 files changed, 62 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt index 6153a7c1..8ef6c463 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt @@ -7,7 +7,11 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper -class SpeedoStream : ExtractorApi() { +class SpeedoStream1 : SpeedoStream() { + override val mainUrl = "https://speedostream.nl" +} + +open class SpeedoStream : ExtractorApi() { override val name = "SpeedoStream" override val mainUrl = "https://speedostream.com" override val requiresReferer = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt index 30a0496d..a6afa18f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -93,15 +93,15 @@ open class StreamSB : ExtractorApi() { } data class Subs ( - @JsonProperty("file") val file: String, - @JsonProperty("label") val label: String, + @JsonProperty("file") val file: String? = null, + @JsonProperty("label") val label: String? = null, ) data class StreamData ( @JsonProperty("file") val file: String, @JsonProperty("cdn_img") val cdnImg: String, @JsonProperty("hash") val hash: String, - @JsonProperty("subs") val subs: List?, + @JsonProperty("subs") val subs: ArrayList? = arrayListOf(), @JsonProperty("length") val length: String, @JsonProperty("id") val id: String, @JsonProperty("title") val title: String, @@ -141,5 +141,14 @@ open class StreamSB : ExtractorApi() { url, headers = headers ).forEach(callback) + + mapped.streamData.subs?.map {sub -> + subtitleCallback.invoke( + SubtitleFile( + sub.label.toString(), + sub.file ?: return@map null, + ) + ) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt index 9e3585ae..3dfa16fe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt @@ -1,12 +1,18 @@ package com.lagradost.cloudstream3.extractors import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getQualityFromName +class Kotakajair: XStreamCdn() { + override val name: String = "Kotakajair" + override val mainUrl: String = "https://kotakajair.xyz" +} + class FEnet: XStreamCdn() { override val name: String = "FEnet" override val mainUrl: String = "https://fembed.net" @@ -59,44 +65,66 @@ open class XStreamCdn : ExtractorApi() { //val type: String // Mp4 ) + private data class Player( + @JsonProperty("poster_file") val poster_file: String? = null, + ) + private data class ResponseJson( @JsonProperty("success") val success: Boolean, - @JsonProperty("data") val data: List? + @JsonProperty("player") val player: Player? = null, + @JsonProperty("data") val data: List?, + @JsonProperty("captions") val captions: List?, + ) + + private data class Captions( + @JsonProperty("id") val id: String, + @JsonProperty("hash") val hash: String, + @JsonProperty("language") val language: String, ) override fun getExtractorUrl(id: String): String { return "$domainUrl/api/source/$id" } - override suspend fun getUrl(url: String, referer: String?): List { + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { val headers = mapOf( "Referer" to url, "User-Agent" to "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0", ) val id = url.trimEnd('/').split("/").last() val newUrl = "https://${domainUrl}/api/source/${id}" - val extractedLinksList: MutableList = mutableListOf() - with(app.post(newUrl, headers = headers)) { - if (this.code != 200) return listOf() - val text = this.text - if (text.isEmpty()) return listOf() - if (text == """{"success":false,"data":"Video not found or has been removed"}""") return listOf() - AppUtils.parseJson(text)?.let { + app.post(newUrl, headers = headers).let { res -> + val sources = tryParseJson(res.text) + sources?.let { if (it.success && it.data != null) { - it.data.forEach { data -> - extractedLinksList.add( + it.data.map { source -> + callback.invoke( ExtractorLink( name, name = name, - data.file, + source.file, url, - getQualityFromName(data.label), + getQualityFromName(source.label), ) ) } } } + + val userData = sources?.player?.poster_file?.split("/")?.get(2) + sources?.captions?.map { + subtitleCallback.invoke( + SubtitleFile( + it.language, + "$mainUrl/asset/userdata/$userData/caption/${it.hash}/${it.id}.srt" + ) + ) + } } - return extractedLinksList } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 8d6b1b82..159484f8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -246,6 +246,7 @@ val extractorApis: MutableList = arrayListOf( LayarKaca(), Rasacintaku(), FEnet(), + Kotakajair(), // WatchSB(), 'cause StreamSB.kt works Uqload(), Uqload1(), @@ -317,6 +318,7 @@ val extractorApis: MutableList = arrayListOf( Linkbox(), Acefile(), SpeedoStream(), + SpeedoStream1(), Zorofile(), Embedgram(), Mvidoo(), From 03bdad96df1948874186f9ae8c50b1039651b9e9 Mon Sep 17 00:00:00 2001 From: hexated Date: Tue, 18 Oct 2022 22:05:35 +0700 Subject: [PATCH 2/5] added Moviehab extractor --- .../cloudstream3/extractors/Moviehab.kt | 40 +++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 1 + 2 files changed, 41 insertions(+) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt new file mode 100644 index 00000000..e2eb7bf0 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt @@ -0,0 +1,40 @@ +package com.lagradost.cloudstream3.extractors + +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.M3u8Helper + +class Moviehab : ExtractorApi() { + override var name = "Moviehab" + override var mainUrl = "https://play.moviehab.com" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val res = app.get(url) + res.document.select("video#player").let { + //should redirect first for making it works + val link = app.get("$mainUrl/${it.select("source").attr("src")}", referer = url).url + M3u8Helper.generateM3u8( + this.name, + link, + url + ).forEach(callback) + + Regex("src[\"|'],\\s[\"|'](\\S+)[\"|']\\)").find(res.text)?.groupValues?.get(1).let {sub -> + subtitleCallback.invoke( + SubtitleFile( + it.select("track").attr("label"), + "$mainUrl/$sub" + ) + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 159484f8..499b5177 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -326,6 +326,7 @@ val extractorApis: MutableList = arrayListOf( Vidmoly(), Vidmolyme(), Voe(), + Moviehab(), Gdriveplayerapi(), Gdriveplayerapp(), From 73b20a032b843f1bb28add1ec43c42bc64e3d5fa Mon Sep 17 00:00:00 2001 From: hexated Date: Tue, 18 Oct 2022 22:51:54 +0700 Subject: [PATCH 3/5] added Sbspeed extractor --- .../java/com/lagradost/cloudstream3/extractors/StreamSB.kt | 5 +++++ .../java/com/lagradost/cloudstream3/utils/ExtractorApi.kt | 1 + 2 files changed, 6 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt index a6afa18f..913b410b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -7,6 +7,11 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +class Sbspeed : StreamSB() { + override var name = "Sbspeed" + override var mainUrl = "https://sbspeed.com" +} + class Streamsss : StreamSB() { override var mainUrl = "https://streamsss.net" } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 499b5177..5e34fa72 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -235,6 +235,7 @@ val extractorApis: MutableList = arrayListOf( Vidgomunime(), Sbflix(), Streamsss(), + Sbspeed(), Fastream(), From 2c8b22e7edfdc0df70bf571727479aa0f5769a5b Mon Sep 17 00:00:00 2001 From: hexated Date: Fri, 21 Oct 2022 03:02:01 +0700 Subject: [PATCH 4/5] added Cdnplayer extractor --- .../java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt | 5 +++++ .../java/com/lagradost/cloudstream3/utils/ExtractorApi.kt | 1 + 2 files changed, 6 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt index 3dfa16fe..e8d9471d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt @@ -8,6 +8,11 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getQualityFromName +class Cdnplayer: XStreamCdn() { + override val name: String = "Cdnplayer" + override val mainUrl: String = "https://cdnplayer.online" +} + class Kotakajair: XStreamCdn() { override val name: String = "Kotakajair" override val mainUrl: String = "https://kotakajair.xyz" diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 5e34fa72..75f5d81e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -248,6 +248,7 @@ val extractorApis: MutableList = arrayListOf( Rasacintaku(), FEnet(), Kotakajair(), + Cdnplayer(), // WatchSB(), 'cause StreamSB.kt works Uqload(), Uqload1(), From 253161a8a7ff5f1d8bb9e3647fe665015f51fe21 Mon Sep 17 00:00:00 2001 From: hexated Date: Fri, 21 Oct 2022 15:16:39 +0700 Subject: [PATCH 5/5] fixed VidSrcExtractor --- .../com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt index 63634704..771a1aaf 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt @@ -85,7 +85,7 @@ open class VidSrcExtractor : ExtractorApi() { this.name, this.name, srcm3u8, - this.mainUrl, + "https://vidsrc.stream/", Qualities.Unknown.value, extractorData = pass, isM3u8 = true