Some changes and fixes [Tioanime] [MonosChinos] [AnimeOnlineNinja] [AnimeFLV] (#653)
* Fix search [Tioanime], fix version [AnimeOnlineNinja]] * fix in MixdropExtractor [AnimeOnlineNinja] * removed a lot of useless tags [AnimeOnlineNinja] * New filters [TioAnime] * fix titles and new server [MonosChinos] * New server (Uqload) [AnimeOnlineNinja]
This commit is contained in:
committed by
GitHub
parent
7cea39140c
commit
2c7e2679d1
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'AnimeFLV'
|
extName = 'AnimeFLV'
|
||||||
pkgNameSuffix = 'es.animeflv'
|
pkgNameSuffix = 'es.animeflv'
|
||||||
extClass = '.AnimeFlv'
|
extClass = '.AnimeFlv'
|
||||||
extVersionCode = 21
|
extVersionCode = 22
|
||||||
libVersion = '12'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ class AnimeFlv : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override val lang = "es"
|
override val lang = "es"
|
||||||
|
|
||||||
override val supportsLatest = true
|
override val supportsLatest = false
|
||||||
|
|
||||||
override val client: OkHttpClient = network.cloudflareClient
|
override val client: OkHttpClient = network.cloudflareClient
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'AnimeonlineNinja'
|
extName = 'AnimeonlineNinja'
|
||||||
pkgNameSuffix = 'es.animeonlineninja'
|
pkgNameSuffix = 'es.animeonlineninja'
|
||||||
extClass = '.AnimeonlineNinja'
|
extClass = '.AnimeonlineNinja'
|
||||||
extVersionCode = 1
|
extVersionCode = 2
|
||||||
libVersion = '12'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.FembedE
|
|||||||
import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.JsUnpacker
|
import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.JsUnpacker
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.StreamSBExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.StreamSBExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.StreamTapeExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.StreamTapeExtractor
|
||||||
|
import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.uploadExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||||
@ -150,9 +151,11 @@ class AnimeonlineNinja : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
serverUrl.contains("mixdrop") && lang.contains(langSelect) -> {
|
serverUrl.contains("mixdrop") && lang.contains(langSelect) -> {
|
||||||
val jsE = client.newCall(GET(serverUrl)).execute().asJsoup().selectFirst("script:containsData(eval)").data()
|
val jsE = client.newCall(GET(serverUrl)).execute().asJsoup().selectFirst("script:containsData(eval)").data()
|
||||||
val url = "http:" + JsUnpacker(jsE).unpack().toString().substringAfter("MDCore.wurl=\"").substringBefore("\"")
|
if (jsE.contains("MDCore")) {
|
||||||
if (!url.contains("\$(document).ready(function(){});")) {
|
val url = "http:" + JsUnpacker(jsE).unpack().toString().substringAfter("MDCore.wurl=\"").substringBefore("\"")
|
||||||
videos.add(Video(url, "$lang MixDrop", url, null))
|
if (!url.contains("\$(document).ready(function(){});")) {
|
||||||
|
videos.add(Video(url, "$lang MixDrop", url, null))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
serverUrl.contains("wolfstream") && lang.contains(langSelect) -> {
|
serverUrl.contains("wolfstream") && lang.contains(langSelect) -> {
|
||||||
@ -160,6 +163,11 @@ class AnimeonlineNinja : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val url = jsE.substringAfter("{file:\"").substringBefore("\"")
|
val url = jsE.substringAfter("{file:\"").substringBefore("\"")
|
||||||
videos.add(Video(url, "$lang WolfStream", url, null))
|
videos.add(Video(url, "$lang WolfStream", url, null))
|
||||||
}
|
}
|
||||||
|
serverUrl.contains("uqload") && lang.contains(langSelect) -> {
|
||||||
|
val headers = headers.newBuilder().add("referer", "https://uqload.com/").build()
|
||||||
|
val video = uploadExtractor(client).videofromurl(serverUrl, headers, lang)
|
||||||
|
videos.add(video)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return videos
|
return videos
|
||||||
@ -207,11 +215,12 @@ class AnimeonlineNinja : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun animeDetailsParse(document: Document): SAnime {
|
override fun animeDetailsParse(document: Document): SAnime {
|
||||||
val anime = SAnime.create()
|
val anime = SAnime.create()
|
||||||
anime.title = document.select("div.sheader div.data h1").text()
|
anime.title = document.select("div.sheader div.data h1").text()
|
||||||
anime.genre = document.select("div.sheader div.data div.sgeneros a").joinToString {
|
val uselessTags = listOf("supergoku", "younime", "zonamixs", "monoschinos", "otakustv", "Hanaojara", "series flv", "zenkimex", "Crunchyroll")
|
||||||
if (!it.text().lowercase().contains("anime")) {
|
anime.genre = document.select("div.sheader div.data div.sgeneros a").joinToString("") {
|
||||||
it.text()
|
if (it.text() in uselessTags || it.text().lowercase().contains("anime")) {
|
||||||
} else {
|
|
||||||
""
|
""
|
||||||
|
} else {
|
||||||
|
it.text() + ", "
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
anime.description = document.select("div.wp-content p").joinToString { it.text() }
|
anime.description = document.select("div.wp-content p").joinToString { it.text() }
|
||||||
|
@ -6,7 +6,7 @@ import org.jsoup.Connection
|
|||||||
import org.jsoup.Jsoup
|
import org.jsoup.Jsoup
|
||||||
|
|
||||||
class FembedExtractor {
|
class FembedExtractor {
|
||||||
fun videosFromUrl(url: String, lang: String): List<Video> {
|
fun videosFromUrl(url: String, qualityP: String): List<Video> {
|
||||||
val videoApi = url.replace("/v/", "/api/source/")
|
val videoApi = url.replace("/v/", "/api/source/")
|
||||||
val json = JSONObject(Jsoup.connect(videoApi).ignoreContentType(true).method(Connection.Method.POST).execute().body())
|
val json = JSONObject(Jsoup.connect(videoApi).ignoreContentType(true).method(Connection.Method.POST).execute().body())
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
@ -16,13 +16,13 @@ class FembedExtractor {
|
|||||||
for (i in 0 until jsonArray.length()) {
|
for (i in 0 until jsonArray.length()) {
|
||||||
val `object` = jsonArray.getJSONObject(i)
|
val `object` = jsonArray.getJSONObject(i)
|
||||||
val videoUrl = `object`.getString("file")
|
val videoUrl = `object`.getString("file")
|
||||||
val quality = "$lang Fembed:" + `object`.getString("label")
|
val quality = "$qualityP Fembed:" + `object`.getString("label")
|
||||||
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
||||||
}
|
}
|
||||||
return videoList
|
return videoList
|
||||||
} else {
|
} else {
|
||||||
val videoUrl = "not used"
|
val videoUrl = "not used"
|
||||||
val quality = "Video taken down for dmca"
|
val quality = "$qualityP Video taken down for dmca"
|
||||||
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
||||||
}
|
}
|
||||||
return videoList
|
return videoList
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
package eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors
|
||||||
|
|
||||||
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
import okhttp3.Headers
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
|
||||||
|
class uploadExtractor(private val client: OkHttpClient) {
|
||||||
|
fun videofromurl(url: String, headers: Headers, quality: String): Video {
|
||||||
|
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||||
|
val basicUrl = document.selectFirst("script:containsData(var player =)").data().substringAfter("sources: [\"").substringBefore("\"],")
|
||||||
|
return Video(basicUrl, "$quality Uqload", basicUrl, null, headers)
|
||||||
|
}
|
||||||
|
}
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'MonosChinos'
|
extName = 'MonosChinos'
|
||||||
pkgNameSuffix = 'es.monoschinos'
|
pkgNameSuffix = 'es.monoschinos'
|
||||||
extClass = '.MonosChinos'
|
extClass = '.MonosChinos'
|
||||||
extVersionCode = 5
|
extVersionCode = 6
|
||||||
libVersion = '12'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import androidx.preference.PreferenceScreen
|
|||||||
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.OkruExtractor
|
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.SolidFilesExtractor
|
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.SolidFilesExtractor
|
||||||
|
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.uploadExtractor
|
||||||
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
|
||||||
@ -51,7 +52,7 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
anime.setUrlWithoutDomain(
|
anime.setUrlWithoutDomain(
|
||||||
element.select("a").attr("href")
|
element.select("a").attr("href")
|
||||||
)
|
)
|
||||||
anime.title = element.select("a div.series div.seriesdetails h5").text()
|
anime.title = element.select("a div.series div.seriesdetails h3").text()
|
||||||
anime.thumbnail_url = element.select("a div.series div.seriesimg img").attr("src")
|
anime.thumbnail_url = element.select("a div.series div.seriesimg img").attr("src")
|
||||||
return anime
|
return anime
|
||||||
}
|
}
|
||||||
@ -90,7 +91,7 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val url1 = Base64.decode(urlBase64, Base64.DEFAULT)
|
val url1 = Base64.decode(urlBase64, Base64.DEFAULT)
|
||||||
val url = String(url1).replace("https://monoschinos2.com/reproductor?url=", "")
|
val url = String(url1).replace("https://monoschinos2.com/reproductor?url=", "")
|
||||||
|
|
||||||
if (server == "fembed" || server == "Fembed" || server == "fembed2" || server == "Fembed2") {
|
if (server.lowercase() == "fembed" || server.lowercase() == "fembed2") {
|
||||||
val videos = FembedExtractor().videosFromUrl(url)
|
val videos = FembedExtractor().videosFromUrl(url)
|
||||||
videoList.addAll(videos)
|
videoList.addAll(videos)
|
||||||
}
|
}
|
||||||
@ -98,10 +99,15 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val videos = OkruExtractor(client).videosFromUrl(url)
|
val videos = OkruExtractor(client).videosFromUrl(url)
|
||||||
videoList.addAll(videos)
|
videoList.addAll(videos)
|
||||||
}
|
}
|
||||||
if (server == "zeus" || server == "Zeus") {
|
if (server.lowercase() == "zeus") {
|
||||||
val videos = SolidFilesExtractor(client).videosFromUrl(url)
|
val videos = SolidFilesExtractor(client).videosFromUrl(url)
|
||||||
videoList.addAll(videos)
|
videoList.addAll(videos)
|
||||||
}
|
}
|
||||||
|
if (server == "uqload") {
|
||||||
|
val headers = headers.newBuilder().add("referer", "https://uqload.com/").build()
|
||||||
|
val video = uploadExtractor(client).videofromurl(url, headers)
|
||||||
|
videoList.add(video)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return videoList
|
return videoList
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
package eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors
|
||||||
|
|
||||||
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
import okhttp3.Headers
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
|
||||||
|
class uploadExtractor(private val client: OkHttpClient) {
|
||||||
|
fun videofromurl(url: String, headers: Headers): Video {
|
||||||
|
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||||
|
val basicUrl = document.selectFirst("script:containsData(var player =)").data().substringAfter("sources: [\"").substringBefore("\"],")
|
||||||
|
return Video(basicUrl, "Upload", basicUrl, null, headers)
|
||||||
|
}
|
||||||
|
}
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'TioanimeH'
|
extName = 'TioanimeH'
|
||||||
pkgNameSuffix = 'es.tioanimeh'
|
pkgNameSuffix = 'es.tioanimeh'
|
||||||
extClass = '.TioanimeHFactory'
|
extClass = '.TioanimeHFactory'
|
||||||
extVersionCode = 1
|
extVersionCode = 3
|
||||||
libVersion = '12'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.animeextension.es.tioanimeh
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
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.tioanimeh.extractors.fembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.tioanimeh.extractors.fembedExtractor
|
||||||
@ -130,7 +131,7 @@ open class TioanimeH(override val name: String, override val baseUrl: String) :
|
|||||||
|
|
||||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||||
val filterList = if (filters.isEmpty()) getFilterList() else filters
|
val filterList = if (filters.isEmpty()) getFilterList() else filters
|
||||||
val genreFilter = filterList.find { it is GenreFilter } as GenreFilter
|
val genreFilter = if (filterList.isNotEmpty())filterList.find { it is GenreFilter } as GenreFilter else { GenreFilter().apply { state = 0 } }
|
||||||
|
|
||||||
return when {
|
return when {
|
||||||
query.isNotBlank() -> GET("$baseUrl/directorio?q=$query&p=$page", headers)
|
query.isNotBlank() -> GET("$baseUrl/directorio?q=$query&p=$page", headers)
|
||||||
@ -176,7 +177,7 @@ open class TioanimeH(override val name: String, override val baseUrl: String) :
|
|||||||
GenreFilter()
|
GenreFilter()
|
||||||
)
|
)
|
||||||
|
|
||||||
private class GenreFilter : UriPartFilter(
|
class GenreFilter : UriPartFilter(
|
||||||
"Generos",
|
"Generos",
|
||||||
arrayOf(
|
arrayOf(
|
||||||
Pair("<selecionar>", ""),
|
Pair("<selecionar>", ""),
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.tioanimeh
|
package eu.kanade.tachiyomi.animeextension.es.tioanimeh
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
import eu.kanade.tachiyomi.animesource.AnimeSource
|
import eu.kanade.tachiyomi.animesource.AnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.AnimeSourceFactory
|
import eu.kanade.tachiyomi.animesource.AnimeSourceFactory
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
import okhttp3.Request
|
||||||
|
|
||||||
class TioanimeHFactory : AnimeSourceFactory {
|
class TioanimeHFactory : AnimeSourceFactory {
|
||||||
override fun createSources(): List<AnimeSource> = listOf(
|
override fun createSources(): List<AnimeSource> = listOf(
|
||||||
@ -12,7 +15,66 @@ class TioanimeHFactory : AnimeSourceFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class tioanime : TioanimeH("TioAnime", "https://tioanime.com") {
|
class tioanime : TioanimeH("TioAnime", "https://tioanime.com") {
|
||||||
override fun getFilterList(): AnimeFilterList = AnimeFilterList()
|
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||||
|
val filterList = if (filters.isEmpty()) getFilterList() else filters
|
||||||
|
val genreFilter = if (filterList.isNotEmpty())filterList.find { it is GenreFilter } as GenreFilter else { GenreFilter().apply { state = 0 } }
|
||||||
|
return when {
|
||||||
|
query.isNotBlank() -> GET("$baseUrl/directorio?q=$query&p=$page", headers)
|
||||||
|
genreFilter.state != 0 -> GET("$baseUrl/directorio?genero=${genreFilter.toUriPart()}&p=$page")
|
||||||
|
else -> GET("$baseUrl/directorio?p=$page ")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getFilterList(): AnimeFilterList = AnimeFilterList(
|
||||||
|
GenreFilter()
|
||||||
|
)
|
||||||
|
|
||||||
|
private class GenreFilter : UriPartFilter(
|
||||||
|
"Géneros",
|
||||||
|
arrayOf(
|
||||||
|
Pair("<Selecionar>", "all"),
|
||||||
|
Pair("Acción", "accion"),
|
||||||
|
Pair("Artes Marciales", "artes_marciales"),
|
||||||
|
Pair("Aventuras", "aventura"),
|
||||||
|
Pair("Carreras", "carreras"),
|
||||||
|
Pair("Ciencia Ficción", "ciencia_ficcion"),
|
||||||
|
Pair("Comedia", "comedia"),
|
||||||
|
Pair("Demencia", "demencia"),
|
||||||
|
Pair("Demonios", "demonios"),
|
||||||
|
Pair("Deportes", "deportes"),
|
||||||
|
Pair("Drama", "drama"),
|
||||||
|
Pair("Ecchi", "ecchi"),
|
||||||
|
Pair("Escolares", "escolares"),
|
||||||
|
Pair("Espacial", "espacial"),
|
||||||
|
Pair("Fantasía", "fantasia"),
|
||||||
|
Pair("Harem", "harem"),
|
||||||
|
Pair("Historico", "historico"),
|
||||||
|
Pair("Infantil", "infantil"),
|
||||||
|
Pair("Josei", "josei"),
|
||||||
|
Pair("Juegos", "juegos"),
|
||||||
|
Pair("Magia", "magia"),
|
||||||
|
Pair("Mecha", "mecha"),
|
||||||
|
Pair("Militar", "militar"),
|
||||||
|
Pair("Misterio", "misterio"),
|
||||||
|
Pair("Música", "musica"),
|
||||||
|
Pair("Parodia", "parodia"),
|
||||||
|
Pair("Policía", "policia"),
|
||||||
|
Pair("Psicológico", "psicologico"),
|
||||||
|
Pair("Recuentos de la vida", "recuentos_de_la_vida"),
|
||||||
|
Pair("Romance", "romance"),
|
||||||
|
Pair("Samurai", "samurai"),
|
||||||
|
Pair("Seinen", "seinen"),
|
||||||
|
Pair("Shoujo", "shoujo"),
|
||||||
|
Pair("Shounen", "shounen"),
|
||||||
|
Pair("Sobrenatural", "sobrenatural"),
|
||||||
|
Pair("Superpoderes", "superpoderes"),
|
||||||
|
Pair("Suspenso", "suspenso"),
|
||||||
|
Pair("Terror", "terror"),
|
||||||
|
Pair("Vampiros", "vampiros"),
|
||||||
|
Pair("Yaoi", "yaoi"),
|
||||||
|
Pair("Yuri", "yuri")
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
class tiohentai : TioanimeH("TioHentai", "https://tiohentai.com")
|
class tiohentai : TioanimeH("TioHentai", "https://tiohentai.com")
|
||||||
|
Reference in New Issue
Block a user