fix(es/legionanime): Fix extractors (#2660)
This commit is contained in:
parent
9ff4ef5aa5
commit
da04720305
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'LegionAnime'
|
extName = 'LegionAnime'
|
||||||
pkgNameSuffix = 'es.legionanime'
|
pkgNameSuffix = 'es.legionanime'
|
||||||
extClass = '.LegionAnime'
|
extClass = '.LegionAnime'
|
||||||
extVersionCode = 28
|
extVersionCode = 29
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ dependencies {
|
|||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-gdriveplayer-extractor'))
|
implementation(project(':lib-streamwish-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -5,6 +5,7 @@ import android.content.SharedPreferences
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.JkanimeExtractor
|
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.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
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.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
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.mp4uploadextractor.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
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.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -271,6 +272,15 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
private fun parseExtractors(url: String, server: String): List<Video> {
|
private fun parseExtractors(url: String, server: String): List<Video> {
|
||||||
return when {
|
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") -> {
|
url.contains("streamtape") -> {
|
||||||
val video = StreamTapeExtractor(client).videoFromUrl(url, server)
|
val video = StreamTapeExtractor(client).videoFromUrl(url, server)
|
||||||
if (video != null) {
|
if (video != null) {
|
||||||
@ -280,9 +290,10 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
url.contains("jkanime") -> {
|
url.contains("jkanime") -> {
|
||||||
try {
|
val video = JkanimeExtractor(client).getDesuFromUrl(url)
|
||||||
listOf(JkanimeExtractor(client).getDesuFromUrl(url))
|
if (video != null) {
|
||||||
} catch (_: Exception) {
|
listOf(video)
|
||||||
|
} else {
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -319,14 +330,6 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
url.contains("ok.ru") -> {
|
url.contains("ok.ru") -> {
|
||||||
OkruExtractor(client).videosFromUrl(url)
|
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")) -> {
|
url.contains("flvvideo") && (url.endsWith(".m3u8") || url.endsWith(".mp4")) -> {
|
||||||
if (url.contains("http")) {
|
if (url.contains("http")) {
|
||||||
listOf(Video(url, "VideoFLV", url))
|
listOf(Video(url, "VideoFLV", url))
|
||||||
|
@ -14,7 +14,7 @@ class JkanimeExtractor(
|
|||||||
private val client: OkHttpClient,
|
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 dataKeyHeaders = Headers.Builder().add("Referer", url).build()
|
||||||
val doc = client.newCall(GET(url, dataKeyHeaders)).execute().asJsoup()
|
val doc = client.newCall(GET(url, dataKeyHeaders)).execute().asJsoup()
|
||||||
val dataKey = doc.select("form input[value]").attr("value")
|
val dataKey = doc.select("form input[value]").attr("value")
|
||||||
@ -25,19 +25,22 @@ class JkanimeExtractor(
|
|||||||
val postKey = location.substringAfter("player.html#")
|
val postKey = location.substringAfter("player.html#")
|
||||||
|
|
||||||
val nozomiBody = "v=$postKey".toRequestBody("application/x-www-form-urlencoded".toMediaTypeOrNull())
|
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 nozomiResponse = client.newCall(POST("https://jkanime.net/gsplay/api.php", body = nozomiBody)).execute()
|
||||||
|
val nozomiUrl = JSONObject(nozomiResponse.body.string()).getString("file")
|
||||||
val nozomiUrl = JSONObject(nozomiResponse).getString("file")
|
if (nozomiResponse.isSuccessful && nozomiUrl.isNotBlank()) {
|
||||||
|
return Video(nozomiUrl, "${prefix}Nozomi", nozomiUrl)
|
||||||
return Video(nozomiUrl, "Nozomi", nozomiUrl)
|
}
|
||||||
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getDesuFromUrl(url: String): Video {
|
fun getDesuFromUrl(url: String, prefix: String = ""): Video? {
|
||||||
val headers = Headers.Builder().add("Referer", "https://jkanime.net/").build()
|
val document = client.newCall(GET(url)).execute()
|
||||||
val document = client.newCall(GET(url, headers)).execute().asJsoup()
|
val script = document.asJsoup().selectFirst("script:containsData(var parts = {)")!!.data()
|
||||||
val script = document.selectFirst("script:containsData(var parts = {)")!!.data()
|
|
||||||
val streamUrl = script.substringAfter("url: '").substringBefore("'")
|
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 {
|
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