parent
2eac326793
commit
88361e0e35
6 changed files with 63 additions and 81 deletions
|
@ -36,6 +36,7 @@ class FireplayerExtractor(
|
|||
|
||||
val script =
|
||||
doc.selectFirst("script:containsData(eval):containsData(p,a,c,k,e,d)")?.data()
|
||||
?.replace(Regex("[\\u00E0-\\u00FC]"), "-") // Fix a bug in JsUnpacker with accents
|
||||
?.let(JsUnpacker::unpackAndCombine)
|
||||
?: doc.selectFirst("script:containsData(FirePlayer)")?.data()
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@ ext {
|
|||
extName = 'Pobreflix'
|
||||
extClass = '.Pobreflix'
|
||||
themePkg = 'dooplay'
|
||||
baseUrl = 'https://pobreflix1.art'
|
||||
overrideVersionCode = 10
|
||||
baseUrl = 'https://pobreflix.global'
|
||||
overrideVersionCode = 11
|
||||
isNsfw = true
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ apply from: "$rootDir/common.gradle"
|
|||
|
||||
dependencies {
|
||||
implementation(project(":lib:filemoon-extractor"))
|
||||
implementation(project(":lib:fireplayer-extractor"))
|
||||
implementation(project(":lib:streamwish-extractor"))
|
||||
implementation(project(":lib:streamtape-extractor"))
|
||||
implementation(project(":lib:playlist-utils"))
|
||||
|
|
|
@ -1,23 +1,25 @@
|
|||
package eu.kanade.tachiyomi.animeextension.pt.pobreflix
|
||||
|
||||
import android.util.Base64
|
||||
import eu.kanade.tachiyomi.animeextension.pt.pobreflix.extractors.FireplayerExtractor
|
||||
import eu.kanade.tachiyomi.animeextension.pt.pobreflix.extractors.MyStreamExtractor
|
||||
import eu.kanade.tachiyomi.animeextension.pt.pobreflix.extractors.PlayerFlixExtractor
|
||||
import eu.kanade.tachiyomi.animeextension.pt.pobreflix.extractors.SuperFlixExtractor
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||
import eu.kanade.tachiyomi.lib.fireplayerextractor.FireplayerExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Response
|
||||
|
||||
class Pobreflix : DooPlay(
|
||||
"pt-BR",
|
||||
"Pobreflix",
|
||||
"https://pobreflix1.art",
|
||||
"https://pobreflix.global",
|
||||
) {
|
||||
// ============================== Popular ===============================
|
||||
override fun popularAnimeSelector() = "div.featured div.poster"
|
||||
|
@ -26,53 +28,52 @@ class Pobreflix : DooPlay(
|
|||
override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/series/page/$page/", headers)
|
||||
|
||||
// ============================ Video Links =============================
|
||||
private val embedplayerExtractor by lazy { FireplayerExtractor(client) }
|
||||
private val brbeastExtractor by lazy { FireplayerExtractor(client, "https://brbeast.com") }
|
||||
private val superembedsExtractor by lazy { FireplayerExtractor(client, "https://superembeds.com/") }
|
||||
private val fireplayerExtractor by lazy { FireplayerExtractor(client) }
|
||||
private val filemoonExtractor by lazy { FilemoonExtractor(client) }
|
||||
private val mystreamExtractor by lazy { MyStreamExtractor(client, headers) }
|
||||
private val streamtapeExtractor by lazy { StreamTapeExtractor(client) }
|
||||
private val streamwishExtractor by lazy { StreamWishExtractor(client, headers) }
|
||||
private val playerflixExtractor by lazy { PlayerFlixExtractor(client, headers, ::genericExtractor) }
|
||||
private val superflixExtractor by lazy { SuperFlixExtractor(client, headers, ::genericExtractor) }
|
||||
private val supercdnExtractor by lazy { SuperFlixExtractor(client, headers, ::genericExtractor, "https://supercdn.org") }
|
||||
|
||||
override fun videoListParse(response: Response): List<Video> {
|
||||
val doc = response.asJsoup()
|
||||
return doc.select("div.source-box > a").flatMap {
|
||||
runCatching {
|
||||
val data = it.attr("href").toHttpUrl().queryParameter("auth")
|
||||
return doc.select("div.source-box > a").parallelCatchingFlatMapBlocking {
|
||||
val data = it.attr("href").trim().toHttpUrl().queryParameter("auth")
|
||||
?.let { Base64.decode(it, Base64.DEFAULT) }
|
||||
?.let(::String)
|
||||
?: return@flatMap emptyList()
|
||||
?: return@parallelCatchingFlatMapBlocking emptyList()
|
||||
val url = data.replace("\\", "").substringAfter("url\":\"").substringBefore('"')
|
||||
genericExtractor(url)
|
||||
}.getOrElse { emptyList() }
|
||||
}
|
||||
}
|
||||
|
||||
private fun genericExtractor(url: String, language: String = ""): List<Video> {
|
||||
val langSubstr = "[$language]"
|
||||
val langSubstr = if (language.isBlank()) "" else "[$language] "
|
||||
return when {
|
||||
url.contains("superflix") ->
|
||||
superflixExtractor.videosFromUrl(url)
|
||||
url.contains("supercdn") ->
|
||||
supercdnExtractor.videosFromUrl(url)
|
||||
url.contains("filemoon") ->
|
||||
filemoonExtractor.videosFromUrl(url, "$langSubstr Filemoon - ", headers = headers)
|
||||
filemoonExtractor.videosFromUrl(url, "${langSubstr}Filemoon - ", headers = headers)
|
||||
url.contains("watch.brplayer") || url.contains("/watch?v=") ->
|
||||
mystreamExtractor.videosFromUrl(url, language)
|
||||
url.contains("brbeast") ->
|
||||
brbeastExtractor.videosFromUrl(url, language)
|
||||
fireplayerExtractor.videosFromUrl(url = url, videoNameGen = { "${langSubstr}BrBeast - $it" })
|
||||
url.contains("embedplayer") ->
|
||||
embedplayerExtractor.videosFromUrl(url, language)
|
||||
fireplayerExtractor.videosFromUrl(url = url, videoNameGen = { "${langSubstr}EmbedPlayer - $it" })
|
||||
url.contains("superembeds") ->
|
||||
superembedsExtractor.videosFromUrl(url, language)
|
||||
fireplayerExtractor.videosFromUrl(url = url, videoNameGen = { "${langSubstr}SuperEmbeds - $it" })
|
||||
url.contains("streamtape") ->
|
||||
streamtapeExtractor.videosFromUrl(url, "$langSubstr Streamtape")
|
||||
streamtapeExtractor.videosFromUrl(url, "${langSubstr}Streamtape")
|
||||
url.contains("filelions") ->
|
||||
streamwishExtractor.videosFromUrl(url, videoNameGen = { "$langSubstr FileLions - $it" })
|
||||
streamwishExtractor.videosFromUrl(url, videoNameGen = { "${langSubstr}FileLions - $it" })
|
||||
url.contains("streamwish") ->
|
||||
streamwishExtractor.videosFromUrl(url, videoNameGen = { "$langSubstr Streamwish - $it" })
|
||||
streamwishExtractor.videosFromUrl(url, videoNameGen = { "${langSubstr}Streamwish - $it" })
|
||||
url.contains("playerflix") ->
|
||||
playerflixExtractor.videosFromUrl(url)
|
||||
else -> emptyList()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
package eu.kanade.tachiyomi.animeextension.pt.pobreflix.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 = { "[$lang] EmbedPlayer - $it" })
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package eu.kanade.tachiyomi.animeextension.pt.pobreflix.extractors
|
||||
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking
|
||||
import okhttp3.Headers
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
class PlayerFlixExtractor(
|
||||
private val client: OkHttpClient,
|
||||
private val defaultHeaders: Headers,
|
||||
private val genericExtractor: (String, String) -> List<Video>,
|
||||
) {
|
||||
fun videosFromUrl(url: String): List<Video> {
|
||||
val doc = client.newCall(GET(url, defaultHeaders)).execute().asJsoup()
|
||||
|
||||
val items = doc.select("#hostList div.buttonLoadHost").mapNotNull {
|
||||
val url = it.attr("onclick")
|
||||
.substringAfter('"', "")
|
||||
.substringBefore('"')
|
||||
?: return@mapNotNull null
|
||||
|
||||
val language = if (it.hasClass("hostDub")) {
|
||||
"Dublado"
|
||||
} else {
|
||||
"Legendado"
|
||||
}
|
||||
|
||||
language to url // (Language, videoId)
|
||||
}
|
||||
|
||||
return items.parallelCatchingFlatMapBlocking { genericExtractor(it.second, it.first) }
|
||||
}
|
||||
}
|
|
@ -18,7 +18,7 @@ class SuperFlixExtractor(
|
|||
private val client: OkHttpClient,
|
||||
private val defaultHeaders: Headers,
|
||||
private val genericExtractor: (String, String) -> List<Video>,
|
||||
private val host: String = "https://superflixapi.top",
|
||||
private val host: String = "https://superflixapi.dev",
|
||||
) {
|
||||
private val json: Json by injectLazy()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue