feat: Added new lib extractor: fireplayer-extractor
This commit is contained in:
parent
ec8981576a
commit
aa2b5807d5
4 changed files with 41 additions and 22 deletions
10
lib/fireplayer-extractor/build.gradle.kts
Normal file
10
lib/fireplayer-extractor/build.gradle.kts
Normal file
|
@ -0,0 +1,10 @@
|
|||
plugins {
|
||||
id("lib-android")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("dev.datlag.jsunpacker:jsunpacker:1.0.1") {
|
||||
exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-jdk8")
|
||||
}
|
||||
implementation(project(":lib:playlist-utils"))
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package eu.kanade.tachiyomi.animeextension.pt.vizer.extractors
|
||||
package eu.kanade.tachiyomi.lib.fireplayerextractor
|
||||
|
||||
import dev.datlag.jsunpacker.JsUnpacker
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
|
@ -8,29 +8,34 @@ import eu.kanade.tachiyomi.network.POST
|
|||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
class FireplayerExtractor(private val client: OkHttpClient, private val host: String = "https://embedplayer.online") {
|
||||
private val headers by lazy {
|
||||
Headers.headersOf(
|
||||
"X-Requested-With",
|
||||
"XMLHttpRequest",
|
||||
"Referer",
|
||||
host,
|
||||
"Origin",
|
||||
host,
|
||||
)
|
||||
}
|
||||
class FireplayerExtractor(
|
||||
private val client: OkHttpClient,
|
||||
private val defaultHost: String? = null,
|
||||
) {
|
||||
fun videosFromUrl(
|
||||
url: String,
|
||||
videoNameGen: (String) -> String = { quality -> quality },
|
||||
videoHost: String? = null,
|
||||
): List<Video> {
|
||||
val host = videoHost ?: defaultHost ?: "https://${url.toHttpUrl().host}"
|
||||
|
||||
private val playlistUtils by lazy { PlaylistUtils(client, headers) }
|
||||
val headers = Headers.Builder()
|
||||
.set("X-Requested-With", "XMLHttpRequest")
|
||||
.set("Referer", host)
|
||||
.set("Origin", "https://${host.toHttpUrl().host}")
|
||||
.set("X-Requested-With", "XMLHttpRequest")
|
||||
.build()
|
||||
|
||||
fun videosFromUrl(url: String, lang: String): List<Video> {
|
||||
var id = url.substringAfterLast("/")
|
||||
|
||||
if (id.length < 32) {
|
||||
val doc = client.newCall(GET(url, headers)).execute().asJsoup()
|
||||
|
||||
val script = doc.selectFirst("script:containsData(eval):containsData(p,a,c,k,e,d)")?.data()
|
||||
val script =
|
||||
doc.selectFirst("script:containsData(eval):containsData(p,a,c,k,e,d)")?.data()
|
||||
?.let(JsUnpacker::unpackAndCombine)
|
||||
?: doc.selectFirst("script:containsData(FirePlayer)")?.data()
|
||||
|
||||
|
@ -51,6 +56,8 @@ class FireplayerExtractor(private val client: OkHttpClient, private val host: St
|
|||
.substringBefore('"')
|
||||
.replace("\\", "")
|
||||
|
||||
return playlistUtils.extractFromHls(masterUrl, videoNameGen = { "WarezCDN($lang) - $it" })
|
||||
val playlistUtils = PlaylistUtils(client, headers)
|
||||
|
||||
return playlistUtils.extractFromHls(masterUrl, videoNameGen = videoNameGen)
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ ext {
|
|||
apply from: "$rootDir/common.gradle"
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib:fireplayer-extractor'))
|
||||
implementation(project(':lib:mixdrop-extractor'))
|
||||
implementation(project(':lib:playlist-utils'))
|
||||
implementation(project(':lib:streamtape-extractor'))
|
||||
|
|
|
@ -10,7 +10,6 @@ import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.SearchItemDto
|
|||
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.SearchResultDto
|
||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.VideoDto
|
||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.VideoListDto
|
||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.extractors.FireplayerExtractor
|
||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.interceptor.WebViewResolver
|
||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||
|
@ -19,6 +18,7 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.fireplayerextractor.FireplayerExtractor
|
||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
|
@ -246,7 +246,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
|
||||
private val mixdropExtractor by lazy { MixDropExtractor(client) }
|
||||
private val streamtapeExtractor by lazy { StreamTapeExtractor(client) }
|
||||
private val fireplayerExtractor by lazy { FireplayerExtractor(client, "https://basseqwevewcewcewecwcw.xyz") }
|
||||
private val fireplayerExtractor by lazy { FireplayerExtractor(client) }
|
||||
|
||||
private fun getVideosFromObject(videoObj: VideoDto): List<Video> {
|
||||
val hosters = videoObj.hosters ?: return emptyList()
|
||||
|
@ -254,7 +254,8 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
val langPrefix = if (videoObj.lang == "1") "LEG" else "DUB"
|
||||
|
||||
return hosters.iterator().flatMap { (name, status) ->
|
||||
if (status != 3) return@flatMap emptyList()
|
||||
// Always try the warezcdn
|
||||
if (status != 3 && name != "warezcdn") return@flatMap emptyList()
|
||||
val url = getPlayerUrl(videoObj.id, name)
|
||||
if (url.isNullOrBlank()) {
|
||||
return emptyList()
|
||||
|
@ -262,7 +263,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
when (name) {
|
||||
"mixdrop" -> mixdropExtractor.videosFromUrl(url, langPrefix)
|
||||
"streamtape" -> streamtapeExtractor.videosFromUrl(url, "StreamTape($langPrefix)")
|
||||
"warezcdn" -> fireplayerExtractor.videosFromUrl(url, langPrefix)
|
||||
"warezcdn" -> fireplayerExtractor.videosFromUrl(url, videoNameGen = { "WarezCDN($langPrefix) - $it" })
|
||||
else -> emptyList()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue