So much shit

This commit is contained in:
Zaw 2023-02-16 14:16:57 +03:00
parent a50fcc8cf5
commit 649a4deb27
33 changed files with 181 additions and 226 deletions

View File

@ -1,7 +1,6 @@
version = 2
cloudstream {
description = ""
authors = listOf( "Blatzar" )
language = "ar"

View File

@ -1,7 +1,6 @@
version = 2
cloudstream {
description = ""
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -1,7 +1,6 @@
version = 2
cloudstream {
description = ""
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -1,7 +1,6 @@
version = 3
cloudstream {
description = ""
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -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)
}
}

View File

@ -1,7 +1,6 @@
version = 1
cloudstream {
description = ""
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -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(

View File

@ -1,7 +1,6 @@
version = 3
version = 4
cloudstream {
description = "Some LinkBox links are broken idk why"
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -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
}

View 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" )
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.extractors"/>

View File

@ -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())
}
}

View File

@ -1,4 +1,4 @@
package com.shahid4u
package com.extractors
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink

View File

@ -1,4 +1,4 @@
package com.movizland
package com.extractors
import com.fasterxml.jackson.annotation.JsonProperty
import com.lagradost.cloudstream3.app

View File

@ -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/"
}

View 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
}
}

View File

@ -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"

View File

@ -1,4 +1,4 @@
package com.mycima
package com.extractors
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink

View File

@ -1,4 +1,4 @@
package com.shahid4u
package com.extractors
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink

View 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")
))
}
}

View 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,
))
}
}

View File

@ -1,7 +1,6 @@
version = 2
version = 3
cloudstream {
description = ""
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -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)
}

View File

@ -1,7 +1,6 @@
version = 6
cloudstream {
description = ""
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -1,7 +1,6 @@
version = 2
cloudstream {
description = ""
authors = listOf( "Spoonge" )
language = "ar"
status = 1

View File

@ -1,7 +1,6 @@
version = 3
cloudstream {
description = ""
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -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/"
}

View File

@ -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())
}
}

View File

@ -1,7 +1,6 @@
version = 6
version = 7
cloudstream {
description = ""
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -7,6 +7,5 @@ import android.content.Context
class MyCimaPlugin: Plugin() {
override fun load(context: Context) {
registerMainAPI(MyCima())
registerExtractorAPI(MyVid())
}
}

View File

@ -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(

View File

@ -1,7 +1,6 @@
version = 7
cloudstream {
description = ""
authors = listOf( "ImZaw" )
language = "ar"

View File

@ -7,8 +7,5 @@ import android.content.Context
class Shahid4uPlugin: Plugin() {
override fun load(context: Context) {
registerMainAPI(Shahid4u())
registerExtractorAPI(VidHDJW())
registerExtractorAPI(VidHD())
registerExtractorAPI(GoStream())
}
}