fix(pt/CineVision): Fix latest updates and video extractor (#1624)

* fix: Update BaseURL

* fix: Fix latest updates page

* fix: Fix video extractor

* feat: Create Embedflix extractor

* chore: Bump version
This commit is contained in:
Claudemirovsky
2023-05-20 07:01:31 -03:00
committed by GitHub
parent 028e98d4f2
commit d58bb7fc79
4 changed files with 67 additions and 8 deletions

View File

@ -0,0 +1,3 @@
dependencies {
implementation("dev.datlag.jsunpacker:jsunpacker:1.0.1")
}

View File

@ -1,11 +1,13 @@
package eu.kanade.tachiyomi.animeextension.pt.cinevision package eu.kanade.tachiyomi.animeextension.pt.cinevision
import eu.kanade.tachiyomi.animeextension.pt.cinevision.extractors.EmbedflixExtractor
import eu.kanade.tachiyomi.animeextension.pt.cinevision.extractors.StreamlareExtractor import eu.kanade.tachiyomi.animeextension.pt.cinevision.extractors.StreamlareExtractor
import eu.kanade.tachiyomi.animeextension.pt.cinevision.extractors.VidmolyExtractor import eu.kanade.tachiyomi.animeextension.pt.cinevision.extractors.VidmolyExtractor
import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.FormBody
import okhttp3.Response import okhttp3.Response
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
@ -13,12 +15,14 @@ import uy.kohesive.injekt.api.get
class CineVision : DooPlay( class CineVision : DooPlay(
"pt-BR", "pt-BR",
"CineVision", "CineVision",
"https://cinevision.vc", "https://cinevisionv3.online",
) { ) {
// ============================== Popular =============================== // ============================== Popular ===============================
override fun popularAnimeSelector(): String = "article.w_item_b > a" override fun popularAnimeSelector(): String = "article.w_item_b > a"
// =============================== Latest =============================== // =============================== Latest ===============================
override val latestUpdatesPath = "episodios"
override fun latestUpdatesNextPageSelector(): String = "div.resppages > a > span.fa-chevron-right" override fun latestUpdatesNextPageSelector(): String = "div.resppages > a > span.fa-chevron-right"
// ============================ Video Links ============================= // ============================ Video Links =============================
@ -36,22 +40,38 @@ class CineVision : DooPlay(
VidmolyExtractor(client).getVideoList(url, name) VidmolyExtractor(client).getVideoList(url, name)
"streamlare.com" in url -> "streamlare.com" in url ->
StreamlareExtractor(client).videosFromUrl(url, name) StreamlareExtractor(client).videosFromUrl(url, name)
"embedflix.in" in url ->
EmbedflixExtractor(client).videosFromUrl(url)
else -> emptyList<Video>() else -> emptyList<Video>()
} }
} }
private fun getPlayerUrl(player: Element): String { private fun getPlayerUrl(player: Element): String {
val type = player.attr("data-type") val body = FormBody.Builder()
val id = player.attr("data-post") .add("action", "doo_player_ajax")
val num = player.attr("data-nume") .add("post", player.attr("data-post"))
return client.newCall(GET("$baseUrl/wp-json/dooplayer/v2/$id/$type/$num")) .add("nume", player.attr("data-nume"))
.add("type", player.attr("data-type"))
.build()
return client.newCall(POST("$baseUrl/wp-admin/admin-ajax.php", headers, body))
.execute() .execute()
.use { response -> .use { response ->
response.body.string() response.body.string()
.substringAfter("\"embed_url\":\"") .substringAfter("\"embed_url\":\"")
.substringBefore("\",") .substringBefore("\",")
.replace("\\", "") .replace("\\", "")
.let { "https:$it" } .let { url ->
when {
url.contains("iframe") -> {
url.substringAfter(" src=\"")
.substringBefore("\" ")
.let { "https:$it" }
}
else -> url
}
}
} }
} }

View File

@ -0,0 +1,36 @@
package eu.kanade.tachiyomi.animeextension.pt.cinevision.extractors
import dev.datlag.jsunpacker.JsUnpacker
import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.OkHttpClient
class EmbedflixExtractor(private val client: OkHttpClient) {
fun videosFromUrl(url: String): List<Video> {
val newUrl = url.replace("/e/", "/api.php?action=getAds&key=0&lang=DUB&s=")
val iframeUrl = client.newCall(GET(newUrl)).execute()
.use { it.asJsoup() }
.selectFirst("iframe")
?.attr("src") ?: return emptyList()
val playerData = client.newCall(GET(iframeUrl)).execute()
.use { it.body.string() }
.let(JsUnpacker::unpackAndCombine)
?: return emptyList()
val masterUrl = playerData.substringAfter("file:\"").substringBefore('"')
val playlistData = client.newCall(GET(masterUrl)).execute()
.use { it.body.string() }
val separator = "#EXT-X-STREAM-INF:"
return playlistData.substringAfter(separator).split(separator).map {
val quality = it.substringAfter("RESOLUTION=")
.substringAfter("x")
.substringBefore(",") + "p"
val videoUrl = it.substringAfter("\n").substringBefore("\n")
Video(videoUrl, "EmbedFlix(DUB) - $quality", videoUrl)
}
}
}

View File

@ -16,7 +16,7 @@ class DooPlayGenerator : ThemeSourceGenerator {
SingleLang("AnimesFox BR", "https://animesfoxbr.com", "pt-BR", isNsfw = false), SingleLang("AnimesFox BR", "https://animesfoxbr.com", "pt-BR", isNsfw = false),
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true), SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true),
SingleLang("Cinemathek", "https://cinemathek.net", "de", isNsfw = true, overrideVersionCode = 11), SingleLang("Cinemathek", "https://cinemathek.net", "de", isNsfw = true, overrideVersionCode = 11),
SingleLang("CineVision", "https://cinevision.vc", "pt-BR", isNsfw = true, overrideVersionCode = 4), SingleLang("CineVision", "https://cinevisionv3.online", "pt-BR", isNsfw = true, overrideVersionCode = 5),
SingleLang("GoAnimes", "https://goanimes.net", "pt-BR", isNsfw = true), SingleLang("GoAnimes", "https://goanimes.net", "pt-BR", isNsfw = true),
SingleLang("pactedanime", "https://pactedanime.com", "en", isNsfw = false, overrideVersionCode = 4), SingleLang("pactedanime", "https://pactedanime.com", "en", isNsfw = false, overrideVersionCode = 4),
SingleLang("AnimeOnline360", "https://animeonline360.me", "en", isNsfw = false), SingleLang("AnimeOnline360", "https://animeonline360.me", "en", isNsfw = false),