mirror of
				https://github.com/yoyzo/arab
				synced 2024-08-15 03:15:00 +00:00 
			
		
		
		
	So much shit
This commit is contained in:
		
							parent
							
								
									a50fcc8cf5
								
							
						
					
					
						commit
						649a4deb27
					
				
					 33 changed files with 181 additions and 226 deletions
				
			
		| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 2
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "Blatzar" )
 | 
			
		||||
	
 | 
			
		||||
	language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 2
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
	language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 2
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
	language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 3
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
    language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -184,31 +184,6 @@ class ArabSeed : MainAPI() {
 | 
			
		|||
                            !sourceElement.attr("type").contains("mp4")
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                } else if (iframeUrl.contains("voe.sx")) {
 | 
			
		||||
                    val doc = app.get(iframeUrl).document
 | 
			
		||||
                    val script = doc.select("script").map { it.data() }.first { it.contains("sources") }
 | 
			
		||||
                    val m3u8 = script.substringAfter("'hls': '").substringBefore("'")
 | 
			
		||||
                    val mp4 = script.substringAfter("'mp4': '").substringBefore("'")
 | 
			
		||||
                    val voeSxquality = script.substringAfter("'video_height': ").substringBefore(",").toInt()
 | 
			
		||||
                    callback.invoke(
 | 
			
		||||
                        ExtractorLink(
 | 
			
		||||
                            this.name,
 | 
			
		||||
                            "Voe.sx m3u8",
 | 
			
		||||
                            m3u8,
 | 
			
		||||
                            data,
 | 
			
		||||
                            voeSxquality,
 | 
			
		||||
                            true
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                    callback.invoke(
 | 
			
		||||
                        ExtractorLink(
 | 
			
		||||
                            this.name,
 | 
			
		||||
                            "Voe.sx mp4",
 | 
			
		||||
                            mp4,
 | 
			
		||||
                            data,
 | 
			
		||||
                            voeSxquality,
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                } else loadExtractor(iframeUrl, data, subtitleCallback, callback)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 1
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
	language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ class CimaNow : MainAPI() {
 | 
			
		|||
        subtitleCallback: (SubtitleFile) -> Unit,
 | 
			
		||||
        callback: (ExtractorLink) -> Unit
 | 
			
		||||
    ): Boolean {
 | 
			
		||||
        app.get("$data").document.select("ul#download [aria-label=\"quality\"]").forEach {
 | 
			
		||||
        app.get(data).document.select("ul#download [aria-label=\"quality\"]").forEach {
 | 
			
		||||
            val name = if(it.select("span").text().contains("فائق السرعة")) "Fast Servers" else "Servers"
 | 
			
		||||
            it.select("a").forEach { media ->
 | 
			
		||||
                callback.invoke(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 3
 | 
			
		||||
version = 4
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = "Some LinkBox links are broken idk why"
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
    language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,10 @@
 | 
			
		|||
package com.egydead
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonProperty
 | 
			
		||||
import com.lagradost.cloudstream3.*
 | 
			
		||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorLink
 | 
			
		||||
import com.lagradost.cloudstream3.utils.Qualities
 | 
			
		||||
import com.lagradost.cloudstream3.utils.loadExtractor
 | 
			
		||||
import org.jsoup.nodes.Element
 | 
			
		||||
import java.net.URI
 | 
			
		||||
 | 
			
		||||
class EgyDead : MainAPI() {
 | 
			
		||||
    override var lang = "ar"
 | 
			
		||||
| 
						 | 
				
			
			@ -127,29 +124,6 @@ class EgyDead : MainAPI() {
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    data class LinkBox (
 | 
			
		||||
        @JsonProperty("data"   ) var data   : Data? = Data(),
 | 
			
		||||
    )
 | 
			
		||||
    data class Data (
 | 
			
		||||
        @JsonProperty("itemInfo"  ) var itemInfo  : ItemInfo? = ItemInfo(),
 | 
			
		||||
    )
 | 
			
		||||
    data class ItemInfo (
 | 
			
		||||
        @JsonProperty("resolutionList" ) var resolutionList : ArrayList<ResolutionList> = arrayListOf(),
 | 
			
		||||
    )
 | 
			
		||||
    data class ResolutionList (
 | 
			
		||||
 | 
			
		||||
        @JsonProperty("resolution" ) var resolution : String? = null,
 | 
			
		||||
        @JsonProperty("size"       ) var size       : Double?    = null,
 | 
			
		||||
        @JsonProperty("sub_type"   ) var subType    : String? = null,
 | 
			
		||||
        @JsonProperty("url"        ) var url        : String? = null,
 | 
			
		||||
 | 
			
		||||
    )
 | 
			
		||||
    private fun bytesToHumanReadableSize(bytes: Double) = when {
 | 
			
		||||
        bytes >= 1 shl 30 -> "%.1f GB".format(bytes / (1 shl 30))
 | 
			
		||||
        bytes >= 1 shl 20 -> "%.1f MB".format(bytes / (1 shl 20))
 | 
			
		||||
        bytes >= 1 shl 10 -> "%.0f kB".format(bytes / (1 shl 10))
 | 
			
		||||
        else -> "$bytes bytes"
 | 
			
		||||
    }
 | 
			
		||||
    override suspend fun loadLinks(
 | 
			
		||||
        data: String,
 | 
			
		||||
        isCasting: Boolean,
 | 
			
		||||
| 
						 | 
				
			
			@ -159,44 +133,12 @@ class EgyDead : MainAPI() {
 | 
			
		|||
        val doc = app.post(data, data = mapOf("View" to "1")).document
 | 
			
		||||
        doc.select(".donwload-servers-list > li").apmap { element ->
 | 
			
		||||
            val url = element.select("a").attr("href")
 | 
			
		||||
            if(url.contains("www.linkbox.to")) {
 | 
			
		||||
                val apiUrl = "https://" + URI(url).host + "/api/file/detail?itemId=" + url.substringAfter("/file/")
 | 
			
		||||
                val json = app.get(apiUrl).parsed<LinkBox>()
 | 
			
		||||
                json.data?.itemInfo?.resolutionList?.forEach {
 | 
			
		||||
                    callback.invoke(
 | 
			
		||||
                        ExtractorLink(
 | 
			
		||||
                            this.name,
 | 
			
		||||
                            "LinkBox " + bytesToHumanReadableSize(it.size ?: 0.0),
 | 
			
		||||
                            it.url ?: return@forEach,
 | 
			
		||||
                            mainUrl,
 | 
			
		||||
                            it.resolution?.replace("p","")?.toInt() ?: Qualities.Unknown.value,
 | 
			
		||||
                            false
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                }
 | 
			
		||||
            } else loadExtractor(url, data, subtitleCallback, callback)
 | 
			
		||||
            println(url)
 | 
			
		||||
            loadExtractor(url, data, subtitleCallback, callback)
 | 
			
		||||
        }
 | 
			
		||||
        val watchList = doc.select("ul.serversList > li")
 | 
			
		||||
        watchList.apmap { li ->
 | 
			
		||||
        doc.select("ul.serversList > li").apmap { li ->
 | 
			
		||||
            val iframeUrl = li.attr("data-link")
 | 
			
		||||
            val quality = li.select("small").text().getIntFromText() ?: Qualities.Unknown.value
 | 
			
		||||
            if(iframeUrl.contains("www.linkbox.to")) {
 | 
			
		||||
                val apiUrl = "https://" + URI(iframeUrl).host + "/api/file/detail?itemId=" + iframeUrl.substringAfter("id=").substringBefore("&")
 | 
			
		||||
                val json = app.get(apiUrl).parsed<LinkBox>()
 | 
			
		||||
                json.data?.itemInfo?.resolutionList?.forEach {
 | 
			
		||||
                    callback.invoke(
 | 
			
		||||
                        ExtractorLink(
 | 
			
		||||
                            this.name,
 | 
			
		||||
                            "LinkBox " + bytesToHumanReadableSize(it.size ?: 0.0),
 | 
			
		||||
                            it.url ?: return@forEach,
 | 
			
		||||
                            mainUrl,
 | 
			
		||||
                            quality,
 | 
			
		||||
                            false
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else loadExtractor(iframeUrl, data, subtitleCallback, callback)
 | 
			
		||||
            loadExtractor(iframeUrl, data, subtitleCallback, callback)
 | 
			
		||||
        }
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								Extractors/build.gradle.kts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Extractors/build.gradle.kts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
version = 1
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = "This is required to be downloaded."
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
	language = "ar"
 | 
			
		||||
	
 | 
			
		||||
    status = 1
 | 
			
		||||
 | 
			
		||||
    tvTypes = listOf( "TvSeries" , "Movie" , "Anime" , "AsianDrama" )
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								Extractors/src/main/AndroidManifest.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Extractors/src/main/AndroidManifest.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<manifest package="com.extractors"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
package com.extractors
 | 
			
		||||
import com.lagradost.cloudstream3.plugins.CloudstreamPlugin
 | 
			
		||||
import com.lagradost.cloudstream3.plugins.Plugin
 | 
			
		||||
import android.content.Context
 | 
			
		||||
 | 
			
		||||
@CloudstreamPlugin
 | 
			
		||||
class ExtractorsPlugin: Plugin() {
 | 
			
		||||
    override fun load(context: Context) {
 | 
			
		||||
        registerExtractorAPI(VidHDJW())
 | 
			
		||||
        registerExtractorAPI(VidHD())
 | 
			
		||||
        registerExtractorAPI(GoStream())
 | 
			
		||||
        registerExtractorAPI(MyVid())
 | 
			
		||||
        registerExtractorAPI(Vidshar())
 | 
			
		||||
        registerExtractorAPI(Vadbam())
 | 
			
		||||
        registerExtractorAPI(Vidbom())
 | 
			
		||||
        registerExtractorAPI(Govad())
 | 
			
		||||
        registerExtractorAPI(Moshahda())
 | 
			
		||||
        registerExtractorAPI(VoeSx())
 | 
			
		||||
        registerExtractorAPI(LinkBox())
 | 
			
		||||
        registerExtractorAPI(Vidmoly())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package com.shahid4u
 | 
			
		||||
package com.extractors
 | 
			
		||||
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorApi
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorLink
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package com.movizland
 | 
			
		||||
package com.extractors
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonProperty
 | 
			
		||||
import com.lagradost.cloudstream3.app
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package com.shahid4u
 | 
			
		||||
package com.extractors
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonProperty
 | 
			
		||||
import com.lagradost.cloudstream3.app
 | 
			
		||||
| 
						 | 
				
			
			@ -60,4 +60,12 @@ class VidHDJW : JWPlayer() {
 | 
			
		|||
class Vidbom : JWPlayer() {
 | 
			
		||||
    override val name = "Vidbom"
 | 
			
		||||
    override val mainUrl = "https://vidbom.com"
 | 
			
		||||
}
 | 
			
		||||
class Vadbam : JWPlayer() {
 | 
			
		||||
    override val name = "Vadbam"
 | 
			
		||||
    override val mainUrl = "https://vadbam.com/"
 | 
			
		||||
}
 | 
			
		||||
class Vidshar : JWPlayer() {
 | 
			
		||||
    override val name = "Vidshar"
 | 
			
		||||
    override val mainUrl = "https://vidshar.org/"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								Extractors/src/main/kotlin/com/extractors/LinkBox.kt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Extractors/src/main/kotlin/com/extractors/LinkBox.kt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,58 @@
 | 
			
		|||
package com.extractors
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonProperty
 | 
			
		||||
import com.lagradost.cloudstream3.apmap
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorApi
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorLink
 | 
			
		||||
import com.lagradost.cloudstream3.app
 | 
			
		||||
import com.lagradost.cloudstream3.utils.Qualities
 | 
			
		||||
import java.net.URI
 | 
			
		||||
 | 
			
		||||
open class LinkBox : ExtractorApi() {
 | 
			
		||||
    override val name = "LinkBox"
 | 
			
		||||
    override val mainUrl = "https://www.linkbox.to"
 | 
			
		||||
    override val requiresReferer = false
 | 
			
		||||
 | 
			
		||||
    data class LinkBox (
 | 
			
		||||
        @JsonProperty("data"   ) var data   : Data? = Data(),
 | 
			
		||||
    )
 | 
			
		||||
    data class Data (
 | 
			
		||||
        @JsonProperty("itemInfo"  ) var itemInfo  : ItemInfo? = ItemInfo(),
 | 
			
		||||
    )
 | 
			
		||||
    data class ItemInfo (
 | 
			
		||||
        @JsonProperty("resolutionList" ) var resolutionList : ArrayList<ResolutionList> = arrayListOf(),
 | 
			
		||||
    )
 | 
			
		||||
    data class ResolutionList (
 | 
			
		||||
 | 
			
		||||
        @JsonProperty("resolution" ) var resolution : String? = null,
 | 
			
		||||
        @JsonProperty("size"       ) var size       : Double?    = null,
 | 
			
		||||
        @JsonProperty("sub_type"   ) var subType    : String? = null,
 | 
			
		||||
        @JsonProperty("url"        ) var url        : String? = null,
 | 
			
		||||
 | 
			
		||||
        )
 | 
			
		||||
    private fun bytesToHumanReadableSize(bytes: Double) = when {
 | 
			
		||||
        bytes >= 1 shl 30 -> "%.1f GB".format(bytes / (1 shl 30))
 | 
			
		||||
        bytes >= 1 shl 20 -> "%.1f MB".format(bytes / (1 shl 20))
 | 
			
		||||
        bytes >= 1 shl 10 -> "%.0f kB".format(bytes / (1 shl 10))
 | 
			
		||||
        else -> "$bytes bytes"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getUrl(url: String, referer: String?): List<ExtractorLink> {
 | 
			
		||||
        println("LinkBox extractor started")
 | 
			
		||||
        val sources = mutableListOf<ExtractorLink>()
 | 
			
		||||
        val apiUrl = "https://" + URI(url).host + "/api/file/detail?itemId=" + url.substringAfter("/file/")
 | 
			
		||||
        val json = app.get(apiUrl).parsed<LinkBox>()
 | 
			
		||||
        json.data?.itemInfo?.resolutionList?.forEach {
 | 
			
		||||
            sources.add(ExtractorLink(
 | 
			
		||||
                    this.name,
 | 
			
		||||
                    "LinkBox " + bytesToHumanReadableSize(it.size ?: 0.0),
 | 
			
		||||
                    it.url ?: return@forEach,
 | 
			
		||||
                    mainUrl,
 | 
			
		||||
                    it.resolution?.replace("p","")?.toInt() ?: Qualities.Unknown.value,
 | 
			
		||||
                    false
 | 
			
		||||
            ))
 | 
			
		||||
        }
 | 
			
		||||
        println(sources)
 | 
			
		||||
        return sources
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,8 @@
 | 
			
		|||
package com.movizland
 | 
			
		||||
package com.extractors
 | 
			
		||||
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorApi
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorLink
 | 
			
		||||
import com.lagradost.cloudstream3.utils.Qualities
 | 
			
		||||
import com.lagradost.cloudstream3.app
 | 
			
		||||
 | 
			
		||||
open class Moshahda : ExtractorApi() {
 | 
			
		||||
    override val name = "Moshahda"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package com.mycima
 | 
			
		||||
package com.extractors
 | 
			
		||||
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorApi
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorLink
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package com.shahid4u
 | 
			
		||||
package com.extractors
 | 
			
		||||
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorApi
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorLink
 | 
			
		||||
							
								
								
									
										25
									
								
								Extractors/src/main/kotlin/com/extractors/Vidmoly.kt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Extractors/src/main/kotlin/com/extractors/Vidmoly.kt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
package com.extractors
 | 
			
		||||
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorApi
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorLink
 | 
			
		||||
import com.lagradost.cloudstream3.app
 | 
			
		||||
import com.lagradost.cloudstream3.utils.Qualities
 | 
			
		||||
 | 
			
		||||
open class Vidmoly : ExtractorApi() {
 | 
			
		||||
    override val name = "Vidmoly"
 | 
			
		||||
    override val mainUrl = "https://vidmoly.to"
 | 
			
		||||
    override val requiresReferer = false
 | 
			
		||||
 | 
			
		||||
    override suspend fun getUrl(url: String, referer: String?): List<ExtractorLink> {
 | 
			
		||||
        val doc = app.get(url).document
 | 
			
		||||
        val m3u8 = doc.select("body > script").map { it.data() }.first { it.contains("sources") }.substringAfter("sources: [{file:\"").substringBefore("\"}],")
 | 
			
		||||
        return mutableListOf(ExtractorLink(
 | 
			
		||||
            this.name,
 | 
			
		||||
            "Vidmoly",
 | 
			
		||||
            m3u8,
 | 
			
		||||
            referer ?: mainUrl,
 | 
			
		||||
            Qualities.Unknown.value,
 | 
			
		||||
            m3u8.contains(".m3u8")
 | 
			
		||||
        ))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										33
									
								
								Extractors/src/main/kotlin/com/extractors/VoeSx.kt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Extractors/src/main/kotlin/com/extractors/VoeSx.kt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
package com.extractors
 | 
			
		||||
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorApi
 | 
			
		||||
import com.lagradost.cloudstream3.utils.ExtractorLink
 | 
			
		||||
import com.lagradost.cloudstream3.app
 | 
			
		||||
 | 
			
		||||
open class VoeSx : ExtractorApi() {
 | 
			
		||||
    override val name = "VoeSx"
 | 
			
		||||
    override val mainUrl = "https://voe.sx"
 | 
			
		||||
    override val requiresReferer = false
 | 
			
		||||
 | 
			
		||||
    override suspend fun getUrl(url: String, referer: String?): List<ExtractorLink> {
 | 
			
		||||
        val doc = app.get(url).document
 | 
			
		||||
        val script = doc.select("script").map { it.data() }.first { it.contains("sources") }
 | 
			
		||||
        val m3u8 = script.substringAfter("'hls': '").substringBefore("'")
 | 
			
		||||
        val mp4 = script.substringAfter("'mp4': '").substringBefore("'")
 | 
			
		||||
        val quality = script.substringAfter("'video_height': ").substringBefore(",").toInt()
 | 
			
		||||
        return mutableListOf(ExtractorLink(
 | 
			
		||||
            this.name,
 | 
			
		||||
            "Voe.sx m3u8",
 | 
			
		||||
            m3u8,
 | 
			
		||||
            referer ?: mainUrl,
 | 
			
		||||
            quality,
 | 
			
		||||
            true
 | 
			
		||||
        ), ExtractorLink(
 | 
			
		||||
            this.name,
 | 
			
		||||
            "Voe.sx mp4",
 | 
			
		||||
            mp4,
 | 
			
		||||
            referer ?: mainUrl,
 | 
			
		||||
            quality,
 | 
			
		||||
        ))
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 2
 | 
			
		||||
version = 3
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
    language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -195,49 +195,7 @@ class FajerShow : MainAPI() {
 | 
			
		|||
                            )
 | 
			
		||||
                        )
 | 
			
		||||
                    }
 | 
			
		||||
                    println("FajerLive\n$response\n") // parse using FajerLive data class
 | 
			
		||||
                }
 | 
			
		||||
                else if (it.contains("vidmoly.to")) {
 | 
			
		||||
                    val doc = app.get(it).document
 | 
			
		||||
                    val m3u8 = doc.select("body > script").map { it.data() }.first { it.contains("sources") }.substringAfter("sources: [{file:\"").substringBefore("\"}],")
 | 
			
		||||
                    callback.invoke(
 | 
			
		||||
                        ExtractorLink(
 | 
			
		||||
                            this.name,
 | 
			
		||||
                            "Vidmoly",
 | 
			
		||||
                            m3u8,
 | 
			
		||||
                            data,
 | 
			
		||||
                            Qualities.Unknown.value,
 | 
			
		||||
                            m3u8.contains(".m3u8")
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                    println("VIDMOLY.TO\n$m3u8\n")
 | 
			
		||||
                }
 | 
			
		||||
                else if (it.contains("voe.sx")) {
 | 
			
		||||
                    val doc = app.get(it).document
 | 
			
		||||
                    val script = doc.select("script").map { it.data() }.first { it.contains("sources") }
 | 
			
		||||
                    val m3u8 = script.substringAfter("'hls': '").substringBefore("'")
 | 
			
		||||
                    val mp4 = script.substringAfter("'mp4': '").substringBefore("'")
 | 
			
		||||
                    val quality = script.substringAfter("'video_height': ").substringBefore(",").toInt()
 | 
			
		||||
                    callback.invoke(
 | 
			
		||||
                        ExtractorLink(
 | 
			
		||||
                            this.name,
 | 
			
		||||
                            "Voe.sx m3u8",
 | 
			
		||||
                            m3u8,
 | 
			
		||||
                            data,
 | 
			
		||||
                            quality,
 | 
			
		||||
                            true
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                    callback.invoke(
 | 
			
		||||
                        ExtractorLink(
 | 
			
		||||
                            this.name,
 | 
			
		||||
                            "Voe.sx mp4",
 | 
			
		||||
                            mp4,
 | 
			
		||||
                            data,
 | 
			
		||||
                            quality,
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                    println("VOE.SX\n$m3u8\n$mp4\n$quality\n")
 | 
			
		||||
                    println("FajerLive\n$response\n")
 | 
			
		||||
                }
 | 
			
		||||
                else loadExtractor(it, data, subtitleCallback, callback)
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 6
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
	language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 2
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "Spoonge" )
 | 
			
		||||
    language = "ar"
 | 
			
		||||
    status = 1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 3
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
	language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,59 +0,0 @@
 | 
			
		|||
package com.movizland
 | 
			
		||||
 | 
			
		||||
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.getQualityFromName
 | 
			
		||||
import com.lagradost.cloudstream3.utils.Qualities
 | 
			
		||||
 | 
			
		||||
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<ExtractorLink>? {
 | 
			
		||||
        val sources = mutableListOf<ExtractorLink>()
 | 
			
		||||
        with(app.get(url).document) {
 | 
			
		||||
            val data = this.select("script").mapNotNull { script ->
 | 
			
		||||
                if (script.data().contains("sources: [")) {
 | 
			
		||||
                    script.data().substringAfter("sources: [")
 | 
			
		||||
                        .substringBefore("],").replace("file", "\"file\"").replace("label", "\"label\"")
 | 
			
		||||
                } else {
 | 
			
		||||
                    null
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            tryParseJson<List<ResponseSource>>("$data")?.map {
 | 
			
		||||
                sources.add(
 | 
			
		||||
                    ExtractorLink(
 | 
			
		||||
                        name,
 | 
			
		||||
                        name,
 | 
			
		||||
                        it.file,
 | 
			
		||||
                        referer = url,
 | 
			
		||||
                        quality = getQualityFromName(it.label) ?: Qualities.Unknown.value,
 | 
			
		||||
                        isM3u8 = if(it.file.endsWith(".m3u8")) true else false
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return sources
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private data class ResponseSource(
 | 
			
		||||
        @JsonProperty("file") val file: String,
 | 
			
		||||
        @JsonProperty("type") val type: String?,
 | 
			
		||||
        @JsonProperty("label") val label: String?
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Vadbam : JWPlayer() {
 | 
			
		||||
    override val name = "Vadbam"
 | 
			
		||||
    override val mainUrl = "https://vadbam.com/"
 | 
			
		||||
}
 | 
			
		||||
class Vidshar : JWPlayer() {
 | 
			
		||||
    override val name = "Vidshar"
 | 
			
		||||
    override val mainUrl = "https://vidshar.org/"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -7,9 +7,5 @@ import android.content.Context
 | 
			
		|||
class MovizlandPlugin: Plugin() {
 | 
			
		||||
    override fun load(context: Context) {
 | 
			
		||||
        registerMainAPI(Movizland())
 | 
			
		||||
        registerExtractorAPI(Govad())
 | 
			
		||||
        registerExtractorAPI(Moshahda())
 | 
			
		||||
        registerExtractorAPI(Vadbam())
 | 
			
		||||
        registerExtractorAPI(Vidshar())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 6
 | 
			
		||||
version = 7
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
	language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,5 @@ import android.content.Context
 | 
			
		|||
class MyCimaPlugin: Plugin() {
 | 
			
		||||
    override fun load(context: Context) {
 | 
			
		||||
        registerMainAPI(MyCima())
 | 
			
		||||
        registerExtractorAPI(MyVid())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +55,7 @@ class MyCima : MainAPI() {
 | 
			
		|||
 | 
			
		||||
    override suspend fun getMainPage(page: Int, request : MainPageRequest): HomePageResponse {
 | 
			
		||||
        val doc = app.get(request.data + page).document
 | 
			
		||||
        val list = doc.select("div.Grid--MycimaPosts div.GridItem").mapNotNull { element ->
 | 
			
		||||
        val list = doc.select("div.Grid--WecimaPosts div.GridItem").mapNotNull { element ->
 | 
			
		||||
            element.toSearchResponse()
 | 
			
		||||
        }
 | 
			
		||||
        return newHomePageResponse(request.name, list)
 | 
			
		||||
| 
						 | 
				
			
			@ -70,7 +70,7 @@ class MyCima : MainAPI() {
 | 
			
		|||
            "$mainUrl/search/$q/list/anime/"
 | 
			
		||||
        ).apmap { url ->
 | 
			
		||||
            val d = app.get(url).document
 | 
			
		||||
            d.select("div.Grid--MycimaPosts div.GridItem").mapNotNull {
 | 
			
		||||
            d.select("div.Grid--WecimaPosts div.GridItem").mapNotNull {
 | 
			
		||||
                if (it.text().contains("اعلان")) return@mapNotNull null
 | 
			
		||||
                it.toSearchResponse()?.let { it1 -> result.add(it1) }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -86,9 +86,9 @@ class MyCima : MainAPI() {
 | 
			
		|||
        val doc = app.get(url).document
 | 
			
		||||
        val isMovie = doc.select("ol li:nth-child(3)").text().contains("افلام")
 | 
			
		||||
        val posterUrl =
 | 
			
		||||
            doc.select("mycima.separated--top")?.attr("data-lazy-style")?.getImageURL()
 | 
			
		||||
            doc.select("wecima.separated--top")?.attr("data-lazy-style")?.getImageURL()
 | 
			
		||||
                ?.ifEmpty { doc.select("meta[itemprop=\"thumbnailUrl\"]")?.attr("content") }
 | 
			
		||||
                ?.ifEmpty { doc.select("mycima.separated--top")?.attr("style")?.getImageURL() }
 | 
			
		||||
                ?.ifEmpty { doc.select("wecima.separated--top")?.attr("style")?.getImageURL() }
 | 
			
		||||
        val year =
 | 
			
		||||
            doc.select("div.Title--Content--Single-begin h1 a.unline")?.text()?.getIntFromText()
 | 
			
		||||
        val title = doc.select("div.Title--Content--Single-begin h1").text()
 | 
			
		||||
| 
						 | 
				
			
			@ -113,7 +113,7 @@ class MyCima : MainAPI() {
 | 
			
		|||
            Actor(name, image)
 | 
			
		||||
        }
 | 
			
		||||
        val recommendations =
 | 
			
		||||
            doc.select("div.Grid--MycimaPosts div.GridItem")?.mapNotNull { element ->
 | 
			
		||||
            doc.select("div.Grid--WecimaPosts div.GridItem")?.mapNotNull { element ->
 | 
			
		||||
                element.toSearchResponse()
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -314,7 +314,7 @@ class MyCima : MainAPI() {
 | 
			
		|||
            val url = it.select("btn").attr("data-url")
 | 
			
		||||
            loadExtractor(url, data, subtitleCallback, callback)
 | 
			
		||||
        }
 | 
			
		||||
        doc.select("ul.List--Download--Mycima--Single:nth-child(2) li").apmap {
 | 
			
		||||
        doc.select("ul.List--Download--Wecima--Single:nth-child(2) li").apmap {
 | 
			
		||||
                it.select("a").map { linkElement ->
 | 
			
		||||
                    callback.invoke(
 | 
			
		||||
                        ExtractorLink(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
version = 7
 | 
			
		||||
 | 
			
		||||
cloudstream {
 | 
			
		||||
    description = ""
 | 
			
		||||
    authors = listOf( "ImZaw" )
 | 
			
		||||
 | 
			
		||||
	language = "ar"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,8 +7,5 @@ import android.content.Context
 | 
			
		|||
class Shahid4uPlugin: Plugin() {
 | 
			
		||||
    override fun load(context: Context) {
 | 
			
		||||
        registerMainAPI(Shahid4u())
 | 
			
		||||
        registerExtractorAPI(VidHDJW())
 | 
			
		||||
        registerExtractorAPI(VidHD())
 | 
			
		||||
        registerExtractorAPI(GoStream())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue