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-filemoon-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.ListPreference
|
||||
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.Video
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||
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.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -26,8 +26,9 @@ class AnimeOnlineNinja : DooPlay(
|
||||
) {
|
||||
override val client by lazy {
|
||||
if (preferences.getBoolean(PREF_VRF_INTERCEPT_KEY, PREF_VRF_INTERCEPT_DEFAULT)) {
|
||||
network.cloudflareClient
|
||||
.newBuilder().addInterceptor(VrfInterceptor()).build()
|
||||
network.cloudflareClient.newBuilder()
|
||||
.addInterceptor(VrfInterceptor())
|
||||
.build()
|
||||
} else {
|
||||
network.cloudflareClient
|
||||
}
|
||||
@ -114,7 +115,7 @@ class AnimeOnlineNinja : DooPlay(
|
||||
private val doodExtractor by lazy { DoodExtractor(client) }
|
||||
private val streamTapeExtractor by lazy { StreamTapeExtractor(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> {
|
||||
return when {
|
||||
@ -131,8 +132,7 @@ class AnimeOnlineNinja : DooPlay(
|
||||
"mixdrop" in url ->
|
||||
mixDropExtractor.videoFromUrl(url, lang)
|
||||
"uqload" in url ->
|
||||
uqloadExtractor.videoFromUrl(url, headers, lang)
|
||||
?.let(::listOf)
|
||||
uqloadExtractor.videosFromUrl(url)
|
||||
"wolfstream" in url -> {
|
||||
client.newCall(GET(url, headers)).execute()
|
||||
.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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation(project(':lib-gdriveplayer-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
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.model.AnimeFilterList
|
||||
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.streamtapeextractor.StreamTapeExtractor
|
||||
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.youruploadextractor.YourUploadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -171,7 +171,7 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) }
|
||||
private val streamTapeExtractor by lazy { StreamTapeExtractor(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 mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
||||
private val okruExtractor by lazy { OkruExtractor(client) }
|
||||
@ -193,7 +193,7 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
}
|
||||
"streamtape" in url -> streamTapeExtractor.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)
|
||||
else -> null
|
||||
} ?: 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'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
@ -6,7 +6,6 @@ import android.widget.Toast
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
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.model.AnimeFilter
|
||||
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.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -148,7 +148,7 @@ class MyCima : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
}
|
||||
UQLOAD_REGEX.containsMatchIn(url) -> {
|
||||
val finalUrl = UQLOAD_REGEX.find(url)!!.groupValues[0]
|
||||
UQLoadExtractor(client).videosFromUrl("https://www.$finalUrl.html")
|
||||
UqloadExtractor(client).videosFromUrl("https://www.$finalUrl.html")
|
||||
}
|
||||
else -> null
|
||||
} ?: 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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
|
@ -6,7 +6,6 @@ import android.widget.Toast
|
||||
import androidx.preference.EditTextPreference
|
||||
import androidx.preference.ListPreference
|
||||
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.animesource.ConfigurableAnimeSource
|
||||
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.okruextractor.OkruExtractor
|
||||
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.network.GET
|
||||
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)
|
||||
}
|
||||
url.contains("uqload") -> {
|
||||
UQLoadExtractor(client).videoFromUrl(url, "Uqload mirror")?.let(::listOf)
|
||||
UqloadExtractor(client).videosFromUrl(url, "mirror")
|
||||
}
|
||||
url.contains("tape") -> {
|
||||
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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation(project(':lib-mixdrop-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
|
@ -4,7 +4,6 @@ import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
import eu.kanade.tachiyomi.animeextension.es.doramasflix.extractor.UqloadExtractor
|
||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||
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.okruextractor.OkruExtractor
|
||||
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.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -316,44 +316,28 @@ class Doramasflix : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
}
|
||||
|
||||
private fun resolveVideoServer(link: String): List<Video> {
|
||||
val videos = mutableListOf<Video>()
|
||||
if (link.contains("streamtape")) {
|
||||
try {
|
||||
StreamTapeExtractor(client).videoFromUrl(link)?.let { videos.add(it) }
|
||||
} catch (_: Exception) {}
|
||||
}
|
||||
if (link.contains("mixdrop")) {
|
||||
try {
|
||||
MixDropExtractor(client).videoFromUrl(link).let { videos.addAll(it) }
|
||||
} catch (_: Exception) {}
|
||||
}
|
||||
if (link.contains("uqload")) {
|
||||
try {
|
||||
val headers = headers.newBuilder()
|
||||
.add("authority", "uqload.co")
|
||||
.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
|
||||
return runCatching {
|
||||
when {
|
||||
"streamtape" in link ->
|
||||
StreamTapeExtractor(client).videoFromUrl(link)?.let(::listOf)
|
||||
"mixdrop" in link ->
|
||||
MixDropExtractor(client).videoFromUrl(link)
|
||||
"uqload.co" in link ->
|
||||
UqloadExtractor(client).videosFromUrl(link)
|
||||
"ok.ru" in link ->
|
||||
OkruExtractor(client).videosFromUrl(link)
|
||||
"voe" in link ->
|
||||
VoeExtractor(client).videoFromUrl(link, "Voex")?.let(::listOf)
|
||||
else -> null
|
||||
}
|
||||
}.getOrNull() ?: emptyList()
|
||||
}
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val qualities = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"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 {
|
||||
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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ import android.util.Log
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
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.model.AnimeFilter
|
||||
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.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.OkHttpClient
|
||||
@ -106,13 +106,8 @@ class Doramasyt : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val videos = SolidFilesExtractor(client).videosFromUrl(url)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
if (server.contains("uqload")) {
|
||||
val headers = headers.newBuilder().add("referer", "https://uqload.com/").build()
|
||||
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) }
|
||||
if (server.contains("uqload") || server.contains("upload")) {
|
||||
videoList.addAll(UqloadExtractor(client).videosFromUrl(url))
|
||||
}
|
||||
}
|
||||
return videoList
|
||||
@ -274,7 +269,7 @@ class Doramasyt : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val qualities = arrayOf(
|
||||
"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 {
|
||||
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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation(project(':lib-mp4upload-extractor'))
|
||||
implementation(project(':lib-yourupload-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
||||
import android.util.Base64
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
import eu.kanade.tachiyomi.animeextension.es.latanime.extractors.UploadExtractor
|
||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||
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.mp4uploadextractor.Mp4uploadExtractor
|
||||
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.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -296,8 +296,7 @@ class Latanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
url.contains("uqload") -> {
|
||||
val headers = headers.newBuilder().add("referer", "https://uqload.com/").build()
|
||||
val videos = UploadExtractor(client).videoFromUrl(url, headers = headers, prefix = prefix)
|
||||
val videos = UqloadExtractor(client).videosFromUrl(url, prefix)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation(project(':lib-mp4upload-extractor'))
|
||||
implementation(project(':lib-yourupload-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.JkanimeExtractor
|
||||
import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.UqloadExtractor
|
||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||
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.okruextractor.OkruExtractor
|
||||
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.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -338,12 +338,7 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
}
|
||||
}
|
||||
url.contains("uqload") -> {
|
||||
val video = UqloadExtractor(client).videoFromUrl(url, headers)
|
||||
if (video != null) {
|
||||
listOf(video)
|
||||
} else {
|
||||
emptyList()
|
||||
}
|
||||
UqloadExtractor(client).videosFromUrl(url)
|
||||
}
|
||||
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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation(project(':lib-mp4upload-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
}
|
||||
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
@ -6,7 +6,6 @@ import android.util.Base64
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
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.model.AnimeFilter
|
||||
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.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.OkHttpClient
|
||||
@ -81,7 +81,6 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
override fun videoListParse(response: Response): List<Video> {
|
||||
val document = response.asJsoup()
|
||||
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 ->
|
||||
// val server = it.select("a").text()
|
||||
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("solidfiles") -> videoList.addAll(SolidFilesExtractor(client).videosFromUrl(url))
|
||||
url.contains("uqload") -> {
|
||||
val video = UploadExtractor(client).videoFromUrl(url, headers)
|
||||
if (video != null) videoList.add(video)
|
||||
videoList.addAll(UqloadExtractor(client).videosFromUrl(url))
|
||||
}
|
||||
url.contains("mp4upload") -> {
|
||||
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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation(project(':lib-streamwish-extractor'))
|
||||
implementation(project(':lib-filemoon-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" }
|
||||
"plusto" -> { serverUrl = "https://owodeuwu.xyz/v/$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) }
|
||||
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.animeextension.es.pelisplushd
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
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.AnimeFilterList
|
||||
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.streamlareextractor.StreamlareExtractor
|
||||
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.youruploadextractor.YourUploadExtractor
|
||||
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")
|
||||
}
|
||||
if (embedUrl.contains("uqload")) {
|
||||
UqloadExtractor(client).videosFromUrl(url, headers)
|
||||
UqloadExtractor(client).videosFromUrl(url)
|
||||
}
|
||||
return videoList
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import android.util.Base64
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
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.animesource.model.AnimeFilter
|
||||
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.streamlareextractor.StreamlareExtractor
|
||||
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.youruploadextractor.YourUploadExtractor
|
||||
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))
|
||||
}
|
||||
if (embedUrl.contains("uqload")) {
|
||||
UqloadExtractor(client).videosFromUrl(url, headers)
|
||||
UqloadExtractor(client).videosFromUrl(url)
|
||||
}
|
||||
if (embedUrl.contains("streamwish")) {
|
||||
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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||
implementation(project(':lib-okru-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.StreamVidExtractor
|
||||
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.VudeoExtractor
|
||||
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.okruextractor.OkruExtractor
|
||||
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.POST
|
||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||
@ -251,7 +251,7 @@ class FrenchAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
}
|
||||
source.contains("https://uqload") -> {
|
||||
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.serialization.decodeFromString
|
||||
import kotlinx.serialization.json.Json
|
||||
import okhttp3.Headers
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.Request
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
|
@ -13,6 +13,7 @@ ext {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation(project(":lib-sendvid-extractor"))
|
||||
implementation(project(":lib-sibnet-extractor"))
|
||||
implementation(project(":lib-dood-extractor"))
|
||||
|
@ -4,7 +4,6 @@ import android.app.Application
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
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.model.AnimeFilterList
|
||||
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.sendvidextractor.SendvidExtractor
|
||||
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.youruploadextractor.YourUploadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -206,7 +206,7 @@ class Anizm : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
|
||||
|
||||
private val doodExtractor by lazy { DoodExtractor(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 yourUploadExtractor by lazy { YourUploadExtractor(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"
|
||||
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)
|
||||
else -> null
|
||||
} ?: 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 {
|
||||
implementation(project(':lib-uqload-extractor'))
|
||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||
implementation(project(":lib-cryptoaes"))
|
||||
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.MailRuExtractor
|
||||
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.VudeoExtractor
|
||||
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.sibnetextractor.SibnetExtractor
|
||||
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.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -306,7 +306,7 @@ class TurkAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
StreamVidExtractor(client).videosFromUrl(hosterLink, headers, prefix = "$subber: ")
|
||||
}
|
||||
"UQLOAD" -> {
|
||||
UqloadExtractor(client).videosFromUrl(hosterLink, headers, "$subber: Uqload")
|
||||
UqloadExtractor(client).videosFromUrl(hosterLink, "$subber:")
|
||||
}
|
||||
"VK" -> {
|
||||
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