This commit is contained in:
helo 2023-10-21 16:18:16 +07:00
parent c954c59215
commit 249879f4d6
4 changed files with 65 additions and 34 deletions

View file

@ -1,5 +1,5 @@
// use an integer for version numbers
version = 14
version = 15
cloudstream {

View file

@ -4,9 +4,12 @@ import com.lagradost.cloudstream3.*
import com.lagradost.cloudstream3.LoadResponse.Companion.addAniListId
import com.lagradost.cloudstream3.LoadResponse.Companion.addMalId
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
import com.lagradost.cloudstream3.network.CloudflareKiller
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.httpsify
import com.lagradost.cloudstream3.utils.loadExtractor
import okhttp3.Interceptor
import okhttp3.Response
import org.jsoup.Jsoup
import org.jsoup.nodes.Element
@ -15,13 +18,26 @@ class AnimeIndoProvider : MainAPI() {
override var name = "AnimeIndo"
override val hasMainPage = true
override var lang = "id"
private val cloudflareKiller by lazy { CloudflareKiller() }
private val interceptor by lazy { CloudflareInterceptor(cloudflareKiller) }
override val supportedTypes = setOf(
TvType.Anime,
TvType.AnimeMovie,
TvType.OVA
)
class CloudflareInterceptor(private val cloudflareKiller: CloudflareKiller): Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val response = chain.proceed(request)
val doc = Jsoup.parse(response.peekBody(1024 * 1024).string())
if (doc.select("title").text() == "Just a moment...") {
return cloudflareKiller.intercept(chain)
}
return response
}
}
companion object {
fun getType(t: String): TvType {
return if (t.contains("OVA", true) || t.contains("Special")) TvType.OVA
@ -51,7 +67,7 @@ class AnimeIndoProvider : MainAPI() {
request: MainPageRequest
): HomePageResponse {
val url = "$mainUrl/${request.data}/page/$page"
val document = app.get(url).document
val document = app.get(url, interceptor = interceptor).document
val home = document.select("main#main div.animposx").mapNotNull {
it.toSearchResult()
}
@ -85,6 +101,7 @@ class AnimeIndoProvider : MainAPI() {
return newAnimeSearchResponse(title, href, TvType.Anime) {
this.posterUrl = posterUrl
addSub(epNum)
posterHeaders = cloudflareKiller.getCookieHeaders(mainUrl).toMap()
}
}
@ -93,7 +110,7 @@ class AnimeIndoProvider : MainAPI() {
val anime = mutableListOf<SearchResponse>()
(1..2).forEach { page ->
val link = "$mainUrl/page/$page/?s=$query"
val document = app.get(link).document
val document = app.get(link, interceptor = interceptor).document
val media = document.select(".site-main.relat > article").mapNotNull {
val title = it.selectFirst("div.title > h2")!!.ownText().trim()
val href = it.selectFirst("a")!!.attr("href")
@ -101,6 +118,7 @@ class AnimeIndoProvider : MainAPI() {
val type = getType(it.select("div.type").text().trim())
newAnimeSearchResponse(title, href, type) {
this.posterUrl = posterUrl
posterHeaders = cloudflareKiller.getCookieHeaders(mainUrl).toMap()
}
}
if(media.isNotEmpty()) anime.addAll(media)
@ -109,7 +127,7 @@ class AnimeIndoProvider : MainAPI() {
}
override suspend fun load(url: String): LoadResponse? {
val document = app.get(url).document
val document = app.get(url, interceptor = interceptor).document
val title = document.selectFirst("h1.entry-title")?.text()?.replace("Subtitle Indonesia", "")
?.trim() ?: return null
@ -150,6 +168,7 @@ class AnimeIndoProvider : MainAPI() {
addTrailer(trailer)
addMalId(tracker?.malId)
addAniListId(tracker?.aniId?.toIntOrNull())
posterHeaders = cloudflareKiller.getCookieHeaders(mainUrl).toMap()
}
}
@ -160,12 +179,12 @@ class AnimeIndoProvider : MainAPI() {
callback: (ExtractorLink) -> Unit
): Boolean {
val document = app.get(data).document
val document = app.get(data, interceptor = interceptor).document
document.select("div.itemleft > .mirror > option").mapNotNull {
fixUrl(Jsoup.parse(base64Decode(it.attr("value"))).select("iframe").attr("src"))
}.apmap {
if (it.startsWith(mainUrl)) {
app.get(it, referer = "$mainUrl/").document.select("iframe").attr("src")
app.get(it, referer = "$mainUrl/", interceptor = interceptor).document.select("iframe").attr("src")
} else {
it
}