fixes in [MonosChinos] , [AnimeOnlineNinja] and [LegionAnime] (#1228)

This commit is contained in:
Diego Peña y Lillo
2023-02-01 05:06:00 -03:00
committed by GitHub
parent c3645048c8
commit 0b574a910f
9 changed files with 96 additions and 28 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'AnimeonlineNinja' extName = 'AnimeonlineNinja'
pkgNameSuffix = 'es.animeonlineninja' pkgNameSuffix = 'es.animeonlineninja'
extClass = '.AnimeonlineNinja' extClass = '.AnimeonlineNinja'
extVersionCode = 16 extVersionCode = 17
libVersion = '13' libVersion = '13'
} }

View File

@ -66,16 +66,18 @@ class AnimeonlineNinja : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
if (url.contains("/pelicula/")) { if (url.contains("/pelicula/")) {
document.select("ul#playeroptionsul li").forEach { document.select("ul#playeroptionsul li").forEach {
val epNum = it.attr("data-nume").toFloat() if (it.attr("data-nume").toFloatOrNull() != null) {
val epName = it.select("span.title").text() val epNum = it.attr("data-nume").toFloat()
val epName = it.select("span.title").text()
val episode = SEpisode.create().apply { val episode = SEpisode.create().apply {
episode_number = epNum episode_number = epNum
name = epName name = epName
setUrlWithoutDomain("$url?$epNum") setUrlWithoutDomain("$url?$epNum")
}
episodes.add(episode)
} }
episodes.add(episode)
} }
return episodes return episodes
} }

View File

@ -5,7 +5,7 @@ ext {
extName = 'LegionAnime' extName = 'LegionAnime'
pkgNameSuffix = 'es.legionanime' pkgNameSuffix = 'es.legionanime'
extClass = '.LegionAnime' extClass = '.LegionAnime'
extVersionCode = 8 extVersionCode = 9
libVersion = '13' libVersion = '13'
} }

View File

@ -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.Mp4uploadExtractor
import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.YourUploadExtractor import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.YourUploadExtractor
import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.ZippyExtractor import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.ZippyExtractor
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
@ -63,7 +64,7 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val jsonResponse = json.decodeFromString<JsonObject>(document.body().text())["response"]!!.jsonObject val jsonResponse = json.decodeFromString<JsonObject>(document.body().text())["response"]!!.jsonObject
val anime = jsonResponse["anime"]!!.jsonObject val anime = jsonResponse["anime"]!!.jsonObject
val studioId = anime["studios"]!!.jsonPrimitive.content.split(",") val studioId = anime["studios"]!!.jsonPrimitive.content.split(",")
val studio = studioId.map { id -> studiosMap.filter { it.value == id.toInt() }.keys.first() } val studio = try { studioId.map { id -> studiosMap.filter { it.value == id.toInt() }.keys.first() } } catch (e: Exception) { emptyList() }
return SAnime.create().apply { return SAnime.create().apply {
title = anime["name"]!!.jsonPrimitive.content title = anime["name"]!!.jsonPrimitive.content
description = anime["synopsis"]!!.jsonPrimitive.content description = anime["synopsis"]!!.jsonPrimitive.content
@ -239,6 +240,10 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val videoUrl = hostUrl + videoUrlD val videoUrl = hostUrl + videoUrlD
videoList.add(Video(videoUrl, server, videoUrl)) videoList.add(Video(videoUrl, server, videoUrl))
} }
url.contains("mp4upload") -> {
val videoHeaders = headersBuilder().add("Referer", "https://mp4upload.com/").build()
videoList.add(Mp4uploadExtractor().getVideoFromUrl(url, videoHeaders))
}
} }
} catch (_: Exception) { } catch (_: Exception) {
// ignore // ignore

View File

@ -4,6 +4,14 @@ import eu.kanade.tachiyomi.animesource.model.Video
import okhttp3.Headers import okhttp3.Headers
import org.jsoup.Connection import org.jsoup.Connection
import org.jsoup.Jsoup import org.jsoup.Jsoup
import java.security.KeyManagementException
import java.security.NoSuchAlgorithmException
import java.security.SecureRandom
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLSocketFactory
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
class Mp4uploadExtractor { class Mp4uploadExtractor {
fun getVideoFromUrl(url: String, headers: Headers): Video { fun getVideoFromUrl(url: String, headers: Headers): Video {
@ -19,10 +27,30 @@ class Mp4uploadExtractor {
"method_premiun" to "", "method_premiun" to "",
) )
).method(Connection.Method.POST).ignoreContentType(true) ).method(Connection.Method.POST).ignoreContentType(true)
.ignoreHttpErrors(true).execute().url().toString() .ignoreHttpErrors(true).sslSocketFactory(this.socketFactory()).execute().url().toString()
Video(videoUrl, "Mp4Upload", videoUrl, headers) Video(videoUrl, "Mp4Upload", videoUrl, headers)
} catch (e: Exception) { } catch (e: Exception) {
Video("", "", "") Video("", "", "")
} }
} }
fun socketFactory(): SSLSocketFactory {
val trustAllCerts = arrayOf<TrustManager>(
object : X509TrustManager {
override fun getAcceptedIssuers() = arrayOf<X509Certificate>()
override fun checkClientTrusted(certs: Array<X509Certificate>, authType: String) {}
override fun checkServerTrusted(certs: Array<X509Certificate>, authType: String) {}
}
)
return try {
val sslContext: SSLContext = SSLContext.getInstance("SSL")
sslContext.init(null, trustAllCerts, SecureRandom())
sslContext.socketFactory
} catch (e: NoSuchAlgorithmException) {
throw RuntimeException("Failed to create a SSL socket factory", e)
} catch (e: KeyManagementException) {
throw RuntimeException("Failed to create a SSL socket factory", e)
}
}
} }

View File

@ -5,7 +5,7 @@ ext {
extName = 'MonosChinos' extName = 'MonosChinos'
pkgNameSuffix = 'es.monoschinos' pkgNameSuffix = 'es.monoschinos'
extClass = '.MonosChinos' extClass = '.MonosChinos'
extVersionCode = 18 extVersionCode = 19
libVersion = '13' libVersion = '13'
} }

View File

@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.animeextension.es.monoschinos
import android.app.Application import android.app.Application
import android.content.SharedPreferences import android.content.SharedPreferences
import android.util.Base64 import android.util.Base64
import android.util.Log
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.Mp4uploadExtractor import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.Mp4uploadExtractor
@ -87,21 +88,22 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
// val server = it.select("a").text() // val server = it.select("a").text()
val urlBase64 = it.select("a").attr("data-player") val urlBase64 = it.select("a").attr("data-player")
val url = Base64.decode(urlBase64, Base64.DEFAULT).toString(Charsets.UTF_8).substringAfter("=") val url = Base64.decode(urlBase64, Base64.DEFAULT).toString(Charsets.UTF_8).substringAfter("=")
when { when {
url.contains("fembed") -> videoList.addAll(FembedExtractor(client).videosFromUrl(url)) url.contains("fembed") -> videoList.addAll(FembedExtractor(client).videosFromUrl(url))
url.contains("ok") -> if (!url.contains("streamcherry")) videoList.addAll(OkruExtractor(client).videosFromUrl(url)) url.contains("ok") -> if (!url.contains("streamcherry")) videoList.addAll(OkruExtractor(client).videosFromUrl(url))
url.contains("solidfiles") -> videoList.addAll(SolidFilesExtractor(client).videosFromUrl(url)) url.contains("solidfiles") -> videoList.addAll(SolidFilesExtractor(client).videosFromUrl(url))
url.contains("uqload") -> { url.contains("uqload") -> {
val video = UploadExtractor(client).videoFromUrl(url, headers) val video = UploadExtractor(client).videoFromUrl(url, headers)
if (video != null) videoList.add(video) if (video != null) videoList.add(video)
}
url.contains("mp4upload") -> {
val videoHeaders = headersBuilder().add("Referer", "https://mp4upload.com/").build()
videoList.add(Mp4uploadExtractor().getVideoFromUrl(url, videoHeaders))
}
} }
url.contains("mp4upload") -> {
val videoHeaders = headersBuilder().add("Referer", "https://mp4upload.com/").build()
videoList.add(Mp4uploadExtractor().getVideoFromUrl(url, videoHeaders))
}
}
} }
return videoList
return videoList.filter { video -> video.url.contains("http") }
} }
override fun videoListSelector() = throw Exception("not used") override fun videoListSelector() = throw Exception("not used")
@ -132,7 +134,7 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
} }
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
val genreFilter = filters.find { it is GenreFilter } as GenreFilter val genreFilter = (filters.find { it is GenreFilter } as? GenreFilter?) ?: GenreFilter()
val yearFilter = try { val yearFilter = try {
(filters.find { it is YearFilter } as YearFilter).state.toInt() (filters.find { it is YearFilter } as YearFilter).state.toInt()
} catch (e: Exception) { } catch (e: Exception) {

View File

@ -4,6 +4,14 @@ import eu.kanade.tachiyomi.animesource.model.Video
import okhttp3.Headers import okhttp3.Headers
import org.jsoup.Connection import org.jsoup.Connection
import org.jsoup.Jsoup import org.jsoup.Jsoup
import java.security.KeyManagementException
import java.security.NoSuchAlgorithmException
import java.security.SecureRandom
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLSocketFactory
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
class Mp4uploadExtractor { class Mp4uploadExtractor {
fun getVideoFromUrl(url: String, headers: Headers): Video { fun getVideoFromUrl(url: String, headers: Headers): Video {
@ -19,10 +27,29 @@ class Mp4uploadExtractor {
"method_premiun" to "", "method_premiun" to "",
) )
).method(Connection.Method.POST).ignoreContentType(true) ).method(Connection.Method.POST).ignoreContentType(true)
.ignoreHttpErrors(true).execute().url().toString() .ignoreHttpErrors(true).sslSocketFactory(this.socketFactory()).execute().url().toString()
Video(videoUrl, "Mp4Upload", videoUrl, headers) Video(videoUrl, "Mp4Upload", videoUrl, headers)
} catch (e: Exception) { } catch (e: Exception) {
Video("", "", "") Video("", "", "")
} }
} }
fun socketFactory(): SSLSocketFactory {
val trustAllCerts = arrayOf<TrustManager>(
object : X509TrustManager {
override fun getAcceptedIssuers() = arrayOf<X509Certificate>()
override fun checkClientTrusted(certs: Array<X509Certificate>, authType: String) {}
override fun checkServerTrusted(certs: Array<X509Certificate>, authType: String) {}
}
)
return try {
val sslContext: SSLContext = SSLContext.getInstance("SSL")
sslContext.init(null, trustAllCerts, SecureRandom())
sslContext.socketFactory
} catch (e: NoSuchAlgorithmException) {
throw RuntimeException("Failed to create a SSL socket factory", e)
} catch (e: KeyManagementException) {
throw RuntimeException("Failed to create a SSL socket factory", e)
}
}
} }

View File

@ -11,6 +11,10 @@ class UploadExtractor(private val client: OkHttpClient) {
return try { return try {
val document = client.newCall(GET(url)).execute().asJsoup() val document = client.newCall(GET(url)).execute().asJsoup()
val basicUrl = document.selectFirst("script:containsData(var player =)").data().substringAfter("sources: [\"").substringBefore("\"],") val basicUrl = document.selectFirst("script:containsData(var player =)").data().substringAfter("sources: [\"").substringBefore("\"],")
if (!basicUrl.contains("http")) {
return null
}
return Video(basicUrl, "Uqload", basicUrl, headers = headers) return Video(basicUrl, "Uqload", basicUrl, headers = headers)
} catch (e: Exception) { } catch (e: Exception) {
null null