mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
added Animesaga
This commit is contained in:
parent
96c8017fe8
commit
9b05f65f2c
6 changed files with 123 additions and 81 deletions
|
@ -1,12 +1,12 @@
|
|||
// use an integer for version numbers
|
||||
version = 54
|
||||
version = 55
|
||||
|
||||
|
||||
cloudstream {
|
||||
language = "hi"
|
||||
// All of these properties are optional, you can safely remove them
|
||||
|
||||
description = "Include: Hdmovie2"
|
||||
description = "Includes: Hdmovie2, Animesaga"
|
||||
authors = listOf("Hexated")
|
||||
|
||||
/**
|
||||
|
|
17
Movierulzhd/src/main/kotlin/com/hexated/Animesaga.kt
Normal file
17
Movierulzhd/src/main/kotlin/com/hexated/Animesaga.kt
Normal file
|
@ -0,0 +1,17 @@
|
|||
package com.hexated
|
||||
|
||||
import com.lagradost.cloudstream3.mainPageOf
|
||||
|
||||
class Animesaga : Movierulzhd() {
|
||||
|
||||
override var mainUrl = "https://www.animesaga.in"
|
||||
override var name = "Animesaga"
|
||||
|
||||
override val mainPage = mainPageOf(
|
||||
"movies" to "Movies",
|
||||
"tvshows" to "TV-Shows",
|
||||
"genre/hindi-dub" to "Hindi Dub",
|
||||
)
|
||||
|
||||
|
||||
}
|
|
@ -2,10 +2,9 @@ package com.hexated
|
|||
|
||||
import com.lagradost.cloudstream3.SubtitleFile
|
||||
import com.lagradost.cloudstream3.app
|
||||
import com.lagradost.cloudstream3.extractors.Chillx
|
||||
import com.lagradost.cloudstream3.utils.*
|
||||
|
||||
const val twoEmbedAPI = "https://www.2embed.to"
|
||||
|
||||
class Sbnmp : ExtractorApi() {
|
||||
override val name = "Sbnmp"
|
||||
override var mainUrl = "https://sbnmp.bar"
|
||||
|
@ -66,3 +65,8 @@ open class Akamaicdn : ExtractorApi() {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
class AnimesagaStream : Chillx() {
|
||||
override val name = "AnimesagaStream"
|
||||
override val mainUrl = "https://stream.animesaga.in"
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ open class Movierulzhd : MainAPI() {
|
|||
document = app.get(request.data + page, interceptor = interceptor).document
|
||||
}
|
||||
val home =
|
||||
document.select("div.items.normal article, div#archive-content article").mapNotNull {
|
||||
document.select("div.items.normal article, div#archive-content article, div.items.full article").mapNotNull {
|
||||
it.toSearchResult()
|
||||
}
|
||||
return newHomePageResponse(request.name, home)
|
||||
|
@ -74,7 +74,7 @@ open class Movierulzhd : MainAPI() {
|
|||
private fun Element.toSearchResult(): SearchResponse? {
|
||||
val title = this.selectFirst("h3 > a")?.text() ?: return null
|
||||
val href = getProperLink(fixUrl(this.selectFirst("h3 > a")!!.attr("href")))
|
||||
val posterUrl = fixUrlNull(this.select("div.poster img").last()?.attr("src"))
|
||||
val posterUrl = fixUrlNull(this.select("div.poster img").last()?.imageFromElement())
|
||||
val quality = getQualityFromString(this.select("span.quality").text())
|
||||
return newMovieSearchResponse(title, href, TvType.Movie) {
|
||||
this.posterUrl = posterUrl
|
||||
|
@ -112,7 +112,7 @@ open class Movierulzhd : MainAPI() {
|
|||
directUrl = getBaseUrl(request.url)
|
||||
val title =
|
||||
document.selectFirst("div.data > h1")?.text()?.trim().toString()
|
||||
val poster = fixUrlNull(document.select("div.poster img:last-child").attr("src"))
|
||||
val poster = fixUrlNull(document.selectFirst("div.poster img:last-child")?.imageFromElement())
|
||||
val tags = document.select("div.sgeneros > a").map { it.text() }
|
||||
|
||||
val year = Regex(",\\s?(\\d+)").find(
|
||||
|
@ -139,7 +139,7 @@ open class Movierulzhd : MainAPI() {
|
|||
val recName =
|
||||
it.selectFirst("a")!!.attr("href").toString().removeSuffix("/").split("/").last()
|
||||
val recHref = it.selectFirst("a")!!.attr("href")
|
||||
val recPosterUrl = it.selectFirst("img")?.attr("src").toString()
|
||||
val recPosterUrl = it.selectFirst("img")?.imageFromElement()
|
||||
newTvSeriesSearchResponse(recName, recHref, TvType.TvSeries) {
|
||||
this.posterUrl = recPosterUrl
|
||||
posterHeaders = interceptor.getCookieHeaders(url).toMap()
|
||||
|
@ -151,7 +151,7 @@ open class Movierulzhd : MainAPI() {
|
|||
document.select("ul.episodios > li").map {
|
||||
val href = it.select("a").attr("href")
|
||||
val name = fixTitle(it.select("div.episodiotitle > a").text().trim())
|
||||
val image = it.select("div.imagen > img").attr("src")
|
||||
val image = it.selectFirst("div.imagen > img")?.imageFromElement()
|
||||
val episode =
|
||||
it.select("div.numerando").text().replace(" ", "").split("-").last()
|
||||
.toIntOrNull()
|
||||
|
@ -230,18 +230,20 @@ open class Movierulzhd : MainAPI() {
|
|||
referer = data,
|
||||
headers = mapOf("X-Requested-With" to "XMLHttpRequest")
|
||||
).parsed<ResponseHash>().embed_url
|
||||
if (!source.contains("youtube")) loadCustomExtractor(loadData?.tag, source, "$directUrl/", subtitleCallback, callback)
|
||||
if (!source.contains("youtube")) loadExtractor(source, "$directUrl/", subtitleCallback, callback)
|
||||
} else {
|
||||
var document = app.get(data).document
|
||||
if (document.select("title").text() == "Just a moment...") {
|
||||
document = app.get(data, interceptor = interceptor).document
|
||||
}
|
||||
val id = document.select("meta#dooplay-ajax-counter").attr("data-postid")
|
||||
val type = if (data.contains("/movies/")) "movie" else "tv"
|
||||
|
||||
document.select("ul#playeroptionsul > li").map {
|
||||
it.attr("data-nume") to it.select("span.title").text()
|
||||
}.apmap { (nume, tag) ->
|
||||
Triple(
|
||||
it.attr("data-post"),
|
||||
it.attr("data-nume"),
|
||||
it.attr("data-type")
|
||||
)
|
||||
}.apmap { (id, nume, type) ->
|
||||
val source = app.post(
|
||||
url = "$directUrl/wp-admin/admin-ajax.php",
|
||||
data = mapOf(
|
||||
|
@ -255,8 +257,7 @@ open class Movierulzhd : MainAPI() {
|
|||
).parsed<ResponseHash>().embed_url
|
||||
|
||||
when {
|
||||
!source.contains("youtube") -> loadCustomExtractor(
|
||||
tag,
|
||||
!source.contains("youtube") -> loadExtractor(
|
||||
source,
|
||||
"$directUrl/",
|
||||
subtitleCallback,
|
||||
|
@ -269,30 +270,12 @@ open class Movierulzhd : MainAPI() {
|
|||
return true
|
||||
}
|
||||
|
||||
private suspend fun loadCustomExtractor(
|
||||
name: String? = null,
|
||||
url: String,
|
||||
referer: String? = null,
|
||||
subtitleCallback: (SubtitleFile) -> Unit,
|
||||
callback: (ExtractorLink) -> Unit,
|
||||
quality: Int? = null,
|
||||
) {
|
||||
loadExtractor(url, referer, subtitleCallback) { link ->
|
||||
callback.invoke(
|
||||
ExtractorLink(
|
||||
name ?: link.source,
|
||||
name ?: link.name,
|
||||
link.url,
|
||||
link.referer,
|
||||
when (link.type) {
|
||||
ExtractorLinkType.M3U8 -> link.quality
|
||||
else -> quality ?: link.quality
|
||||
},
|
||||
link.type,
|
||||
link.headers,
|
||||
link.extractorData
|
||||
)
|
||||
)
|
||||
private fun Element.imageFromElement(): String? {
|
||||
return when {
|
||||
this.hasAttr("data-src") -> this.attr("abs:data-src")
|
||||
this.hasAttr("data-lazy-src") -> this.attr("abs:data-lazy-src")
|
||||
this.hasAttr("srcset") -> this.attr("abs:srcset").substringBefore(" ")
|
||||
else -> this.attr("abs:src")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,9 @@ class MovierulzhdPlugin: Plugin() {
|
|||
// All providers should be added in this manner. Please don't edit the providers list directly.
|
||||
registerMainAPI(Movierulzhd())
|
||||
registerMainAPI(Hdmovie2())
|
||||
registerMainAPI(Animesaga())
|
||||
registerExtractorAPI(Sbnmp())
|
||||
registerExtractorAPI(Akamaicdn())
|
||||
registerExtractorAPI(AnimesagaStream())
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue