From ce2611d1bd4b3a6115730795d90bb8bf341962b0 Mon Sep 17 00:00:00 2001 From: WebDitto Date: Thu, 19 Dec 2024 20:49:25 -0300 Subject: [PATCH] feat(pt/animesotaku): New Source: Animes Otaku (#440) Co-authored-by: WebDitto --- src/pt/animesotaku/AndroidManifest.xml | 22 + src/pt/animesotaku/build.gradle | 11 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4038 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2171 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6193 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12152 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 18846 bytes .../pt/animesotaku/AnimesOtaku.kt | 244 +++++ .../pt/animesotaku/AnimesOtakuFilters.kt | 949 ++++++++++++++++++ .../pt/animesotaku/AnimesOtakuUrlActivity.kt | 41 + .../pt/animesotaku/dto/AnimesOtakuDto.kt | 105 ++ 11 files changed, 1372 insertions(+) create mode 100644 src/pt/animesotaku/AndroidManifest.xml create mode 100644 src/pt/animesotaku/build.gradle create mode 100644 src/pt/animesotaku/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animesotaku/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animesotaku/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animesotaku/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animesotaku/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animesotaku/src/eu/kanade/tachiyomi/animeextension/pt/animesotaku/AnimesOtaku.kt create mode 100644 src/pt/animesotaku/src/eu/kanade/tachiyomi/animeextension/pt/animesotaku/AnimesOtakuFilters.kt create mode 100644 src/pt/animesotaku/src/eu/kanade/tachiyomi/animeextension/pt/animesotaku/AnimesOtakuUrlActivity.kt create mode 100644 src/pt/animesotaku/src/eu/kanade/tachiyomi/animeextension/pt/animesotaku/dto/AnimesOtakuDto.kt diff --git a/src/pt/animesotaku/AndroidManifest.xml b/src/pt/animesotaku/AndroidManifest.xml new file mode 100644 index 00000000..344af03c --- /dev/null +++ b/src/pt/animesotaku/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/src/pt/animesotaku/build.gradle b/src/pt/animesotaku/build.gradle new file mode 100644 index 00000000..4031a00f --- /dev/null +++ b/src/pt/animesotaku/build.gradle @@ -0,0 +1,11 @@ +ext { + extName = 'AnimesOtaku' + extClass = '.AnimesOtaku' + extVersionCode = 1 +} + +apply from: "$rootDir/common.gradle" + +dependencies { + implementation(project(":lib:blogger-extractor")) +} diff --git a/src/pt/animesotaku/res/mipmap-hdpi/ic_launcher.png b/src/pt/animesotaku/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..13f236fb10c9e1ce7f4477e7b1ffd1b256c67ad2 GIT binary patch literal 4038 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 literal 0 HcmV?d00001 diff --git a/src/pt/animesotaku/src/eu/kanade/tachiyomi/animeextension/pt/animesotaku/AnimesOtaku.kt b/src/pt/animesotaku/src/eu/kanade/tachiyomi/animeextension/pt/animesotaku/AnimesOtaku.kt new file mode 100644 index 00000000..91c07458 --- /dev/null +++ b/src/pt/animesotaku/src/eu/kanade/tachiyomi/animeextension/pt/animesotaku/AnimesOtaku.kt @@ -0,0 +1,244 @@ +package eu.kanade.tachiyomi.animeextension.pt.animesotaku + +import android.util.Base64 +import eu.kanade.tachiyomi.animeextension.pt.animesotaku.dto.SearchRequestDto +import eu.kanade.tachiyomi.animeextension.pt.animesotaku.dto.SearchResponseDto +import eu.kanade.tachiyomi.animeextension.pt.animesotaku.dto.SingleDto +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +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.AnimeHttpSource +import eu.kanade.tachiyomi.lib.bloggerextractor.BloggerExtractor +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.network.awaitSuccess +import eu.kanade.tachiyomi.util.asJsoup +import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking +import eu.kanade.tachiyomi.util.parseAs +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.Request +import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.Response +import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import uy.kohesive.injekt.injectLazy +import java.util.concurrent.TimeUnit + +class AnimesOtaku : AnimeHttpSource() { + + override val name = "Animes Otaku" + + override val baseUrl = "https://www.animesotaku.cc" + + override val lang = "pt" + + override val supportsLatest = true + + private val json: Json by injectLazy() + + override val client = network.client.newBuilder() + .connectTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .build() + + override fun headersBuilder() = super.headersBuilder() + .add("Referer", baseUrl) + + // ============================== Popular =============================== + override fun popularAnimeRequest(page: Int) = searchOrderBy("total_kiranime_views", page) + + override fun popularAnimeParse(response: Response): AnimesPage { + val results = response.parseAs() + val doc = Jsoup.parseBodyFragment(results.data) + val animes = doc.select("div.w-full:has(div.kira-anime)").map { + SAnime.create().apply { + thumbnail_url = it.selectFirst("img")?.attr("src") + with(it.selectFirst("h3 > a")!!) { + title = text().replace(" Assistir Online", "") + setUrlWithoutDomain(attr("href")) + } + } + } + + val page = response.request.url.queryParameter("page")?.toIntOrNull() ?: 1 + val hasNextPage = page < results.pages + return AnimesPage(animes, hasNextPage) + } + + // =============================== Latest =============================== + override fun latestUpdatesRequest(page: Int) = searchOrderBy("kiranime_anime_updated", page) + + override fun latestUpdatesParse(response: Response) = popularAnimeParse(response) + + // =============================== Search =============================== + override suspend fun getSearchAnime( + page: Int, + query: String, + filters: AnimeFilterList, + ): AnimesPage { + return if (query.startsWith(PREFIX_SEARCH)) { // URL intent handler + val id = query.removePrefix(PREFIX_SEARCH) + client.newCall(GET("$baseUrl/anime/$id")) + .awaitSuccess() + .use(::searchAnimeByIdParse) + } else { + super.getSearchAnime(page, query, filters) + } + } + + private fun searchAnimeByIdParse(response: Response): AnimesPage { + val details = animeDetailsParse(response).apply { + setUrlWithoutDomain(response.request.url.toString()) + initialized = true + } + + return AnimesPage(listOf(details), false) + } + + override fun getFilterList() = AnimesOtakuFilters.FILTER_LIST + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + val params = AnimesOtakuFilters.getSearchParameters(filters) + val (meta, orderBy) = when (params.orderBy) { + "date", "title" -> Pair(null, params.orderBy) + else -> Pair(params.orderBy, "meta_value_num") + } + + val single = SingleDto( + paged = page, + key = meta, + order = params.order, + orderBy = orderBy, + season = params.season.ifEmpty { null }, + year = params.year.ifEmpty { null }, + ) + + val taxonomies = with(params) { + listOf(genres, status, producers, studios, types).filter { + it.terms.isNotEmpty() + } + } + + val requestDto = SearchRequestDto(single, query, query, taxonomies) + val requestData = json.encodeToString(requestDto) + return searchRequest(requestData, page) + } + + override fun searchAnimeParse(response: Response) = popularAnimeParse(response) + + private fun searchOrderBy(order: String, page: Int): Request { + val body = """ + { + "keyword": "", + "query": "", + "single": { + "paged": $page, + "orderby": "meta_value_num", + "meta_key": "$order", + "order": "desc" + }, + "tax": [] + } + """.trimIndent() + return searchRequest(body, page) + } + + private fun searchRequest(data: String, page: Int): Request { + val body = data.toRequestBody("application/json".toMediaType()) + return POST( + "$baseUrl/wp-json/kiranime/v1/anime/advancedsearch?_locale=user&page=$page", + headers, + body, + ) + } + + // =========================== Anime Details ============================ + override fun animeDetailsParse(response: Response) = SAnime.create().apply { + val document = response.asJsoup() + + setUrlWithoutDomain(document.location()) + thumbnail_url = document.selectFirst("div.anime-image img")?.attr("src") + title = + document.selectFirst("h1 span.show.anime")!!.text().replace(" Assistir Online", "") + genre = + document.select("span.leading-6 a[class~=border-opacity-30]").joinToString { it.text() } + description = document.selectFirst("div[data-synopsis]")?.text() + author = document.selectFirst("span.leading-6 a[href*=\"producer\"]:first-child")?.text() + artist = document.selectFirst("span.leading-6 a[href*=\"studio\"]:first-child")?.text() + } + + // ============================== Episodes ============================== + override fun episodeListParse(response: Response): List { + return getRealDoc(response.asJsoup()) + .select(episodeListSelector()) + .map(::episodeFromElement) + } + + fun episodeListSelector(): String = "div[data-current-slider=\"episode-list\"] a" + + fun episodeFromElement(element: Element) = SEpisode.create().apply { + setUrlWithoutDomain(element.attr("href")) + name = element.selectFirst("span.font-semibold")!!.text().trim() + episode_number = name.substringAfterLast(" ").toFloatOrNull() ?: 0F + } + + // ============================ Video Links ============================= + private val bloggerExtractor by lazy { BloggerExtractor(client) } + + override fun videoListParse(response: Response): List