fix(ar/witanime): Fix soraplay & mp4upload extractors + update baseUrl (#2297)
This commit is contained in:
@ -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() }
|
||||||
|
@ -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'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user