From 787b5ef9db5c527a39e5739d5a6df35da90021db Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Sat, 2 Sep 2023 09:44:46 -0300 Subject: [PATCH] feat(animestream/tr): New source TRAnimeCI (#2124) --- .../tranimeci/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2980 bytes .../tranimeci/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1596 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4269 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7994 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11258 bytes .../src/ShittyProtectionInterceptor.kt | 73 +++++++++ .../animestream/tranimeci/src/TRAnimeCI.kt | 147 ++++++++++++++++++ .../tranimeci/src/TRAnimeCIFilters.kt | 51 ++++++ .../multisrc/animestream/AnimeStream.kt | 8 +- .../animestream/AnimeStreamFilters.kt | 2 +- .../animestream/AnimeStreamGenerator.kt | 1 + 11 files changed, 277 insertions(+), 5 deletions(-) create mode 100644 multisrc/overrides/animestream/tranimeci/res/mipmap-hdpi/ic_launcher.png create mode 100644 multisrc/overrides/animestream/tranimeci/res/mipmap-mdpi/ic_launcher.png create mode 100644 multisrc/overrides/animestream/tranimeci/res/mipmap-xhdpi/ic_launcher.png create mode 100644 multisrc/overrides/animestream/tranimeci/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 multisrc/overrides/animestream/tranimeci/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 multisrc/overrides/animestream/tranimeci/src/ShittyProtectionInterceptor.kt create mode 100644 multisrc/overrides/animestream/tranimeci/src/TRAnimeCI.kt create mode 100644 multisrc/overrides/animestream/tranimeci/src/TRAnimeCIFilters.kt diff --git a/multisrc/overrides/animestream/tranimeci/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/animestream/tranimeci/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a350ba9239cf9eced8eee3d5c1528a7c3a38f4 GIT binary patch literal 2980 zcmV;V3tRMwP)bcr?5Wghw!70vISZ_=)fR*nV^NA#=XH+1p*yB6+3N-R;iI z&iv;8ec$ZN?g{AJk`fR)`6MUM35cVRPC%W2v^kMZ1?j9H2K0W1Dz!3+eQJ(kLQzqX ztDvCZF`v&@9En66tVBtY+JT~TNiQaMUhX(uBVl=|mct66Jki1gLGW5EmeY-mjh|h) za;1@-N>*u}8jOPm4azs0&1)JO8irAY)2T31+XCA*Lhbi^oG)ZB7#h>l(+?Sq##t2= z71h+9upFdhfP}7HyJlr)XMaev$Hf;A-@9rX*{a4n#mCA~TV5*pva+&v*VoriqV~xu zDH$MhadGivGOLwz(adCkjx6hxvnu)G9lIRSc$&NnA= z)^dQ1l-LmilqlS)ft9MS(%N`AC~c1upm$mU-BtyNOze(=;(IjJ-}j=yN}${`K*?0Z zgZICN6}!G}3esX`$$W_tKcgiLuOl=8qT7qRoV1*?)&qbR2wL*$4v1$~N-L{0ot9w0 zQxB_yZh(}Sm|DN129}b>D@mgnP<#|i1c3*JcV0gLhtUSgDw) zu7LD{qqMh`rc(+y5jf3&XujmGd$E{_84Lm(Rts{nTC$F zW`x4gyX9Dx=%-qrq(l{Jfa(s2-Tpt=qYz_<_QBV34XC^AN9Cm|G&Oqxg9%QHftEca zR5yii`KAZe4L*3hY%WSY9F+~f(=nVtpgznqC*4*->_P*IdtuQlPvYQ#z4&SjZ*3c1Qk)AZ&lC86~Y(M;l6)z2JhGep1^}z^4 zvkC5y2}i3!*f6CD^&SEHuG{hJT@q@^nX_&9gCbTv?Z?k{JFxX6nP{8^VVZ1WJ3eoDq@5-v9ck`Nj5Cdeh zS@Gj3Bkh{9jR3i@VuwaRIXOAeD3+1t!m|^`p!A=6aI3!Q4x5-A zuX;X{02#6QSPP)nN7*s^kw#F|$ENcR{PfchY&59c`?3c{giu*;phzZQd!-5Q?q`6q zVVB(a$C)txIyHh*wKkln5wWqnKB^#QVhhGOvG$M$xh@l?^z~rreh~xmLg?Q`K$){zE6)0eW$$1E;D59KX!QT0lXDh<>?Y?5T`k@?a4q-GL>$!+2p}2=9@jY$ktY zqFa@x`y27^uR`dNYlkQVu(vW8^;6&JFW{!nf+LrGc)YJ2WoO(N-_L?Wmjbv_AGrhQ zk*)#?=y{Vbt_zqpD1-=&vlt*htXTf9AiB5&OzdYwrszXMP{hs)63*3xF|xNACbI>5 z&NgfFLCnOMlQtR*nDoTgQQPFf&I2ug~>V#@WSi$(*Uz2n(&mtOT)|0JFgocdcdgNjAFNfJiI#nDY(NT z{`SdM+^DXB-yfjyOgK8-A)0768!@CP3;DTO*!czBvxS1VS=X4*EP0JdL0?3gAKivg1JE!pWdWM*VU&8RTP$)1qJ`O7zG0?mnI6;%iXf^?G_N?11~z0GT| zTEC;KiOJ0<>Ji0a73IOwdR|UFx+o}q!YtXvQVH=&Oh!o>9z0%sHJMmOMuzONPyB^b z3GqrAt|m<~RdsOVb?1 z?p5edMK!u9C=nnfJ*S6?I#M;d15yG-iBCu+{PQB0TE)cY(-h{Jf|Nut9zZQ%c*6v( zpmYbsgTYgh99+NRR`V$0}zhLVcutt2Ja z)RKnk>n11tBYN$0J(a^A6lk{+k@S^J%Fx~6aIB$e)NjgFga?JE4kh`uKuDIC;2fq0 z7iLhJD%$B0IpwcpvU1I|v)90j2+~S2wPN~irM<(=t)qanmP?N|NnV0e;rIJz)3FP* zv-R|pUg~9KF*9R8T(ozgm+?mtq~27xoqqG)x9{LKsxF?YFZl@0Ia;#XPo>;wg~Oi6 zNcaZ>yoNHh&@&OVbWT2rb}^=)`xFv;W{~+ArWR&WY-ey({jor-o0yW=zb(Xe_L~P* zbr*MVMh1xO?0G=8+`@KEe@)T0zOg?xxu5^wBnBw<$?cE(RSDdN>6M@p5Qk(ZpiV&A ajP1Xy6_D)ucxN literal 0 HcmV?d00001 diff --git a/multisrc/overrides/animestream/tranimeci/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/animestream/tranimeci/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..376e3753c3d7cabaa0b3266eecaa269a452e061e GIT binary patch literal 1596 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 P00000NkvXXu0mjfrhf}o literal 0 HcmV?d00001 diff --git a/multisrc/overrides/animestream/tranimeci/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/animestream/tranimeci/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..488e8a50d5133af521a156efaa1d81a6f8d89ba5 GIT binary patch literal 7994 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 literal 0 HcmV?d00001 diff --git a/multisrc/overrides/animestream/tranimeci/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/animestream/tranimeci/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1d926a4fae0bfaf23580d2579b2e4ca2a0f06b49 GIT binary patch literal 11258 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 literal 0 HcmV?d00001 diff --git a/multisrc/overrides/animestream/tranimeci/src/ShittyProtectionInterceptor.kt b/multisrc/overrides/animestream/tranimeci/src/ShittyProtectionInterceptor.kt new file mode 100644 index 000000000..18394917c --- /dev/null +++ b/multisrc/overrides/animestream/tranimeci/src/ShittyProtectionInterceptor.kt @@ -0,0 +1,73 @@ +package eu.kanade.tachiyomi.animeextension.tr.tranimeci + +import app.cash.quickjs.QuickJs +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.Cookie +import okhttp3.Interceptor +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import java.io.IOException + +class ShittyProtectionInterceptor(private val client: OkHttpClient) : Interceptor { + + override fun intercept(chain: Interceptor.Chain): Response { + val request = chain.request() + val response = chain.proceed(request) + // ignore non-protected requests + if (response.code != 202) return response + return try { + chain.proceed(bypassProtection(request, response)) + } catch (e: Throwable) { + // Because OkHttp's enqueue only handles IOExceptions, wrap the exception so that + // we don't crash the entire app + e.printStackTrace() + throw IOException(e) + } + } + + private fun bypassProtection(request: Request, response: Response): Request { + val doc = response.use { it.asJsoup() } + + val script = doc.selectFirst("script:containsData(slowAES)")!!.data() + + val slowAES = doc.selectFirst("script[src*=min.js]")!!.attr("abs:src").let { url -> + client.newCall(GET(url)).execute().use { it.body.string() } + } + + val patchedScript = slowAES + "\n" + ADDITIONAL_FUNCTIONS + script + .replace("document.cookie=", "") + .replace("location.href", "// ") + + val cookieString = QuickJs.create().use { + it.evaluate(patchedScript)?.toString() + }!! + + val cookie = Cookie.parse(request.url, cookieString)!! + + client.cookieJar.saveFromResponse(request.url, listOf(cookie)) + + val headers = request.headers.newBuilder() + .add("Cookie", cookie.toString()) + .build() + + return GET(request.url.toString(), headers) + } + + companion object { + private val ADDITIONAL_FUNCTIONS get() = """ + // QJS doesnt have atob(b64dec) >:( + atob = function(s) { + var e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,L=s.length; + var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + for(i=0;i<64;i++){e[A.charAt(i)]=i;} + for(x=0;x=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));} + } + return r; + }; + """.trimIndent() + } +} diff --git a/multisrc/overrides/animestream/tranimeci/src/TRAnimeCI.kt b/multisrc/overrides/animestream/tranimeci/src/TRAnimeCI.kt new file mode 100644 index 000000000..48c7503f7 --- /dev/null +++ b/multisrc/overrides/animestream/tranimeci/src/TRAnimeCI.kt @@ -0,0 +1,147 @@ +package eu.kanade.tachiyomi.animeextension.tr.tranimeci + +import eu.kanade.tachiyomi.animeextension.tr.tranimeci.TRAnimeCIFilters.CountryFilter +import eu.kanade.tachiyomi.animeextension.tr.tranimeci.TRAnimeCIFilters.GenresFilter +import eu.kanade.tachiyomi.animeextension.tr.tranimeci.TRAnimeCIFilters.SeasonFilter +import eu.kanade.tachiyomi.animeextension.tr.tranimeci.TRAnimeCIFilters.StudioFilter +import eu.kanade.tachiyomi.animeextension.tr.tranimeci.TRAnimeCIFilters.TypeFilter +import eu.kanade.tachiyomi.animesource.model.AnimeFilter +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +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.multisrc.animestream.AnimeStream +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStreamFilters +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat +import java.util.Locale + +class TRAnimeCI : AnimeStream( + "tr", + "TRAnimeCI", + "https://tranimeci.com", +) { + override val client by lazy { + network.client.newBuilder() + .addInterceptor(ShittyProtectionInterceptor(network.client)) + .build() + } + + override fun headersBuilder() = super.headersBuilder().add("Referer", "$baseUrl/") + + override val animeListUrl = "$baseUrl/search" + + override val dateFormatter by lazy { + SimpleDateFormat("dd MMMM yyyy", Locale("tr")) + } + + // ============================== Popular =============================== + override fun popularAnimeRequest(page: Int) = GET(baseUrl) + + override fun popularAnimeSelector() = "div.releases:contains(Populer) + div.listupd a.tip" + + override fun popularAnimeNextPageSelector() = null + + // =============================== Latest =============================== + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/index?page=$page") + + override fun latestUpdatesSelector() = "div.releases:contains(Son Güncellenenler) ~ div.listupd a.tip" + + override fun latestUpdatesFromElement(element: Element) = + searchAnimeFromElement(element).apply { + // Convert episode url to anime url + url = "/series$url".replace("/video", "").substringBefore("-bolum").substringBeforeLast("-") + } + + override fun latestUpdatesNextPageSelector() = "div.hpage > a:last-child[href]" + + // =============================== Search =============================== + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + val params = TRAnimeCIFilters.getSearchParameters(filters) + val url = "$animeListUrl?${params.genres}".toHttpUrl().newBuilder() + .addIfNotBlank("country[]", params.country) + .addIfNotBlank("season[]", params.season) + .addIfNotBlank("format[]", params.type) + .addIfNotBlank("studio[]", params.studio) + .build() + + return GET(url.toString(), headers) + } + + override fun searchAnimeSelector() = "div.advancedsearch a.tip" + + override fun searchAnimeNextPageSelector() = null + + // ============================== Filters =============================== + override val filtersSelector = "div.filter.dropdown > ul" + + override fun getFilterList(): AnimeFilterList { + return if (AnimeStreamFilters.filterInitialized()) { + AnimeFilterList( + GenresFilter("Tür"), + AnimeFilter.Separator(), + CountryFilter("Ülke"), + SeasonFilter("Mevsim"), + TypeFilter("Tip"), + StudioFilter("Studio"), + ) + } else { + AnimeFilterList(AnimeFilter.Header(filtersMissingWarning)) + } + } + + // =========================== Anime Details ============================ + override val animeDetailsSelector = "div.infox" + override val animeStatusText = "Durum" + + override fun parseStatus(statusString: String?): Int { + return when (statusString?.trim()?.lowercase()) { + "tamamlandı" -> SAnime.COMPLETED + "devam ediyor" -> SAnime.ONGOING + else -> SAnime.UNKNOWN + } + } + + // ============================== Episodes ============================== + override fun episodeListParse(response: Response) = super.episodeListParse(response).reversed() + + override fun episodeFromElement(element: Element) = SEpisode.create().apply { + setUrlWithoutDomain(element.attr("abs:href")) + val epNum = element.selectFirst(".epl-title")!!.text() + .substringBefore(".") + .substringBefore(" ") + .toIntOrNull() ?: 1 // Int because of the episode name, a Float would render with more zeros. + + name = "Bölüm $epNum" + episode_number = epNum.toFloat() + + date_upload = element.selectFirst(".epl-date")?.text().toDate() + } + + // ============================ Video Links ============================= + override fun videoListParse(response: Response): List