Animixplay: improve popular list fetching (#364)

This commit is contained in:
GouravShDev
2022-02-26 17:28:24 +05:30
committed by GitHub
parent 4deaaa7f3e
commit 895c85dfb0
2 changed files with 21 additions and 26 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'Animixplay' extName = 'Animixplay'
pkgNameSuffix = 'en.animixplay' pkgNameSuffix = 'en.animixplay'
extClass = '.Animixplay' extClass = '.Animixplay'
extVersionCode = 6 extVersionCode = 7
libVersion = '12' libVersion = '12'
} }

View File

@ -21,6 +21,7 @@ import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.boolean
import kotlinx.serialization.json.int import kotlinx.serialization.json.int
import kotlinx.serialization.json.jsonArray import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonObject
@ -37,7 +38,6 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.lang.Exception import java.lang.Exception
import java.util.Locale
@ExperimentalSerializationApi @ExperimentalSerializationApi
class Animixplay : ConfigurableAnimeSource, ParsedAnimeHttpSource() { class Animixplay : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
@ -58,44 +58,39 @@ class Animixplay : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000) Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
} }
var nextPage = "99999999"
var hasNextPage = true
override fun popularAnimeSelector(): String = throw Exception("not used") override fun popularAnimeSelector(): String = throw Exception("not used")
override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/?tab=popular") override fun popularAnimeRequest(page: Int): Request {
val formBody = FormBody.Builder()
.add("genre", "any")
.add("minstr", nextPage)
.add("orderby", "popular")
.build()
return POST("https://animixplay.to/api/search", headers, body = formBody)
}
override fun popularAnimeParse(response: Response): AnimesPage { override fun popularAnimeParse(response: Response): AnimesPage {
val document = response.asJsoup() val document = response.asJsoup()
val scriptData = document.select("script:containsData(var nowtime)").toString() val responseJson = json.decodeFromString<JsonObject>(document.select("body").text())
val envSeason = scriptData.substringAfter("var envSeason = '").substringBefore("';") nextPage = responseJson["last"]!!.jsonPrimitive.content
val envYear = scriptData.substringAfter("var envYear = ").substringBefore(";") hasNextPage = responseJson["more"]!!.jsonPrimitive.boolean
val animeJson = json.decodeFromString<JsonObject>( val animeList = responseJson["result"]!!.jsonArray
client.newCall(
GET(
url = "https://animixplay.to/assets/season/$envYear/${
envSeason.toLowerCase(
Locale.ROOT
)
}.json",
headers = Headers.headersOf("Referer", document.location())
)
).execute().body!!.string()
)
val animeList = animeJson["anime"]!!.jsonObject
val animes = animeList.map { element -> val animes = animeList.map { element ->
popularAnimeFromElement(element.value.jsonObject) popularAnimeFromElement(element.jsonObject)
} }
return AnimesPage(animes, false) return AnimesPage(animes, hasNextPage)
} }
override fun popularAnimeFromElement(element: Element) = throw Exception("not used") override fun popularAnimeFromElement(element: Element) = throw Exception("not used")
private fun popularAnimeFromElement(animeJson: JsonObject): SAnime { private fun popularAnimeFromElement(animeJson: JsonObject): SAnime {
val anime = SAnime.create() val anime = SAnime.create()
val url = "https://animixplay.to/assets/mal/${ anime.setUrlWithoutDomain(animeJson["url"]!!.jsonPrimitive.content)
animeJson["mal_id"]!!.jsonPrimitive.content anime.thumbnail_url = animeJson["picture"]!!.jsonPrimitive.content
}.json"
anime.setUrlWithoutDomain(url)
anime.thumbnail_url = animeJson["image_url"]!!.jsonPrimitive.content
anime.title = animeJson["title"]!!.jsonPrimitive.content anime.title = animeJson["title"]!!.jsonPrimitive.content
return anime return anime
} }