mirror of
https://github.com/recloudstream/cloudstream-extensions-multilingual.git
synced 2024-08-15 03:15:14 +00:00
Load function of vostfree optimized
This commit is contained in:
parent
71043889cb
commit
19ac7e4ca4
1 changed files with 66 additions and 80 deletions
|
@ -9,6 +9,14 @@ import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.lagradost.cloudstream3.*
|
||||||
|
import com.lagradost.cloudstream3.utils.*
|
||||||
|
import com.lagradost.cloudstream3.utils.AppUtils.toJson
|
||||||
|
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
|
||||||
|
import org.jsoup.nodes.Element
|
||||||
|
|
||||||
|
|
||||||
class VostfreeProvider : MainAPI() {
|
class VostfreeProvider : MainAPI() {
|
||||||
// VostFreeProvider() est ajouté à la liste allProviders dans MainAPI.kt
|
// VostFreeProvider() est ajouté à la liste allProviders dans MainAPI.kt
|
||||||
override var mainUrl = "https://vostfree.cx"
|
override var mainUrl = "https://vostfree.cx"
|
||||||
|
@ -90,44 +98,67 @@ class VostfreeProvider : MainAPI() {
|
||||||
// url est le lien retourné par la fonction search (la variable href) ou la fonction getMainPage
|
// url est le lien retourné par la fonction search (la variable href) ou la fonction getMainPage
|
||||||
var mediaType = TvType.Anime
|
var mediaType = TvType.Anime
|
||||||
val episodes = ArrayList<Episode>()
|
val episodes = ArrayList<Episode>()
|
||||||
|
val urlSaison = ArrayList<String>()
|
||||||
val meta =
|
val meta =
|
||||||
document.selectFirst("div#dle-content > div.watch-top > div.image-bg > div.image-bg-content > div.slide-block ")
|
document.selectFirst("div#dle-content > div.watch-top > div.image-bg > div.image-bg-content > div.slide-block ")
|
||||||
val isSaison = document.select("div.new_player_series_count > a")
|
val description = meta?.select("div.slide-middle > div.slide-desc")?.first()
|
||||||
var enterInIseason = false
|
?.text() // first() selectione le premier élément de la liste
|
||||||
var saison00: Int?
|
var title = meta?.select("div.slide-middle > h1")?.text()
|
||||||
saison00 = null
|
?: throw ErrorLoadingException("Invalid title")
|
||||||
isSaison.mapNotNull {
|
title = title.replace("Saison", "").replace("saison", "").replace("SAISON", "")
|
||||||
val url1 = it.attr("href")
|
.replace("Season", "").replace("season", "").replace("SEASON", "")
|
||||||
|
val poster = mainUrl + meta?.select(" div.slide-poster > img")
|
||||||
|
?.attr("src") // récupere le texte de l'attribut 'data-src'
|
||||||
|
|
||||||
if (it.text().contains("OAV")) { // enter in the block when it match the OAV
|
urlSaison.add(url)
|
||||||
saison00 = 1000
|
|
||||||
}
|
|
||||||
if (it.text().contains("Saison")) { // enter in the block when it match the OAV
|
|
||||||
saison00 = it.text().replace("Saison", "").replace(" ", "").replace("\n", "")
|
|
||||||
.replace("\t", "").toInt()
|
|
||||||
}
|
|
||||||
val document1 = app.get(url1).document // récupere le texte sur la page (requète http)
|
|
||||||
val meta1 =
|
|
||||||
document1.selectFirst("div#dle-content > div.watch-top > div.image-bg > div.image-bg-content > div.slide-block ")
|
|
||||||
val poster = mainUrl + meta1?.select(" div.slide-poster > img")
|
|
||||||
?.attr("src") // récupere le texte de l'attribut 'data-src'
|
|
||||||
document.select(" select.new_player_selector > option").mapNotNull {
|
|
||||||
|
|
||||||
if (it.text() != "Film") {
|
|
||||||
|
var seasonNumber: Int?
|
||||||
|
seasonNumber = null
|
||||||
|
val otherSaisonFound = document.select("div.new_player_series_count > a")
|
||||||
|
otherSaisonFound.apmap {
|
||||||
|
urlSaison.add(it.attr("href"))
|
||||||
|
}
|
||||||
|
|
||||||
|
urlSaison.forEach {
|
||||||
|
val urlseason = it
|
||||||
|
val document =
|
||||||
|
app.get(urlseason).document // récupere le texte sur la page (requète http)
|
||||||
|
|
||||||
|
val meta =
|
||||||
|
document.selectFirst("div#dle-content > div.watch-top > div.image-bg > div.image-bg-content > div.slide-block ")
|
||||||
|
val poster_saison = mainUrl + meta?.select(" div.slide-poster > img")
|
||||||
|
?.attr("src")
|
||||||
|
val seasontext = meta?.select("ul.slide-top > li:last-child > b:last-child")?.text()
|
||||||
|
var indication: String? = null
|
||||||
|
|
||||||
|
if (seasontext != null) {
|
||||||
|
seasonNumber = seasontext.toInt()
|
||||||
|
|
||||||
|
if (seasonNumber!! < 1) { // seem a an OVA has 0 as season number
|
||||||
|
seasonNumber = 1000
|
||||||
|
indication = "Vous regardez un OVA"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.select(" select.new_player_selector > option").apmap {
|
||||||
|
val typeOftheAnime = it.text()
|
||||||
|
|
||||||
|
if (typeOftheAnime != "Film") {
|
||||||
|
mediaType = TvType.Anime
|
||||||
val link =
|
val link =
|
||||||
EpisodeData(
|
EpisodeData(
|
||||||
url1,
|
urlseason,
|
||||||
it.text().replace("Episode ", ""),
|
typeOftheAnime.replace("Episode ", ""),
|
||||||
).toJson()
|
).toJson()
|
||||||
episodes.add(
|
episodes.add(
|
||||||
Episode(
|
Episode(
|
||||||
link,
|
link,
|
||||||
episode = it.text().replace("Episode ", "").toInt(),
|
episode = typeOftheAnime.replace("Episode ", "").toInt(),
|
||||||
season = saison00,
|
season = seasonNumber,
|
||||||
name = "Saison $saison00" + it.text(),
|
name = typeOftheAnime,
|
||||||
//description= description,
|
description = indication,
|
||||||
posterUrl = poster
|
posterUrl = poster_saison
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
@ -135,52 +166,7 @@ class VostfreeProvider : MainAPI() {
|
||||||
mediaType = TvType.AnimeMovie
|
mediaType = TvType.AnimeMovie
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enterInIseason = true
|
|
||||||
}
|
}
|
||||||
val poster = mainUrl + meta?.select(" div.slide-poster > img")
|
|
||||||
?.attr("src") // récupere le texte de l'attribut 'data-src'
|
|
||||||
var title = meta?.select("div.slide-middle > h1")?.text()
|
|
||||||
?: throw ErrorLoadingException("Invalid title")
|
|
||||||
|
|
||||||
|
|
||||||
val description = meta.select("div.slide-middle > div.slide-desc").first()
|
|
||||||
?.text() // first() selectione le premier élément de la liste
|
|
||||||
var season: Int?
|
|
||||||
if (enterInIseason) {
|
|
||||||
val seasontext = meta.select("ul.slide-top > li:last-child > b:last-child").text()
|
|
||||||
title = title.replace("Saison", "").replace("saison", "").replace("SAISON", "")
|
|
||||||
.replace("Season", "").replace("season", "").replace("SEASON", "")
|
|
||||||
|
|
||||||
season = seasontext.toInt()
|
|
||||||
if (season < 1) season = 2000
|
|
||||||
} else {
|
|
||||||
season = null
|
|
||||||
}
|
|
||||||
document.select(" select.new_player_selector > option").mapNotNull {
|
|
||||||
|
|
||||||
if (it.text() != "Film") {
|
|
||||||
val link =
|
|
||||||
EpisodeData(
|
|
||||||
url,
|
|
||||||
it.text().replace("Episode ", ""),
|
|
||||||
).toJson()
|
|
||||||
episodes.add(
|
|
||||||
Episode(
|
|
||||||
link,
|
|
||||||
episode = it.text().replace("Episode ", "").toInt(),
|
|
||||||
season = season,
|
|
||||||
name = "Saison ${season.toString()}" + it.text(),
|
|
||||||
//description= description,
|
|
||||||
posterUrl = poster
|
|
||||||
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
|
|
||||||
mediaType = TvType.AnimeMovie
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (mediaType == TvType.AnimeMovie) {
|
if (mediaType == TvType.AnimeMovie) {
|
||||||
return newMovieLoadResponse(
|
return newMovieLoadResponse(
|
||||||
|
@ -226,7 +212,7 @@ class VostfreeProvider : MainAPI() {
|
||||||
data
|
data
|
||||||
}
|
}
|
||||||
val noMovie = "1"
|
val noMovie = "1"
|
||||||
val noEpisode = if (parsedInfo?.episodeNumber != null) {
|
val numeroEpisode = if (parsedInfo?.episodeNumber != null) {
|
||||||
parsedInfo.episodeNumber
|
parsedInfo.episodeNumber
|
||||||
} else {
|
} else {
|
||||||
noMovie
|
noMovie
|
||||||
|
@ -237,17 +223,17 @@ class VostfreeProvider : MainAPI() {
|
||||||
.apmap { player_bottom -> // séléctione tous les players
|
.apmap { player_bottom -> // séléctione tous les players
|
||||||
|
|
||||||
// supprimer les zéro de 0015 pour obtenir l'episode 15
|
// supprimer les zéro de 0015 pour obtenir l'episode 15
|
||||||
var index = noEpisode.indexOf('0')
|
var index = numeroEpisode.indexOf('0')
|
||||||
var no = noEpisode
|
var numero = numeroEpisode
|
||||||
while (index == 0) {
|
while (index == 0) {
|
||||||
no = noEpisode.drop(1)
|
numero = numeroEpisode.drop(1)
|
||||||
index = no.indexOf('0')
|
index = numero.indexOf('0')
|
||||||
}
|
}
|
||||||
|
|
||||||
val cssQuery = " div#buttons_$no" // no numéro épisode
|
val cssQuery = " div#buttons_$numero" // numero épisode
|
||||||
val buttonsNepisode = player_bottom?.select(cssQuery)
|
val buttonsNepisode = player_bottom?.select(cssQuery)
|
||||||
?: throw ErrorLoadingException("Non player") //séléctione tous les players pour l'episode NoEpisode
|
?: throw ErrorLoadingException("Non player") //séléctione tous les players pour l'episode NoEpisode
|
||||||
buttonsNepisode.select("> div").forEach {
|
buttonsNepisode.select("> div").apmap {
|
||||||
val player = it.attr("id")
|
val player = it.attr("id")
|
||||||
.toString() //prend tous les players resultat : "player_2140" et "player_6521"
|
.toString() //prend tous les players resultat : "player_2140" et "player_6521"
|
||||||
val playerName = it.select("div#$player")
|
val playerName = it.select("div#$player")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue