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 dev.datlag.jsunpacker.JsUnpacker
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
|
@ -8,31 +8,36 @@ import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.FormBody
|
import okhttp3.FormBody
|
||||||
import okhttp3.Headers
|
import okhttp3.Headers
|
||||||
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
|
||||||
class FireplayerExtractor(private val client: OkHttpClient, private val host: String = "https://embedplayer.online") {
|
class FireplayerExtractor(
|
||||||
private val headers by lazy {
|
private val client: OkHttpClient,
|
||||||
Headers.headersOf(
|
private val defaultHost: String? = null,
|
||||||
"X-Requested-With",
|
) {
|
||||||
"XMLHttpRequest",
|
fun videosFromUrl(
|
||||||
"Referer",
|
url: String,
|
||||||
host,
|
videoNameGen: (String) -> String = { quality -> quality },
|
||||||
"Origin",
|
videoHost: String? = null,
|
||||||
host,
|
): 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("/")
|
var id = url.substringAfterLast("/")
|
||||||
|
|
||||||
if (id.length < 32) {
|
if (id.length < 32) {
|
||||||
val doc = client.newCall(GET(url, headers)).execute().asJsoup()
|
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 =
|
||||||
?.let(JsUnpacker::unpackAndCombine)
|
doc.selectFirst("script:containsData(eval):containsData(p,a,c,k,e,d)")?.data()
|
||||||
?: doc.selectFirst("script:containsData(FirePlayer)")?.data()
|
?.let(JsUnpacker::unpackAndCombine)
|
||||||
|
?: doc.selectFirst("script:containsData(FirePlayer)")?.data()
|
||||||
|
|
||||||
if (script?.contains("FirePlayer(") == true) {
|
if (script?.contains("FirePlayer(") == true) {
|
||||||
id = script.substringAfter("FirePlayer(\"").substringBefore('"')
|
id = script.substringAfter("FirePlayer(\"").substringBefore('"')
|
||||||
|
@ -51,6 +56,8 @@ class FireplayerExtractor(private val client: OkHttpClient, private val host: St
|
||||||
.substringBefore('"')
|
.substringBefore('"')
|
||||||
.replace("\\", "")
|
.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"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib:fireplayer-extractor'))
|
||||||
implementation(project(':lib:mixdrop-extractor'))
|
implementation(project(':lib:mixdrop-extractor'))
|
||||||
implementation(project(':lib:playlist-utils'))
|
implementation(project(':lib:playlist-utils'))
|
||||||
implementation(project(':lib:streamtape-extractor'))
|
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.SearchResultDto
|
||||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.VideoDto
|
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.dto.VideoListDto
|
||||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.extractors.FireplayerExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.interceptor.WebViewResolver
|
import eu.kanade.tachiyomi.animeextension.pt.vizer.interceptor.WebViewResolver
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
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.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
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.mixdropextractor.MixDropExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
@ -246,7 +246,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
|
|
||||||
private val mixdropExtractor by lazy { MixDropExtractor(client) }
|
private val mixdropExtractor by lazy { MixDropExtractor(client) }
|
||||||
private val streamtapeExtractor by lazy { StreamTapeExtractor(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> {
|
private fun getVideosFromObject(videoObj: VideoDto): List<Video> {
|
||||||
val hosters = videoObj.hosters ?: return emptyList()
|
val hosters = videoObj.hosters ?: return emptyList()
|
||||||
|
@ -254,7 +254,8 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
val langPrefix = if (videoObj.lang == "1") "LEG" else "DUB"
|
val langPrefix = if (videoObj.lang == "1") "LEG" else "DUB"
|
||||||
|
|
||||||
return hosters.iterator().flatMap { (name, status) ->
|
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)
|
val url = getPlayerUrl(videoObj.id, name)
|
||||||
if (url.isNullOrBlank()) {
|
if (url.isNullOrBlank()) {
|
||||||
return emptyList()
|
return emptyList()
|
||||||
|
@ -262,7 +263,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
when (name) {
|
when (name) {
|
||||||
"mixdrop" -> mixdropExtractor.videosFromUrl(url, langPrefix)
|
"mixdrop" -> mixdropExtractor.videosFromUrl(url, langPrefix)
|
||||||
"streamtape" -> streamtapeExtractor.videosFromUrl(url, "StreamTape($langPrefix)")
|
"streamtape" -> streamtapeExtractor.videosFromUrl(url, "StreamTape($langPrefix)")
|
||||||
"warezcdn" -> fireplayerExtractor.videosFromUrl(url, langPrefix)
|
"warezcdn" -> fireplayerExtractor.videosFromUrl(url, videoNameGen = { "WarezCDN($langPrefix) - $it" })
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue