fix(es/legionanime): Fix extractors (#2660)

This commit is contained in:
Diego Peña y Lillo 2023-12-23 08:44:32 -03:00 committed by GitHub
parent 9ff4ef5aa5
commit da04720305
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 53 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'LegionAnime'
pkgNameSuffix = 'es.legionanime'
extClass = '.LegionAnime'
extVersionCode = 28
extVersionCode = 29
libVersion = '13'
}
@ -16,7 +16,7 @@ dependencies {
implementation(project(':lib-streamtape-extractor'))
implementation(project(':lib-okru-extractor'))
implementation(project(':lib-dood-extractor'))
implementation(project(':lib-gdriveplayer-extractor'))
implementation(project(':lib-streamwish-extractor'))
}
apply from: "$rootDir/common.gradle"

View File

@ -5,6 +5,7 @@ import android.content.SharedPreferences
import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.JkanimeExtractor
import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.MediaFireExtractor
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
@ -14,10 +15,10 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
import eu.kanade.tachiyomi.network.GET
@ -271,6 +272,15 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
private fun parseExtractors(url: String, server: String): List<Video> {
return when {
url.contains("streamwish") -> StreamWishExtractor(client, headers).videosFromUrl(url, prefix = "StreamWish")
url.contains("mediafire") -> {
val video = MediaFireExtractor(client).getVideoFromUrl(url, server)
if (video != null) {
listOf(video)
} else {
emptyList()
}
}
url.contains("streamtape") -> {
val video = StreamTapeExtractor(client).videoFromUrl(url, server)
if (video != null) {
@ -280,9 +290,10 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
}
url.contains("jkanime") -> {
try {
listOf(JkanimeExtractor(client).getDesuFromUrl(url))
} catch (_: Exception) {
val video = JkanimeExtractor(client).getDesuFromUrl(url)
if (video != null) {
listOf(video)
} else {
emptyList()
}
}
@ -319,14 +330,6 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
url.contains("ok.ru") -> {
OkruExtractor(client).videosFromUrl(url)
}
url.contains("drive.google") -> {
try {
val newUrl = "http://gdriveplayer.to/embed2.php?link=" + url.replace("preview", "view").replace("u/2/", "")
GdrivePlayerExtractor(client).videosFromUrl(newUrl, "Gdrive", headers)
} catch (_: Exception) {
emptyList()
}
}
url.contains("flvvideo") && (url.endsWith(".m3u8") || url.endsWith(".mp4")) -> {
if (url.contains("http")) {
listOf(Video(url, "VideoFLV", url))

View File

@ -14,7 +14,7 @@ class JkanimeExtractor(
private val client: OkHttpClient,
) {
fun getNozomiFromUrl(url: String): Video {
fun getNozomiFromUrl(url: String, prefix: String = ""): Video? {
val dataKeyHeaders = Headers.Builder().add("Referer", url).build()
val doc = client.newCall(GET(url, dataKeyHeaders)).execute().asJsoup()
val dataKey = doc.select("form input[value]").attr("value")
@ -25,19 +25,22 @@ class JkanimeExtractor(
val postKey = location.substringAfter("player.html#")
val nozomiBody = "v=$postKey".toRequestBody("application/x-www-form-urlencoded".toMediaTypeOrNull())
val nozomiResponse = client.newCall(POST("https://jkanime.net/gsplay/api.php", body = nozomiBody)).execute().body.string()
val nozomiUrl = JSONObject(nozomiResponse).getString("file")
return Video(nozomiUrl, "Nozomi", nozomiUrl)
val nozomiResponse = client.newCall(POST("https://jkanime.net/gsplay/api.php", body = nozomiBody)).execute()
val nozomiUrl = JSONObject(nozomiResponse.body.string()).getString("file")
if (nozomiResponse.isSuccessful && nozomiUrl.isNotBlank()) {
return Video(nozomiUrl, "${prefix}Nozomi", nozomiUrl)
}
return null
}
fun getDesuFromUrl(url: String): Video {
val headers = Headers.Builder().add("Referer", "https://jkanime.net/").build()
val document = client.newCall(GET(url, headers)).execute().asJsoup()
val script = document.selectFirst("script:containsData(var parts = {)")!!.data()
fun getDesuFromUrl(url: String, prefix: String = ""): Video? {
val document = client.newCall(GET(url)).execute()
val script = document.asJsoup().selectFirst("script:containsData(var parts = {)")!!.data()
val streamUrl = script.substringAfter("url: '").substringBefore("'")
return Video(streamUrl, "Desu", streamUrl)
if (document.isSuccessful && streamUrl.isNotBlank()) {
return Video(streamUrl, "${prefix}Desu", streamUrl)
}
return null
}
fun amazonExtractor(url: String): String {

View File

@ -0,0 +1,19 @@
package eu.kanade.tachiyomi.animeextension.es.legionanime.extractors
import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.OkHttpClient
class MediaFireExtractor(
private val client: OkHttpClient,
) {
fun getVideoFromUrl(url: String, prefix: String = ""): Video? {
val document = client.newCall(GET(url)).execute()
val downloadUrl = document.asJsoup().selectFirst("a#downloadButton")?.attr("href")
if (!downloadUrl.isNullOrBlank()) {
return Video(downloadUrl, "${prefix}-MediaFire", downloadUrl)
}
return null
}
}

View File

@ -1,28 +0,0 @@
package eu.kanade.tachiyomi.animeextension.es.legionanime.extractors
import app.cash.quickjs.QuickJs
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.jsonPrimitive
import org.jsoup.Jsoup
class ZippyExtractor {
fun getVideoUrl(url: String, json: Json): String {
val document = Jsoup.connect(url).get()
val jscript = document.selectFirst("script:containsData(dlbutton)")!!.data()
.replace("document.getElementById('dlbutton').href", "a")
.replace("document.getElementById('fimage').href", "b")
.replace("document.getElementById('fimage')", "false")
val quickjs = QuickJs.create()
val objectA = quickjs.evaluate(objectScript(jscript)).toString()
quickjs.close()
return json.decodeFromString<JsonObject>(objectA)["a"]!!.jsonPrimitive.content
}
private fun objectScript(script: String) = """
$script;
let return_object = {a:a};
JSON.stringify(return_object);
"""
}