forked from recloudstream/cloudstream
sopa2day: Add year, casts, and genres. (#825)
This commit is contained in:
parent
6051d1430a
commit
9d94e22bfb
1 changed files with 45 additions and 16 deletions
|
@ -5,6 +5,7 @@ import com.lagradost.cloudstream3.*
|
||||||
import com.lagradost.cloudstream3.mvvm.logError
|
import com.lagradost.cloudstream3.mvvm.logError
|
||||||
import com.lagradost.cloudstream3.utils.*
|
import com.lagradost.cloudstream3.utils.*
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||||
|
import org.jsoup.Jsoup
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class SoaptwoDayProvider:MainAPI() {
|
class SoaptwoDayProvider:MainAPI() {
|
||||||
|
@ -67,20 +68,44 @@ class SoaptwoDayProvider:MainAPI() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun load(url: String): LoadResponse? {
|
override suspend fun load(url: String): LoadResponse? {
|
||||||
val soup = app.get(url, timeout = 120).document
|
val soup = app.get(url).document
|
||||||
val title = soup.selectFirst(".hidden-lg > div:nth-child(1) > h4").text()
|
val title = soup.selectFirst(".hidden-lg > div:nth-child(1) > h4")?.text() ?: ""
|
||||||
val description = soup.selectFirst("p#wrap")?.text()?.trim()
|
val description = soup.selectFirst("p#wrap")?.text()?.trim()
|
||||||
val poster = soup.selectFirst(".col-md-5 > div:nth-child(1) > div:nth-child(1) > img").attr("src")
|
val poster = soup.selectFirst(".col-md-5 > div:nth-child(1) > div:nth-child(1) > img")?.attr("src")
|
||||||
val episodes = soup.select("div.alert > div > div > a").map {
|
val episodes = soup.select("div.alert > div > div > a").mapNotNull {
|
||||||
val link = it.attr("href")
|
val link = fixUrlNull(it?.attr("href")) ?: return@mapNotNull null
|
||||||
val name = it.text().replace(Regex("(^(\\d+)\\.)"),"")
|
val name = it?.text()?.replace(Regex("(^(\\d+)\\.)"),"")
|
||||||
TvSeriesEpisode(
|
TvSeriesEpisode(
|
||||||
name,
|
name = name,
|
||||||
null,
|
data = link
|
||||||
null,
|
|
||||||
fixUrl(link)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
val otherInfoBody = soup.select("div.col-sm-8 div.panel-body")?.toString()
|
||||||
|
//Fetch casts
|
||||||
|
val casts = otherInfoBody?.substringAfter("Stars : ")
|
||||||
|
?.substringBefore("Genre : ")?.let {
|
||||||
|
Jsoup.parse(it)?.select("a")
|
||||||
|
}?.mapNotNull {
|
||||||
|
val castName = it?.text() ?: return@mapNotNull null
|
||||||
|
ActorData(
|
||||||
|
Actor(
|
||||||
|
name = castName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
//Fetch year
|
||||||
|
val year = otherInfoBody?.substringAfter("<h4>Release : </h4>")
|
||||||
|
?.substringBefore("<div")?.let {
|
||||||
|
//Log.i(this.name, "Result => year string: $it")
|
||||||
|
Jsoup.parse(it)?.select("p")?.get(1)
|
||||||
|
}?.text()?.take(4)?.toIntOrNull()
|
||||||
|
//Fetch genres
|
||||||
|
val genre = otherInfoBody?.substringAfter("<h4>Genre : </h4>")
|
||||||
|
?.substringBefore("<h4>Release : </h4>")?.let {
|
||||||
|
//Log.i(this.name, "Result => genre string: $it")
|
||||||
|
Jsoup.parse(it)?.select("a")
|
||||||
|
}?.mapNotNull { it?.text()?.trim() ?: return@mapNotNull null }
|
||||||
|
|
||||||
val tvType = if (episodes.isEmpty()) TvType.Movie else TvType.TvSeries
|
val tvType = if (episodes.isEmpty()) TvType.Movie else TvType.TvSeries
|
||||||
return when (tvType) {
|
return when (tvType) {
|
||||||
TvType.TvSeries -> {
|
TvType.TvSeries -> {
|
||||||
|
@ -90,9 +115,11 @@ class SoaptwoDayProvider:MainAPI() {
|
||||||
this.name,
|
this.name,
|
||||||
tvType,
|
tvType,
|
||||||
episodes.reversed(),
|
episodes.reversed(),
|
||||||
fixUrl(poster),
|
fixUrlNull(poster),
|
||||||
null,
|
year = year,
|
||||||
description,
|
description,
|
||||||
|
actors = casts,
|
||||||
|
tags = genre
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
TvType.Movie -> {
|
TvType.Movie -> {
|
||||||
|
@ -102,9 +129,11 @@ class SoaptwoDayProvider:MainAPI() {
|
||||||
this.name,
|
this.name,
|
||||||
tvType,
|
tvType,
|
||||||
url,
|
url,
|
||||||
fixUrl(poster),
|
fixUrlNull(poster),
|
||||||
null,
|
year = year,
|
||||||
description,
|
description,
|
||||||
|
actors = casts,
|
||||||
|
tags = genre
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
else -> null
|
else -> null
|
||||||
|
@ -181,10 +210,10 @@ class SoaptwoDayProvider:MainAPI() {
|
||||||
).text.replace("\\\"","\"").replace("\"{","{").replace("}\"","}")
|
).text.replace("\\\"","\"").replace("\"{","{").replace("}\"","}")
|
||||||
.replace("\\\\\\/","\\/")
|
.replace("\\\\\\/","\\/")
|
||||||
val json = parseJson<ServerJson>(url)
|
val json = parseJson<ServerJson>(url)
|
||||||
listOf(
|
listOfNotNull(
|
||||||
json.stream,
|
json.stream,
|
||||||
json.streambackup
|
json.streambackup
|
||||||
).filterNotNull().apmap { stream ->
|
).apmap { stream ->
|
||||||
val cleanstreamurl = stream.replace("\\/","/").replace("\\\\\\","")
|
val cleanstreamurl = stream.replace("\\/","/").replace("\\\\\\","")
|
||||||
if (cleanstreamurl.isNotBlank()) {
|
if (cleanstreamurl.isNotBlank()) {
|
||||||
callback(ExtractorLink(
|
callback(ExtractorLink(
|
||||||
|
|
Loading…
Reference in a new issue