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
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
package eu.kanade.tachiyomi.animeextension.pt.vizer.extractors
|
||||
|
||||
import dev.datlag.jsunpacker.JsUnpacker
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Headers
|
||||
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,
|
||||
)
|
||||
}
|
||||
|
||||
private val playlistUtils by lazy { PlaylistUtils(client, headers) }
|
||||
|
||||
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()
|
||||
?.let(JsUnpacker::unpackAndCombine)
|
||||
?: doc.selectFirst("script:containsData(FirePlayer)")?.data()
|
||||
|
||||
if (script?.contains("FirePlayer(") == true) {
|
||||
id = script.substringAfter("FirePlayer(\"").substringBefore('"')
|
||||
}
|
||||
}
|
||||
|
||||
val postUrl = "$host/player/index.php?data=$id&do=getVideo"
|
||||
val body = FormBody.Builder()
|
||||
.add("hash", id)
|
||||
.add("r", "")
|
||||
.build()
|
||||
|
||||
val masterUrl = client.newCall(POST(postUrl, headers, body = body)).execute()
|
||||
.body.string()
|
||||
.substringAfter("securedLink\":\"")
|
||||
.substringBefore('"')
|
||||
.replace("\\", "")
|
||||
|
||||
return playlistUtils.extractFromHls(masterUrl, videoNameGen = { "WarezCDN($lang) - $it" })
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue