feat(es/AnimeOnlineNinja): Use filemoon extractor + some fixes (#2046)
This commit is contained in:
parent
581c577c73
commit
bed46c03e6
@ -18,11 +18,12 @@ class FilemoonExtractor(private val client: OkHttpClient) {
|
|||||||
fun videosFromUrl(url: String, prefix: String = "Filemoon - ", headers: Headers? = null): List<Video> {
|
fun videosFromUrl(url: String, prefix: String = "Filemoon - ", headers: Headers? = null): List<Video> {
|
||||||
return runCatching {
|
return runCatching {
|
||||||
val doc = client.newCall(GET(url)).execute().asJsoup()
|
val doc = client.newCall(GET(url)).execute().asJsoup()
|
||||||
val jsEval = doc.selectFirst("script:containsData(eval)")!!.data()
|
val jsEval = doc.selectFirst("script:containsData(eval):containsData(m3u8)")!!.data()
|
||||||
val unpacked = JsUnpacker.unpackAndCombine(jsEval).orEmpty()
|
val unpacked = JsUnpacker.unpackAndCombine(jsEval).orEmpty()
|
||||||
val masterUrl = unpacked.takeIf(String::isNotBlank)
|
val masterUrl = unpacked.takeIf(String::isNotBlank)
|
||||||
?.substringAfter("{file:\"")
|
?.substringAfter("{file:\"", "")
|
||||||
?.substringBefore("\"}")
|
?.substringBefore("\"}", "")
|
||||||
|
?.takeIf(String::isNotBlank)
|
||||||
?: return emptyList()
|
?: return emptyList()
|
||||||
|
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl)).execute().body.string()
|
val masterPlaylist = client.newCall(GET(masterUrl)).execute().body.string()
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
|
implementation(project(':lib-filemoon-extractor'))
|
||||||
implementation(project(':lib-mixdrop-extractor'))
|
implementation(project(':lib-mixdrop-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.UploadE
|
|||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||||
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.multisrc.dooplay.DooPlay
|
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||||
@ -21,7 +22,7 @@ import uy.kohesive.injekt.api.get
|
|||||||
class AnimeOnlineNinja : DooPlay(
|
class AnimeOnlineNinja : DooPlay(
|
||||||
"es",
|
"es",
|
||||||
"AnimeOnline.Ninja",
|
"AnimeOnline.Ninja",
|
||||||
"https://www1.animeonline.ninja",
|
"https://ww3.animeonline.ninja",
|
||||||
) {
|
) {
|
||||||
override val client by lazy {
|
override val client by lazy {
|
||||||
if (preferences.getBoolean(PREF_VRF_INTERCEPT_KEY, PREF_VRF_INTERCEPT_DEFAULT)) {
|
if (preferences.getBoolean(PREF_VRF_INTERCEPT_KEY, PREF_VRF_INTERCEPT_DEFAULT)) {
|
||||||
@ -109,20 +110,28 @@ class AnimeOnlineNinja : DooPlay(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val filemoonExtractor by lazy { FilemoonExtractor(client) }
|
||||||
|
private val doodExtractor by lazy { DoodExtractor(client) }
|
||||||
|
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
||||||
|
private val mixDropExtractor by lazy { MixDropExtractor(client) }
|
||||||
|
private val uqloadExtractor by lazy { UploadExtractor(client) }
|
||||||
|
|
||||||
private fun extractVideos(url: String, lang: String): List<Video> {
|
private fun extractVideos(url: String, lang: String): List<Video> {
|
||||||
return when {
|
return when {
|
||||||
"saidochesto.top" in url || "MULTISERVER" in lang.uppercase() ->
|
"saidochesto.top" in url || "MULTISERVER" in lang.uppercase() ->
|
||||||
extractFromMulti(url)
|
extractFromMulti(url)
|
||||||
|
"filemoon" in url ->
|
||||||
|
filemoonExtractor.videosFromUrl(url, "$lang Filemoon - ", headers)
|
||||||
"dood" in url ->
|
"dood" in url ->
|
||||||
DoodExtractor(client).videoFromUrl(url, "$lang DoodStream", false)
|
doodExtractor.videoFromUrl(url, "$lang DoodStream", false)
|
||||||
?.let(::listOf)
|
?.let(::listOf)
|
||||||
"streamtape" in url ->
|
"streamtape" in url ->
|
||||||
StreamTapeExtractor(client).videoFromUrl(url, "$lang StreamTape")
|
streamTapeExtractor.videoFromUrl(url, "$lang StreamTape")
|
||||||
?.let(::listOf)
|
?.let(::listOf)
|
||||||
"mixdrop" in url ->
|
"mixdrop" in url ->
|
||||||
MixDropExtractor(client).videoFromUrl(url, lang)
|
mixDropExtractor.videoFromUrl(url, lang)
|
||||||
"uqload" in url ->
|
"uqload" in url ->
|
||||||
UploadExtractor(client).videoFromUrl(url, headers, lang)
|
uqloadExtractor.videoFromUrl(url, headers, lang)
|
||||||
?.let(::listOf)
|
?.let(::listOf)
|
||||||
"wolfstream" in url -> {
|
"wolfstream" in url -> {
|
||||||
client.newCall(GET(url, headers)).execute()
|
client.newCall(GET(url, headers)).execute()
|
||||||
|
@ -121,8 +121,10 @@ abstract class DooPlay(
|
|||||||
|
|
||||||
protected open fun getSeasonEpisodes(season: Element): List<SEpisode> {
|
protected open fun getSeasonEpisodes(season: Element): List<SEpisode> {
|
||||||
val seasonName = season.selectFirst("span.se-t")!!.text()
|
val seasonName = season.selectFirst("span.se-t")!!.text()
|
||||||
return season.select(episodeListSelector()).map { element ->
|
return season.select(episodeListSelector()).mapNotNull { element ->
|
||||||
episodeFromElement(element, seasonName)
|
runCatching {
|
||||||
|
episodeFromElement(element, seasonName)
|
||||||
|
}.onFailure { it.printStackTrace() }.getOrNull()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ class DooPlayGenerator : ThemeSourceGenerator {
|
|||||||
|
|
||||||
override val sources = listOf(
|
override val sources = listOf(
|
||||||
SingleLang("AnimeOnline360", "https://animeonline360.me", "en", isNsfw = false),
|
SingleLang("AnimeOnline360", "https://animeonline360.me", "en", isNsfw = false),
|
||||||
SingleLang("AnimeOnline.Ninja", "https://www1.animeonline.ninja", "es", className = "AnimeOnlineNinja", isNsfw = false, overrideVersionCode = 29),
|
SingleLang("AnimeOnline.Ninja", "https://ww3.animeonline.ninja", "es", className = "AnimeOnlineNinja", isNsfw = false, overrideVersionCode = 30),
|
||||||
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true, overrideVersionCode = 1),
|
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true, overrideVersionCode = 1),
|
||||||
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true),
|
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true),
|
||||||
SingleLang("AnimeSync", "https://animesync.org", "pt-BR", isNsfw = true),
|
SingleLang("AnimeSync", "https://animesync.org", "pt-BR", isNsfw = true),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user