refactor: Make extensions use the uqload-extractor lib (#2161)
This commit is contained in:
@ -3,4 +3,5 @@ dependencies {
|
|||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-filemoon-extractor'))
|
implementation(project(':lib-filemoon-extractor'))
|
||||||
implementation(project(':lib-mixdrop-extractor'))
|
implementation(project(':lib-mixdrop-extractor'))
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,13 @@ package eu.kanade.tachiyomi.animeextension.es.animeonlineninja
|
|||||||
import androidx.preference.CheckBoxPreference
|
import androidx.preference.CheckBoxPreference
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors.UploadExtractor
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -26,8 +26,9 @@ class AnimeOnlineNinja : DooPlay(
|
|||||||
) {
|
) {
|
||||||
override val client by lazy {
|
override val client by lazy {
|
||||||
if (preferences.getBoolean(PREF_VRF_INTERCEPT_KEY, PREF_VRF_INTERCEPT_DEFAULT)) {
|
if (preferences.getBoolean(PREF_VRF_INTERCEPT_KEY, PREF_VRF_INTERCEPT_DEFAULT)) {
|
||||||
network.cloudflareClient
|
network.cloudflareClient.newBuilder()
|
||||||
.newBuilder().addInterceptor(VrfInterceptor()).build()
|
.addInterceptor(VrfInterceptor())
|
||||||
|
.build()
|
||||||
} else {
|
} else {
|
||||||
network.cloudflareClient
|
network.cloudflareClient
|
||||||
}
|
}
|
||||||
@ -114,7 +115,7 @@ class AnimeOnlineNinja : DooPlay(
|
|||||||
private val doodExtractor by lazy { DoodExtractor(client) }
|
private val doodExtractor by lazy { DoodExtractor(client) }
|
||||||
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
||||||
private val mixDropExtractor by lazy { MixDropExtractor(client) }
|
private val mixDropExtractor by lazy { MixDropExtractor(client) }
|
||||||
private val uqloadExtractor by lazy { UploadExtractor(client) }
|
private val uqloadExtractor by lazy { UqloadExtractor(client) }
|
||||||
|
|
||||||
private fun extractVideos(url: String, lang: String): List<Video> {
|
private fun extractVideos(url: String, lang: String): List<Video> {
|
||||||
return when {
|
return when {
|
||||||
@ -131,8 +132,7 @@ class AnimeOnlineNinja : DooPlay(
|
|||||||
"mixdrop" in url ->
|
"mixdrop" in url ->
|
||||||
mixDropExtractor.videoFromUrl(url, lang)
|
mixDropExtractor.videoFromUrl(url, lang)
|
||||||
"uqload" in url ->
|
"uqload" in url ->
|
||||||
uqloadExtractor.videoFromUrl(url, headers, lang)
|
uqloadExtractor.videosFromUrl(url)
|
||||||
?.let(::listOf)
|
|
||||||
"wolfstream" in url -> {
|
"wolfstream" in url -> {
|
||||||
client.newCall(GET(url, headers)).execute()
|
client.newCall(GET(url, headers)).execute()
|
||||||
.use { it.asJsoup() }
|
.use { it.asJsoup() }
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
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 newHeaders = headers.newBuilder().add("referer", "https://uqload.com/").build()
|
|
||||||
return runCatching {
|
|
||||||
val document = client.newCall(GET(url, newHeaders)).execute().asJsoup()
|
|
||||||
val basicUrl = document.selectFirst("script:containsData(var player =)")!!
|
|
||||||
.data()
|
|
||||||
.substringAfter("sources: [\"")
|
|
||||||
.substringBefore("\"],")
|
|
||||||
Video(basicUrl, "$quality Uqload", basicUrl, headers = headers)
|
|
||||||
}.getOrNull()
|
|
||||||
}
|
|
||||||
}
|
|
@ -12,6 +12,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation(project(':lib-gdriveplayer-extractor'))
|
implementation(project(':lib-gdriveplayer-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
|
@ -5,7 +5,6 @@ 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.ar.animerco.extractors.SharedExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.animerco.extractors.SharedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.animerco.extractors.UQLoadExtractor
|
|
||||||
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
|
||||||
@ -18,6 +17,7 @@ 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.streamwishextractor.StreamWishExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||||
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
|
||||||
@ -171,7 +171,7 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) }
|
private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) }
|
||||||
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
||||||
private val sharedExtractor by lazy { SharedExtractor(client) }
|
private val sharedExtractor by lazy { SharedExtractor(client) }
|
||||||
private val uqloadExtractor by lazy { UQLoadExtractor(client) }
|
private val uqloadExtractor by lazy { UqloadExtractor(client) }
|
||||||
private val vidBomExtractor by lazy { VidBomExtractor(client) }
|
private val vidBomExtractor by lazy { VidBomExtractor(client) }
|
||||||
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
||||||
private val okruExtractor by lazy { OkruExtractor(client) }
|
private val okruExtractor by lazy { OkruExtractor(client) }
|
||||||
@ -193,7 +193,7 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
"streamtape" in url -> streamTapeExtractor.videoFromUrl(url)?.let(::listOf)
|
"streamtape" in url -> streamTapeExtractor.videoFromUrl(url)?.let(::listOf)
|
||||||
"4shared" in url -> sharedExtractor.videoFromUrl(url)?.let(::listOf)
|
"4shared" in url -> sharedExtractor.videoFromUrl(url)?.let(::listOf)
|
||||||
"uqload" in url -> uqloadExtractor.videoFromUrl(url)?.let(::listOf)
|
"uqload" in url -> uqloadExtractor.videosFromUrl(url)
|
||||||
VIDBOM_DOMAINS.any(url::contains) -> vidBomExtractor.videosFromUrl(url)
|
VIDBOM_DOMAINS.any(url::contains) -> vidBomExtractor.videosFromUrl(url)
|
||||||
else -> null
|
else -> null
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class UQLoadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videoFromUrl(url: String, quality: String = "uqload"): Video? {
|
|
||||||
val document = client.newCall(GET(url)).execute().use { it.asJsoup() }
|
|
||||||
val check = document.selectFirst("script:containsData(sources)")?.data()
|
|
||||||
?: return null
|
|
||||||
val videoUrl = check.substringAfter("sources: [\"", "").substringBefore("\"", "")
|
|
||||||
if (videoUrl.isBlank()) return null
|
|
||||||
return Video(videoUrl, quality, videoUrl)
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,4 +9,8 @@ ext {
|
|||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -6,7 +6,6 @@ import android.widget.Toast
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.mycima.extractors.GoVadExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.mycima.extractors.GoVadExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.mycima.extractors.UQLoadExtractor
|
|
||||||
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,6 +13,7 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
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.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@ -148,7 +148,7 @@ class MyCima : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
UQLOAD_REGEX.containsMatchIn(url) -> {
|
UQLOAD_REGEX.containsMatchIn(url) -> {
|
||||||
val finalUrl = UQLOAD_REGEX.find(url)!!.groupValues[0]
|
val finalUrl = UQLOAD_REGEX.find(url)!!.groupValues[0]
|
||||||
UQLoadExtractor(client).videosFromUrl("https://www.$finalUrl.html")
|
UqloadExtractor(client).videosFromUrl("https://www.$finalUrl.html")
|
||||||
}
|
}
|
||||||
else -> null
|
else -> null
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.mycima.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class UQLoadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String): List<Video> {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val check = document.selectFirst("script:containsData(sources)")!!.data()
|
|
||||||
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
|
||||||
return when {
|
|
||||||
"soruces" in check -> Video(videoUrl, "UQLoad Mirror", videoUrl).let(::listOf)
|
|
||||||
else -> emptyList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
|
@ -6,7 +6,6 @@ import android.widget.Toast
|
|||||||
import androidx.preference.EditTextPreference
|
import androidx.preference.EditTextPreference
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.UQLoadExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.UpStreamExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.UpStreamExtractor
|
||||||
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
|
||||||
@ -18,6 +17,7 @@ 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.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.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -163,7 +163,7 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
DoodExtractor(client).videoFromUrl("https://www.$finalUrl", "Dood mirror", false)?.let(::listOf)
|
DoodExtractor(client).videoFromUrl("https://www.$finalUrl", "Dood mirror", false)?.let(::listOf)
|
||||||
}
|
}
|
||||||
url.contains("uqload") -> {
|
url.contains("uqload") -> {
|
||||||
UQLoadExtractor(client).videoFromUrl(url, "Uqload mirror")?.let(::listOf)
|
UqloadExtractor(client).videosFromUrl(url, "mirror")
|
||||||
}
|
}
|
||||||
url.contains("tape") -> {
|
url.contains("tape") -> {
|
||||||
StreamTapeExtractor(client).videoFromUrl(url)?.let(::listOf)
|
StreamTapeExtractor(client).videoFromUrl(url)?.let(::listOf)
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class UQLoadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videoFromUrl(url: String, quality: String): Video? {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val check = document.selectFirst("script:containsData(sources)")!!.data()
|
|
||||||
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
|
||||||
return if (check.contains("sources")) {
|
|
||||||
Video(url, quality, videoUrl)
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation(project(':lib-mixdrop-extractor'))
|
implementation(project(':lib-mixdrop-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
|
@ -4,7 +4,6 @@ import android.app.Application
|
|||||||
import android.content.SharedPreferences
|
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.doramasflix.extractor.UqloadExtractor
|
|
||||||
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.AnimesPage
|
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
||||||
@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
|||||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||||
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.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -316,44 +316,28 @@ class Doramasflix : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun resolveVideoServer(link: String): List<Video> {
|
private fun resolveVideoServer(link: String): List<Video> {
|
||||||
val videos = mutableListOf<Video>()
|
return runCatching {
|
||||||
if (link.contains("streamtape")) {
|
when {
|
||||||
try {
|
"streamtape" in link ->
|
||||||
StreamTapeExtractor(client).videoFromUrl(link)?.let { videos.add(it) }
|
StreamTapeExtractor(client).videoFromUrl(link)?.let(::listOf)
|
||||||
} catch (_: Exception) {}
|
"mixdrop" in link ->
|
||||||
}
|
MixDropExtractor(client).videoFromUrl(link)
|
||||||
if (link.contains("mixdrop")) {
|
"uqload.co" in link ->
|
||||||
try {
|
UqloadExtractor(client).videosFromUrl(link)
|
||||||
MixDropExtractor(client).videoFromUrl(link).let { videos.addAll(it) }
|
"ok.ru" in link ->
|
||||||
} catch (_: Exception) {}
|
OkruExtractor(client).videosFromUrl(link)
|
||||||
}
|
"voe" in link ->
|
||||||
if (link.contains("uqload")) {
|
VoeExtractor(client).videoFromUrl(link, "Voex")?.let(::listOf)
|
||||||
try {
|
else -> null
|
||||||
val headers = headers.newBuilder()
|
}
|
||||||
.add("authority", "uqload.co")
|
}.getOrNull() ?: emptyList()
|
||||||
.add("referer", "https://uqload.co/")
|
|
||||||
.build()
|
|
||||||
UqloadExtractor(client).videoFromUrl(link, headers, "YourUpload").let { videos.addAll(it) }
|
|
||||||
} catch (_: Exception) {}
|
|
||||||
}
|
|
||||||
if (link.contains("ok.ru")) {
|
|
||||||
try {
|
|
||||||
OkruExtractor(client).videosFromUrl(link, "", true).let { videos.addAll(it) }
|
|
||||||
} catch (_: Exception) {}
|
|
||||||
}
|
|
||||||
if (link.contains("voe")) {
|
|
||||||
try {
|
|
||||||
VoeExtractor(client).videoFromUrl(link, "Voex")?.let { videos.add(it) }
|
|
||||||
} catch (_: Exception) {}
|
|
||||||
}
|
|
||||||
return videos
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
||||||
"StreamTape", "Voex", "DoodStream", "YourUpload", "MixDrop",
|
"StreamTape", "Voex", "Uqload", "MixDrop",
|
||||||
)
|
)
|
||||||
val videoQualityPref = ListPreference(screen.context).apply {
|
val videoQualityPref = ListPreference(screen.context).apply {
|
||||||
key = "preferred_quality"
|
key = "preferred_quality"
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.doramasflix.extractor
|
|
||||||
|
|
||||||
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 UqloadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videoFromUrl(url: String, headers: Headers, quality: String): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute()
|
|
||||||
if (document.isSuccessful) {
|
|
||||||
val response = document.asJsoup()
|
|
||||||
response.select("script").map {
|
|
||||||
if (it.data().contains("var player =")) {
|
|
||||||
val basicUrl = it.data().substringAfter("sources: [\"").substringBefore("\"],")
|
|
||||||
videoList.add(Video(basicUrl, quality, basicUrl, headers = headers))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ 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.doramasyt.extractors.SolidFilesExtractor
|
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.SolidFilesExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.UqloadExtractor
|
|
||||||
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
|
||||||
@ -16,6 +15,7 @@ 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.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.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
@ -106,13 +106,8 @@ class Doramasyt : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val videos = SolidFilesExtractor(client).videosFromUrl(url)
|
val videos = SolidFilesExtractor(client).videosFromUrl(url)
|
||||||
videoList.addAll(videos)
|
videoList.addAll(videos)
|
||||||
}
|
}
|
||||||
if (server.contains("uqload")) {
|
if (server.contains("uqload") || server.contains("upload")) {
|
||||||
val headers = headers.newBuilder().add("referer", "https://uqload.com/").build()
|
videoList.addAll(UqloadExtractor(client).videosFromUrl(url))
|
||||||
UqloadExtractor(client).videoFromUrl(url, headers, "Uqload").map { videoList.add(it) }
|
|
||||||
}
|
|
||||||
if (server.contains("upload")) {
|
|
||||||
val headers = headers.newBuilder().add("referer", "https://upload.com/").build()
|
|
||||||
UqloadExtractor(client).videoFromUrl(url, headers, "Upload").map { videoList.add(it) }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return videoList
|
return videoList
|
||||||
@ -274,7 +269,7 @@ class Doramasyt : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"Uqload", "Upload", "SolidFiles", "StreamTape", // video servers without resolution
|
"Uqload", "SolidFiles", "StreamTape", // video servers without resolution
|
||||||
)
|
)
|
||||||
val videoQualityPref = ListPreference(screen.context).apply {
|
val videoQualityPref = ListPreference(screen.context).apply {
|
||||||
key = "preferred_quality"
|
key = "preferred_quality"
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.doramasyt.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 UqloadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videoFromUrl(url: String, headers: Headers, quality: String): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute()
|
|
||||||
if (document.isSuccessful) {
|
|
||||||
val response = document.asJsoup()
|
|
||||||
response.select("script").map {
|
|
||||||
if (it.data().contains("var player =")) {
|
|
||||||
val basicUrl = it.data().substringAfter("sources: [\"").substringBefore("\"],")
|
|
||||||
videoList.add(Video(basicUrl, quality, basicUrl, headers = headers))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation(project(':lib-mp4upload-extractor'))
|
implementation(project(':lib-mp4upload-extractor'))
|
||||||
implementation(project(':lib-yourupload-extractor'))
|
implementation(project(':lib-yourupload-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
|||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.latanime.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
|
||||||
@ -16,6 +15,7 @@ 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.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.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
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -296,8 +296,7 @@ class Latanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
videoList.addAll(videos)
|
videoList.addAll(videos)
|
||||||
}
|
}
|
||||||
url.contains("uqload") -> {
|
url.contains("uqload") -> {
|
||||||
val headers = headers.newBuilder().add("referer", "https://uqload.com/").build()
|
val videos = UqloadExtractor(client).videosFromUrl(url, prefix)
|
||||||
val videos = UploadExtractor(client).videoFromUrl(url, headers = headers, prefix = prefix)
|
|
||||||
videoList.addAll(videos)
|
videoList.addAll(videos)
|
||||||
}
|
}
|
||||||
url.contains("doodstream") -> {
|
url.contains("doodstream") -> {
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.latanime.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, prefix: String): List<Video> {
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val basicUrl = document.selectFirst("script:containsData(var player =)")!!.data().substringAfter("sources: [\"").substringBefore("\"],")
|
|
||||||
return listOf(Video(basicUrl, "${prefix}Uqload", basicUrl, headers = headers))
|
|
||||||
} catch (e: Exception) {
|
|
||||||
emptyList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation(project(':lib-mp4upload-extractor'))
|
implementation(project(':lib-mp4upload-extractor'))
|
||||||
implementation(project(':lib-yourupload-extractor'))
|
implementation(project(':lib-yourupload-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
|
@ -5,7 +5,6 @@ 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.UqloadExtractor
|
|
||||||
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
|
||||||
@ -19,6 +18,7 @@ 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.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
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -338,12 +338,7 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
url.contains("uqload") -> {
|
url.contains("uqload") -> {
|
||||||
val video = UqloadExtractor(client).videoFromUrl(url, headers)
|
UqloadExtractor(client).videosFromUrl(url)
|
||||||
if (video != null) {
|
|
||||||
listOf(video)
|
|
||||||
} else {
|
|
||||||
emptyList()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
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.Headers
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class UploadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videoFromUrl(url: String, headers: Headers): Video? {
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val basicUrl = document.selectFirst("script:containsData(var player =)")!!.data().substringAfter("sources: [\"").substringBefore("\"],")
|
|
||||||
return Video(basicUrl, "Uqload", basicUrl, headers = headers)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
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.Headers
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class UqloadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videoFromUrl(url: String, headers: Headers): Video? {
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
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)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,9 +10,9 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation(project(':lib-mp4upload-extractor'))
|
implementation(project(':lib-mp4upload-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -6,7 +6,6 @@ import android.util.Base64
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
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
|
||||||
@ -16,6 +15,7 @@ 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.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.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
@ -81,7 +81,6 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
val headers = headers.newBuilder().add("referer", "https://uqload.com/").build()
|
|
||||||
document.select("div.heroarea div.row div.col-md-12 ul.dropcaps li").forEach { it ->
|
document.select("div.heroarea div.row div.col-md-12 ul.dropcaps li").forEach { it ->
|
||||||
// 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")
|
||||||
@ -90,8 +89,7 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
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)
|
videoList.addAll(UqloadExtractor(client).videosFromUrl(url))
|
||||||
if (video != null) videoList.add(video)
|
|
||||||
}
|
}
|
||||||
url.contains("mp4upload") -> {
|
url.contains("mp4upload") -> {
|
||||||
val videos = Mp4uploadExtractor(client).videosFromUrl(url, headers)
|
val videos = Mp4uploadExtractor(client).videosFromUrl(url, headers)
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
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? {
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
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)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation(project(':lib-streamwish-extractor'))
|
implementation(project(':lib-streamwish-extractor'))
|
||||||
implementation(project(':lib-filemoon-extractor'))
|
implementation(project(':lib-filemoon-extractor'))
|
||||||
implementation(project(':lib-streamlare-extractor'))
|
implementation(project(':lib-streamlare-extractor'))
|
||||||
|
@ -137,7 +137,7 @@ open class Pelisplushd(override val name: String, override val baseUrl: String)
|
|||||||
"sbfast" -> { serverUrl = "https://sbfull.com/e/$urlId" }
|
"sbfast" -> { serverUrl = "https://sbfull.com/e/$urlId" }
|
||||||
"plusto" -> { serverUrl = "https://owodeuwu.xyz/v/$urlId" }
|
"plusto" -> { serverUrl = "https://owodeuwu.xyz/v/$urlId" }
|
||||||
"doodstream" -> { serverUrl = "https://dood.to/e/$urlId" }
|
"doodstream" -> { serverUrl = "https://dood.to/e/$urlId" }
|
||||||
"upload" -> { serverUrl = "https://uqload.com/embed-$urlId.html" }
|
"upload", "uqload" -> { serverUrl = "https://uqload.com/embed-$urlId.html" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
serverVideoResolver(serverUrl, serverName)?.forEach { video -> videoList.add(video) }
|
serverVideoResolver(serverUrl, serverName)?.forEach { video -> videoList.add(video) }
|
||||||
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.animeextension.es.pelisplushd
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.StreamHideExtractor
|
import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.StreamHideExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.UqloadExtractor
|
|
||||||
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
|
||||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||||
@ -14,6 +13,7 @@ import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
|||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
|
import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
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
|
||||||
@ -187,7 +187,7 @@ class Pelisplusph(override val name: String, override val baseUrl: String) : Pel
|
|||||||
StreamHideExtractor(client).videosFromUrl(url, "StreamHide")
|
StreamHideExtractor(client).videosFromUrl(url, "StreamHide")
|
||||||
}
|
}
|
||||||
if (embedUrl.contains("uqload")) {
|
if (embedUrl.contains("uqload")) {
|
||||||
UqloadExtractor(client).videosFromUrl(url, headers)
|
UqloadExtractor(client).videosFromUrl(url)
|
||||||
}
|
}
|
||||||
return videoList
|
return videoList
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ import android.util.Base64
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.StreamHideExtractor
|
import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.StreamHideExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.UqloadExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.VudeoExtractor
|
import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.VudeoExtractor
|
||||||
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
|
||||||
@ -16,6 +15,7 @@ import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
|||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
|
import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
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
|
||||||
@ -196,7 +196,7 @@ class Pelisplusto(override val name: String, override val baseUrl: String) : Pel
|
|||||||
videoList.addAll(StreamlareExtractor(client).videosFromUrl(url))
|
videoList.addAll(StreamlareExtractor(client).videosFromUrl(url))
|
||||||
}
|
}
|
||||||
if (embedUrl.contains("uqload")) {
|
if (embedUrl.contains("uqload")) {
|
||||||
UqloadExtractor(client).videosFromUrl(url, headers)
|
UqloadExtractor(client).videosFromUrl(url)
|
||||||
}
|
}
|
||||||
if (embedUrl.contains("streamwish")) {
|
if (embedUrl.contains("streamwish")) {
|
||||||
val docHeaders = headers.newBuilder()
|
val docHeaders = headers.newBuilder()
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.pelisplushd.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.HttpUrl.Companion.toHttpUrl
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class UqloadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, headers: Headers, quality: String = "Uqload"): List<Video> {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val check = document.selectFirst("script:containsData(sources)")!!.data()
|
|
||||||
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
|
||||||
val videoHeaders = headers.newBuilder()
|
|
||||||
.add("Accept", "video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5")
|
|
||||||
.add("Host", videoUrl.toHttpUrl().host)
|
|
||||||
.add("Referer", "https://uqload.co/")
|
|
||||||
.build()
|
|
||||||
return if (check.contains("sources")) {
|
|
||||||
listOf(Video(url, quality, videoUrl, headers = videoHeaders))
|
|
||||||
} else {
|
|
||||||
emptyList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-sibnet-extractor'))
|
implementation(project(':lib-sibnet-extractor'))
|
||||||
|
@ -7,7 +7,6 @@ import androidx.preference.PreferenceScreen
|
|||||||
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.StreamHideExtractor
|
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.StreamHideExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.StreamVidExtractor
|
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.StreamVidExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.UpstreamExtractor
|
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.UpstreamExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.UqloadExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.VidoExtractor
|
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.VidoExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.VudeoExtractor
|
import eu.kanade.tachiyomi.animeextension.fr.frenchanime.extractors.VudeoExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -20,6 +19,7 @@ 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.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor
|
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||||
@ -251,7 +251,7 @@ class FrenchAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
source.contains("https://uqload") -> {
|
source.contains("https://uqload") -> {
|
||||||
videoList.addAll(
|
videoList.addAll(
|
||||||
UqloadExtractor(client).videosFromUrl(source, headers),
|
UqloadExtractor(client).videosFromUrl(source),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.fr.frenchanime.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.HttpUrl.Companion.toHttpUrl
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class UqloadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, headers: Headers, quality: String = "Uqload"): List<Video> {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val check = document.selectFirst("script:containsData(sources)")!!.data()
|
|
||||||
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
|
||||||
val videoHeaders = headers.newBuilder()
|
|
||||||
.add("Accept", "video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5")
|
|
||||||
.add("Host", videoUrl.toHttpUrl().host)
|
|
||||||
.add("Referer", "https://uqload.co/")
|
|
||||||
.build()
|
|
||||||
return if (check.contains("sources")) {
|
|
||||||
listOf(Video(url, quality, videoUrl, headers = videoHeaders))
|
|
||||||
} else {
|
|
||||||
emptyList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -27,7 +27,6 @@ import kotlinx.coroutines.awaitAll
|
|||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import okhttp3.Headers
|
|
||||||
import okhttp3.MediaType.Companion.toMediaType
|
import okhttp3.MediaType.Companion.toMediaType
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import okhttp3.RequestBody.Companion.toRequestBody
|
import okhttp3.RequestBody.Companion.toRequestBody
|
||||||
|
@ -13,6 +13,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation(project(":lib-sendvid-extractor"))
|
implementation(project(":lib-sendvid-extractor"))
|
||||||
implementation(project(":lib-sibnet-extractor"))
|
implementation(project(":lib-sibnet-extractor"))
|
||||||
implementation(project(":lib-dood-extractor"))
|
implementation(project(":lib-dood-extractor"))
|
||||||
|
@ -4,7 +4,6 @@ import android.app.Application
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.tr.anizm.AnizmFilters.applyFilterParams
|
import eu.kanade.tachiyomi.animeextension.tr.anizm.AnizmFilters.applyFilterParams
|
||||||
import eu.kanade.tachiyomi.animeextension.tr.anizm.extractors.UQLoadExtractor
|
|
||||||
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.AnimesPage
|
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
||||||
@ -18,6 +17,7 @@ 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.sendvidextractor.SendvidExtractor
|
import eu.kanade.tachiyomi.lib.sendvidextractor.SendvidExtractor
|
||||||
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor
|
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
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
|
||||||
@ -206,7 +206,7 @@ class Anizm : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
|
|||||||
|
|
||||||
private val doodExtractor by lazy { DoodExtractor(client) }
|
private val doodExtractor by lazy { DoodExtractor(client) }
|
||||||
private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) }
|
private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) }
|
||||||
private val uqloadExtractor by lazy { UQLoadExtractor(client) }
|
private val uqloadExtractor by lazy { UqloadExtractor(client) }
|
||||||
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
||||||
private val yourUploadExtractor by lazy { YourUploadExtractor(client) }
|
private val yourUploadExtractor by lazy { YourUploadExtractor(client) }
|
||||||
private val voeExtractor by lazy { VoeExtractor(client) }
|
private val voeExtractor by lazy { VoeExtractor(client) }
|
||||||
@ -230,7 +230,7 @@ class Anizm : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
|
|||||||
val newUrl = "https://gdriveplayer.to/embed2.php?link=$url"
|
val newUrl = "https://gdriveplayer.to/embed2.php?link=$url"
|
||||||
gdrivePlayerExtractor.videosFromUrl(newUrl, "GdrivePlayer", headers)
|
gdrivePlayerExtractor.videosFromUrl(newUrl, "GdrivePlayer", headers)
|
||||||
}
|
}
|
||||||
"uqload" in url -> uqloadExtractor.videoFromUrl(url)?.let(::listOf)
|
"uqload" in url -> uqloadExtractor.videosFromUrl(url)
|
||||||
"voe.sx" in url -> voeExtractor.videoFromUrl(url)?.let(::listOf)
|
"voe.sx" in url -> voeExtractor.videoFromUrl(url)?.let(::listOf)
|
||||||
else -> null
|
else -> null
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.tr.anizm.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 UQLoadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videoFromUrl(url: String, quality: String = "uqload"): Video? {
|
|
||||||
val document = client.newCall(GET(url)).execute().use { it.asJsoup() }
|
|
||||||
val check = document.selectFirst("script:containsData(sources)")?.data()
|
|
||||||
?: return null
|
|
||||||
val videoUrl = check.substringAfter("sources: [\"", "").substringBefore("\"", "")
|
|
||||||
if (videoUrl.isBlank()) return null
|
|
||||||
val videoHeaders = Headers.headersOf("Referer", url)
|
|
||||||
return Video(videoUrl, quality, videoUrl, videoHeaders)
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,6 +5,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-uqload-extractor'))
|
||||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
implementation(project(":lib-cryptoaes"))
|
implementation(project(":lib-cryptoaes"))
|
||||||
implementation(project(":lib-dood-extractor"))
|
implementation(project(":lib-dood-extractor"))
|
||||||
|
@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.EmbedgramExtra
|
|||||||
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.MVidooExtractor
|
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.MVidooExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.MailRuExtractor
|
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.MailRuExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.StreamVidExtractor
|
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.StreamVidExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.UqloadExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.VTubeExtractor
|
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.VTubeExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.VudeoExtractor
|
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.VudeoExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.WolfstreamExtractor
|
import eu.kanade.tachiyomi.animeextension.tr.turkanime.extractors.WolfstreamExtractor
|
||||||
@ -33,6 +32,7 @@ import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
|||||||
import eu.kanade.tachiyomi.lib.sendvidextractor.SendvidExtractor
|
import eu.kanade.tachiyomi.lib.sendvidextractor.SendvidExtractor
|
||||||
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor
|
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor
|
||||||
import eu.kanade.tachiyomi.lib.synchrony.Deobfuscator
|
import eu.kanade.tachiyomi.lib.synchrony.Deobfuscator
|
||||||
|
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.vkextractor.VkExtractor
|
import eu.kanade.tachiyomi.lib.vkextractor.VkExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -306,7 +306,7 @@ class TurkAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
StreamVidExtractor(client).videosFromUrl(hosterLink, headers, prefix = "$subber: ")
|
StreamVidExtractor(client).videosFromUrl(hosterLink, headers, prefix = "$subber: ")
|
||||||
}
|
}
|
||||||
"UQLOAD" -> {
|
"UQLOAD" -> {
|
||||||
UqloadExtractor(client).videosFromUrl(hosterLink, headers, "$subber: Uqload")
|
UqloadExtractor(client).videosFromUrl(hosterLink, "$subber:")
|
||||||
}
|
}
|
||||||
"VK" -> {
|
"VK" -> {
|
||||||
val vkUrl = "https://vk.com" + hosterLink.substringAfter("vk.com")
|
val vkUrl = "https://vk.com" + hosterLink.substringAfter("vk.com")
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.tr.turkanime.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.HttpUrl.Companion.toHttpUrl
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class UqloadExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, headers: Headers, quality: String = "Uqload"): List<Video> {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val check = document.selectFirst("script:containsData(sources)")!!.data()
|
|
||||||
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
|
||||||
val videoHeaders = headers.newBuilder()
|
|
||||||
.add("Accept", "video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5")
|
|
||||||
.add("Host", videoUrl.toHttpUrl().host)
|
|
||||||
.add("Referer", "https://uqload.co/")
|
|
||||||
.build()
|
|
||||||
return if (check.contains("sources")) {
|
|
||||||
listOf(Video(url, quality, videoUrl, headers = videoHeaders))
|
|
||||||
} else {
|
|
||||||
emptyList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user