feat(es/AnimeOnlineNinja): Use filemoon extractor + some fixes (#2046)

This commit is contained in:
Claudemirovsky 2023-08-14 18:09:48 -03:00 committed by GitHub
parent 581c577c73
commit bed46c03e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 11 deletions

View File

@ -18,11 +18,12 @@ class FilemoonExtractor(private val client: OkHttpClient) {
fun videosFromUrl(url: String, prefix: String = "Filemoon - ", headers: Headers? = null): List<Video> {
return runCatching {
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 masterUrl = unpacked.takeIf(String::isNotBlank)
?.substringAfter("{file:\"")
?.substringBefore("\"}")
?.substringAfter("{file:\"", "")
?.substringBefore("\"}", "")
?.takeIf(String::isNotBlank)
?: return emptyList()
val masterPlaylist = client.newCall(GET(masterUrl)).execute().body.string()

View File

@ -1,5 +1,6 @@
dependencies {
implementation(project(':lib-streamtape-extractor'))
implementation(project(':lib-dood-extractor'))
implementation(project(':lib-filemoon-extractor'))
implementation(project(':lib-mixdrop-extractor'))
}

View File

@ -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.Video
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.streamtapeextractor.StreamTapeExtractor
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
@ -21,7 +22,7 @@ import uy.kohesive.injekt.api.get
class AnimeOnlineNinja : DooPlay(
"es",
"AnimeOnline.Ninja",
"https://www1.animeonline.ninja",
"https://ww3.animeonline.ninja",
) {
override val client by lazy {
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> {
return when {
"saidochesto.top" in url || "MULTISERVER" in lang.uppercase() ->
extractFromMulti(url)
"filemoon" in url ->
filemoonExtractor.videosFromUrl(url, "$lang Filemoon - ", headers)
"dood" in url ->
DoodExtractor(client).videoFromUrl(url, "$lang DoodStream", false)
doodExtractor.videoFromUrl(url, "$lang DoodStream", false)
?.let(::listOf)
"streamtape" in url ->
StreamTapeExtractor(client).videoFromUrl(url, "$lang StreamTape")
streamTapeExtractor.videoFromUrl(url, "$lang StreamTape")
?.let(::listOf)
"mixdrop" in url ->
MixDropExtractor(client).videoFromUrl(url, lang)
mixDropExtractor.videoFromUrl(url, lang)
"uqload" in url ->
UploadExtractor(client).videoFromUrl(url, headers, lang)
uqloadExtractor.videoFromUrl(url, headers, lang)
?.let(::listOf)
"wolfstream" in url -> {
client.newCall(GET(url, headers)).execute()

View File

@ -121,8 +121,10 @@ abstract class DooPlay(
protected open fun getSeasonEpisodes(season: Element): List<SEpisode> {
val seasonName = season.selectFirst("span.se-t")!!.text()
return season.select(episodeListSelector()).map { element ->
return season.select(episodeListSelector()).mapNotNull { element ->
runCatching {
episodeFromElement(element, seasonName)
}.onFailure { it.printStackTrace() }.getOrNull()
}
}

View File

@ -12,7 +12,7 @@ class DooPlayGenerator : ThemeSourceGenerator {
override val sources = listOf(
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),
SingleLang("AnimeSync", "https://animesync.org", "pt-BR", isNsfw = true),