fix(ar/witanime): Fix soraplay & mp4upload extractors + update baseUrl (#2297)

This commit is contained in:
Claudemirovsky
2023-10-02 07:09:14 -03:00
committed by GitHub
parent 8152bb635e
commit 0ad948b37b
4 changed files with 27 additions and 11 deletions

View File

@ -10,7 +10,7 @@ import dev.datlag.jsunpacker.JsUnpacker
class Mp4uploadExtractor(private val client: OkHttpClient) { class Mp4uploadExtractor(private val client: OkHttpClient) {
fun videosFromUrl(url: String, headers: Headers, prefix: String = "", suffix: String = ""): List<Video> { fun videosFromUrl(url: String, headers: Headers, prefix: String = "", suffix: String = ""): List<Video> {
val newHeaders = headers.newBuilder() val newHeaders = headers.newBuilder()
.add("referer", REFERER) .set("referer", REFERER)
.build() .build()
val doc = client.newCall(GET(url, newHeaders)).execute().use { it.asJsoup() } val doc = client.newCall(GET(url, newHeaders)).execute().use { it.asJsoup() }

View File

@ -7,7 +7,7 @@ ext {
extName = 'WIT ANIME' extName = 'WIT ANIME'
pkgNameSuffix = 'ar.witanime' pkgNameSuffix = 'ar.witanime'
extClass = '.WitAnime' extClass = '.WitAnime'
extVersionCode = 44 extVersionCode = 45
libVersion = '13' libVersion = '13'
} }

View File

@ -23,7 +23,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import okhttp3.OkHttpClient
import okhttp3.Response import okhttp3.Response
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
@ -35,13 +34,13 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val name = "WIT ANIME" override val name = "WIT ANIME"
override val baseUrl = "https://witanime.fun" override val baseUrl = "https://witanime.rest"
override val lang = "ar" override val lang = "ar"
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient override val client = network.cloudflareClient
override fun headersBuilder() = super.headersBuilder().add("Referer", baseUrl) override fun headersBuilder() = super.headersBuilder().add("Referer", baseUrl)
@ -145,7 +144,10 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
return when { return when {
url.contains("yonaplay") -> extractFromMulti(url) url.contains("yonaplay") -> extractFromMulti(url)
url.contains("soraplay") -> { url.contains("soraplay") -> {
soraPlayExtractor.videosFromUrl(url, headers) when {
url.contains("/mirror") -> extractFromMulti(url)
else -> soraPlayExtractor.videosFromUrl(url, headers)
}
} }
url.contains("dood") -> { url.contains("dood") -> {
doodExtractor.videoFromUrl(url, "Dood mirror") doodExtractor.videoFromUrl(url, "Dood mirror")
@ -176,9 +178,22 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
} }
private fun extractFromMulti(url: String): List<Video> { private fun extractFromMulti(url: String): List<Video> {
val doc = client.newCall(GET(url, headers)).execute().asJsoup() val newHeaders = when {
return doc.select("div.OD li").flatMap { url.contains("soraplay") ->
val videoUrl = it.attr("onclick").substringAfter("go_to_player('").substringBefore("')") super.headersBuilder().set("referer", "https://yonaplay.org").build()
else -> headers
}
val doc = client.newCall(GET(url, newHeaders)).execute()
.use { it.asJsoup() }
return doc.select(".OD li").flatMap { element ->
val videoUrl = element.attr("onclick").substringAfter("go_to_player('")
.substringBefore("')")
.let {
when {
it.startsWith("https:") -> it
else -> "https:$it"
}
}
runCatching { extractVideos(videoUrl) }.getOrElse { emptyList() } runCatching { extractVideos(videoUrl) }.getOrElse { emptyList() }
} }
} }

View File

@ -8,14 +8,15 @@ import okhttp3.OkHttpClient
class SoraPlayExtractor(private val client: OkHttpClient) { class SoraPlayExtractor(private val client: OkHttpClient) {
fun videosFromUrl(url: String, headers: Headers): List<Video> { fun videosFromUrl(url: String, headers: Headers): List<Video> {
val doc = client.newCall(GET(url)).execute().asJsoup() val newHeaders = headers.newBuilder().set("referer", "https://yonaplay.org/").build()
val doc = client.newCall(GET(url, newHeaders)).execute().asJsoup()
val script = doc.selectFirst("script:containsData(sources)")!! val script = doc.selectFirst("script:containsData(sources)")!!
val data = script.data().substringAfter("sources: [").substringBefore("],") val data = script.data().substringAfter("sources: [").substringBefore("],")
return data.split("\"file\":\"").drop(1).map { source -> return data.split("\"file\":\"").drop(1).map { source ->
val src = source.substringBefore("\"") val src = source.substringBefore("\"")
val quality = "Soraplay: " + source.substringAfter("\"label\":\"").substringBefore("\"") val quality = "Soraplay: " + source.substringAfter("\"label\":\"").substringBefore("\"")
Video(src, quality, src, headers = headers) Video(src, quality, src, headers = newHeaders)
} }
} }
} }