From 48bb1811f488e019b69853856ba7a307e09052ea Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Tue, 2 May 2023 09:20:30 -0300 Subject: [PATCH] fix(ar/animeblkom): Fix thumbnails & video extractor (#1571) * fix: Fix thumbnails * fix: Fix video extractor and add more * refactor: Minor refactor * chore: Bump version --- src/ar/animeblkom/build.gradle | 7 +- .../ar/animeblkom/AnimeBlkom.kt | 199 ++++++++---------- .../extractors/Mp4uploadExtractor.kt | 25 +++ 3 files changed, 121 insertions(+), 110 deletions(-) create mode 100644 src/ar/animeblkom/src/eu/kanade/tachiyomi/animeextension/ar/animeblkom/extractors/Mp4uploadExtractor.kt diff --git a/src/ar/animeblkom/build.gradle b/src/ar/animeblkom/build.gradle index 15fa4b92b..34bd67eae 100644 --- a/src/ar/animeblkom/build.gradle +++ b/src/ar/animeblkom/build.gradle @@ -5,8 +5,13 @@ ext { extName = 'أنمي بالكوم' pkgNameSuffix = 'ar.animeblkom' extClass = '.AnimeBlkom' - extVersionCode = 8 + extVersionCode = 9 libVersion = '13' } +dependencies { + implementation(project(":lib-okru-extractor")) + implementation("dev.datlag.jsunpacker:jsunpacker:1.0.1") +} + apply from: "$rootDir/common.gradle" diff --git a/src/ar/animeblkom/src/eu/kanade/tachiyomi/animeextension/ar/animeblkom/AnimeBlkom.kt b/src/ar/animeblkom/src/eu/kanade/tachiyomi/animeextension/ar/animeblkom/AnimeBlkom.kt index 0356224c6..f78748eac 100644 --- a/src/ar/animeblkom/src/eu/kanade/tachiyomi/animeextension/ar/animeblkom/AnimeBlkom.kt +++ b/src/ar/animeblkom/src/eu/kanade/tachiyomi/animeextension/ar/animeblkom/AnimeBlkom.kt @@ -4,6 +4,7 @@ import android.app.Application import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.ar.animeblkom.extractors.Mp4uploadExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList @@ -11,11 +12,10 @@ 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.okruextractor.OkruExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup -import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrlOrNull -import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document @@ -34,126 +34,96 @@ class AnimeBlkom : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val supportsLatest = false - override val client: OkHttpClient = network.cloudflareClient + override val client = network.cloudflareClient + + override fun headersBuilder() = super.headersBuilder().add("Referer", baseUrl) private val preferences: SharedPreferences by lazy { Injekt.get().getSharedPreferences("source_$id", 0x0000) } - override fun headersBuilder(): Headers.Builder { - return super.headersBuilder() - .add("Referer", "https://animeblkom.net") - } + // ============================== Popular =============================== + override fun popularAnimeSelector() = "div.contents div.poster > a" - // Popular - - override fun popularAnimeSelector(): String = "div.contents div.content div.content-inner div.poster a" - - override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/anime-list?page=$page") + override fun popularAnimeRequest(page: Int) = GET("$baseUrl/animes-list/?sort_by=rate&page=$page") override fun popularAnimeFromElement(element: Element): SAnime { - val anime = SAnime.create() - anime.thumbnail_url = baseUrl + element.select("img").attr("data-original") - anime.setUrlWithoutDomain(element.attr("href")) - anime.title = element.select("img").attr("alt").removePrefix(" poster") - return anime + return SAnime.create().apply { + val img = element.selectFirst("img")!! + thumbnail_url = img.attr("data-original") + title = img.attr("alt").removeSuffix(" poster") + setUrlWithoutDomain(element.attr("href")) + } } - override fun popularAnimeNextPageSelector(): String = "ul.pagination li.page-item a[rel=next]" - - // episodes + override fun popularAnimeNextPageSelector() = "ul.pagination li.page-item a[rel=next]" + // ============================== Episodes ============================== override fun episodeListParse(response: Response): List { val document = response.asJsoup() if (document.selectFirst(episodeListSelector()) == null) { return oneEpisodeParse(document) } - return document.select(episodeListSelector()).map { episodeFromElement(it) }.reversed() + return document.select(episodeListSelector()).map(::episodeFromElement).reversed() } private fun oneEpisodeParse(document: Document): List { - val episode = SEpisode.create() - episode.setUrlWithoutDomain(document.location()) - episode.episode_number = 1F - episode.name = document.selectFirst("div.name.col-xs-12 span h1")!!.text() - return listOf(episode) + return SEpisode.create().apply { + setUrlWithoutDomain(document.location()) + episode_number = 1F + name = document.selectFirst("div.name.col-xs-12 span h1")!!.text() + }.let(::listOf) } override fun episodeListSelector() = "ul.episodes-links li a" override fun episodeFromElement(element: Element): SEpisode { - val episode = SEpisode.create() - val epNum = getNumberFromEpsString(element.select("span:nth-child(3)").text()) - episode.setUrlWithoutDomain(element.attr("href")) - episode.episode_number = when { - (epNum.isNotEmpty()) -> epNum.toFloat() - else -> 1F + return SEpisode.create().apply { + setUrlWithoutDomain(element.attr("href")) + + val eptitle = element.selectFirst("span:nth-child(3)")!!.text() + val epNum = eptitle.filter { it.isDigit() } + episode_number = when { + (epNum.isNotEmpty()) -> epNum.toFloatOrNull() ?: 1F + else -> 1F + } + name = eptitle + " :" + element.selectFirst("span:nth-child(1)")!!.text() } - // episode.episode_number = element.select("span:nth-child(3)").text().replace(" - ", "").toFloat() - episode.name = element.select("span:nth-child(3)").text() + " :" + element.select("span:nth-child(1)").text() - - return episode } - private fun getNumberFromEpsString(epsStr: String): String { - return epsStr.filter { it.isDigit() } - } - - // Video links - + // ============================ Video Links ============================= override fun videoListParse(response: Response): List