refactor: Make extensions use the uqload-extractor lib (#2161)

This commit is contained in:
Claudemirovsky
2023-09-09 08:23:07 -03:00
committed by GitHub
parent 4b0cf15499
commit ca0c58fe23
43 changed files with 68 additions and 395 deletions

View File

@ -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'))
}

View File

@ -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() }

View File

@ -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()
}
}

View File

@ -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'))

View File

@ -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()

View File

@ -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)
}
}

View File

@ -9,4 +9,8 @@ ext {
libVersion = '13'
}
dependencies {
implementation(project(':lib-uqload-extractor'))
}
apply from: "$rootDir/common.gradle"

View File

@ -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()

View File

@ -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()
}
}
}

View File

@ -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'))

View File

@ -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)

View File

@ -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
}
}
}

View File

@ -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'))

View File

@ -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"

View File

@ -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
}
}
}

View File

@ -10,6 +10,7 @@ ext {
}
dependencies {
implementation(project(':lib-uqload-extractor'))
implementation(project(':lib-streamtape-extractor'))
implementation(project(':lib-okru-extractor'))
}

View File

@ -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"

View File

@ -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
}
}
}

View File

@ -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'))

View File

@ -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") -> {

View File

@ -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()
}
}
}

View File

@ -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'))

View File

@ -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()
}

View File

@ -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
}
}
}

View File

@ -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
}
}
}

View File

@ -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"

View File

@ -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)

View File

@ -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
}
}
}

View File

@ -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'))

View File

@ -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) }

View File

@ -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
}

View File

@ -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()

View File

@ -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()
}
}
}

View File

@ -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'))

View File

@ -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),
)
}

View File

@ -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()
}
}
}

View File

@ -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

View File

@ -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"))

View File

@ -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()

View File

@ -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)
}
}

View File

@ -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"))

View File

@ -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")

View File

@ -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()
}
}
}