fix(es/legionanime): Fix extractors (#2660)
This commit is contained in:
parent
9ff4ef5aa5
commit
da04720305
@ -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"
|
||||
|
@ -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))
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
}
|
||||
}
|
@ -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);
|
||||
"""
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user