From 7dabff1da9cde26a83c84a58d32b67971976d656 Mon Sep 17 00:00:00 2001 From: helo Date: Mon, 11 Sep 2023 22:25:05 +0700 Subject: [PATCH] anime/indo: optimize detail page and domain --- Animasu/build.gradle.kts | 2 +- .../src/main/kotlin/com/hexated/Animasu.kt | 17 +++++++++++----- AnimeIndoProvider/build.gradle.kts | 2 +- .../kotlin/com/hexated/AnimeIndoProvider.kt | 17 +++++++++++----- AnimeSailProvider/build.gradle.kts | 2 +- .../kotlin/com/hexated/AnimeSailProvider.kt | 15 ++++++++++---- KuramanimeProvider/build.gradle.kts | 2 +- .../kotlin/com/hexated/KuramanimeProvider.kt | 16 ++++++++++----- KuronimeProvider/build.gradle.kts | 2 +- .../kotlin/com/hexated/KuronimeProvider.kt | 17 +++++++++++----- NeonimeProvider/build.gradle.kts | 2 +- .../kotlin/com/hexated/NeonimeProvider.kt | 19 +++++++++++++----- Nimegami/build.gradle.kts | 2 +- .../src/main/kotlin/com/hexated/Nimegami.kt | 18 +++++++++++------ NontonAnimeIDProvider/build.gradle.kts | 2 +- .../com/hexated/NontonAnimeIDProvider.kt | 17 ++++++++++------ OploverzProvider/build.gradle.kts | 2 +- .../kotlin/com/hexated/OploverzProvider.kt | 20 ++++++++++++------- OtakudesuProvider/build.gradle.kts | 2 +- .../kotlin/com/hexated/OtakudesuProvider.kt | 17 +++++++++++----- Samehadaku/build.gradle.kts | 2 +- .../src/main/kotlin/com/hexated/Samehadaku.kt | 17 +++++++++++----- 22 files changed, 143 insertions(+), 69 deletions(-) diff --git a/Animasu/build.gradle.kts b/Animasu/build.gradle.kts index 4c3d51d1..ce71e900 100644 --- a/Animasu/build.gradle.kts +++ b/Animasu/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 2 +version = 3 cloudstream { diff --git a/Animasu/src/main/kotlin/com/hexated/Animasu.kt b/Animasu/src/main/kotlin/com/hexated/Animasu.kt index e6e38833..04efbd3a 100644 --- a/Animasu/src/main/kotlin/com/hexated/Animasu.kt +++ b/Animasu/src/main/kotlin/com/hexated/Animasu.kt @@ -1,13 +1,15 @@ package com.hexated 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.utils.* import org.jsoup.Jsoup import org.jsoup.nodes.Element class Animasu : MainAPI() { - override var mainUrl = "https://animasu.cc" + override var mainUrl = "https://animasu.uno" override var name = "Animasu" override val hasMainPage = true override var lang = "id" @@ -99,7 +101,7 @@ class Animasu : MainAPI() { val poster = document.selectFirst("div.bigcontent img")?.attr("src")?.replace("\n", "") val table = document.selectFirst("div.infox div.spe") - val type = table?.selectFirst("span:contains(Jenis:)")?.ownText() + val type = getType(table?.selectFirst("span:contains(Jenis:)")?.ownText()) val year = table?.selectFirst("span:contains(Rilis:)")?.ownText()?.substringAfterLast(",")?.trim()?.toIntOrNull() val status = table?.selectFirst("span:contains(Status:) font")?.text() val trailer = document.selectFirst("div.trailer iframe")?.attr("src") @@ -107,17 +109,22 @@ class Animasu : MainAPI() { val link = fixUrl(it.selectFirst("a")!!.attr("href")) val name = it.selectFirst("a")?.text() ?: "" val episode = Regex("Episode\\s?(\\d+)").find(name)?.groupValues?.getOrNull(0)?.toIntOrNull() - Episode(link, name, episode = episode) + Episode(link, episode = episode) }.reversed() - return newAnimeLoadResponse(title, url, getType(type)) { - posterUrl = poster + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = getStatus(status) plot = document.select("div.sinopsis p").text() this.tags = table?.select("span:contains(Genre:) a")?.map { it.text() } addTrailer(trailer) + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } diff --git a/AnimeIndoProvider/build.gradle.kts b/AnimeIndoProvider/build.gradle.kts index d52cf888..f6e8b592 100644 --- a/AnimeIndoProvider/build.gradle.kts +++ b/AnimeIndoProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 13 +version = 14 cloudstream { diff --git a/AnimeIndoProvider/src/main/kotlin/com/hexated/AnimeIndoProvider.kt b/AnimeIndoProvider/src/main/kotlin/com/hexated/AnimeIndoProvider.kt index aee7726e..5f3d09bd 100644 --- a/AnimeIndoProvider/src/main/kotlin/com/hexated/AnimeIndoProvider.kt +++ b/AnimeIndoProvider/src/main/kotlin/com/hexated/AnimeIndoProvider.kt @@ -1,6 +1,8 @@ package com.hexated 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.utils.ExtractorLink import com.lagradost.cloudstream3.utils.httpsify @@ -113,8 +115,8 @@ class AnimeIndoProvider : MainAPI() { ?.trim() ?: return null val poster = document.selectFirst("div.thumb > img[itemprop=image]")?.attr("src") val tags = document.select("div.genxed > a").map { it.text() } - val type = document.selectFirst("div.info-content > div.spe > span:contains(Type:)")?.ownText() - ?.trim()?.lowercase() ?: "tv" + val type = getType(document.selectFirst("div.info-content > div.spe > span:contains(Type:)")?.ownText() + ?.trim()?.lowercase() ?: "tv") val year = document.selectFirst("div.info-content > div.spe > span:contains(Released:)")?.ownText()?.let { Regex("\\d,\\s(\\d*)").find(it)?.groupValues?.get(1)?.toIntOrNull() } @@ -126,16 +128,19 @@ class AnimeIndoProvider : MainAPI() { val header = it.selectFirst("span.lchx > a") ?: return@mapNotNull null val episode = header.text().trim().replace("Episode", "").trim().toIntOrNull() val link = fixUrl(header.attr("href")) - Episode(link, header.text(), episode = episode) + Episode(link, episode = episode) }.reversed() val recommendations = document.select("div.relat div.animposx").mapNotNull { it.toSearchResult() } - return newAnimeLoadResponse(title, url, getType(type)) { + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { engName = title - posterUrl = poster + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = status @@ -143,6 +148,8 @@ class AnimeIndoProvider : MainAPI() { this.tags = tags this.recommendations = recommendations addTrailer(trailer) + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } diff --git a/AnimeSailProvider/build.gradle.kts b/AnimeSailProvider/build.gradle.kts index 73173634..cea32bdc 100644 --- a/AnimeSailProvider/build.gradle.kts +++ b/AnimeSailProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 9 +version = 10 cloudstream { diff --git a/AnimeSailProvider/src/main/kotlin/com/hexated/AnimeSailProvider.kt b/AnimeSailProvider/src/main/kotlin/com/hexated/AnimeSailProvider.kt index da62e664..721121a2 100644 --- a/AnimeSailProvider/src/main/kotlin/com/hexated/AnimeSailProvider.kt +++ b/AnimeSailProvider/src/main/kotlin/com/hexated/AnimeSailProvider.kt @@ -1,6 +1,8 @@ package com.hexated import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.LoadResponse.Companion.addAniListId +import com.lagradost.cloudstream3.LoadResponse.Companion.addMalId import com.lagradost.cloudstream3.mvvm.safeApiCall import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLinkType @@ -108,18 +110,21 @@ class AnimeSailProvider : MainAPI() { val title = document.selectFirst("h1.entry-title")?.text().toString() .replace("Subtitle Indonesia", "").trim() val poster = document.selectFirst("div.entry-content > img")?.attr("src") - val type = document.select("tbody th:contains(Tipe)").next().text().lowercase() + val type = getType(document.select("tbody th:contains(Tipe)").next().text().lowercase()) val year = document.select("tbody th:contains(Dirilis)").next().text().trim().toIntOrNull() val episodes = document.select("ul.daftar > li").map { val link = fixUrl(it.select("a").attr("href")) val name = it.select("a").text() val episode = Regex("Episode\\s?(\\d+)").find(name)?.groupValues?.getOrNull(0)?.toIntOrNull() - Episode(link, name, episode = episode) + Episode(link, episode = episode) }.reversed() - return newAnimeLoadResponse(title, url, getType(type)) { - posterUrl = poster + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = @@ -127,6 +132,8 @@ class AnimeSailProvider : MainAPI() { plot = document.selectFirst("div.entry-content > p")?.text() this.tags = document.select("tbody th:contains(Genre)").next().select("a").map { it.text() } + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } diff --git a/KuramanimeProvider/build.gradle.kts b/KuramanimeProvider/build.gradle.kts index 400d87fb..34c7e57e 100644 --- a/KuramanimeProvider/build.gradle.kts +++ b/KuramanimeProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 14 +version = 15 cloudstream { diff --git a/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProvider.kt b/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProvider.kt index b8751442..63a94194 100644 --- a/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProvider.kt +++ b/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProvider.kt @@ -1,6 +1,8 @@ package com.hexated import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.LoadResponse.Companion.addAniListId +import com.lagradost.cloudstream3.LoadResponse.Companion.addMalId import com.lagradost.cloudstream3.mvvm.safeApiCall import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities @@ -106,7 +108,6 @@ class KuramanimeProvider : MainAPI() { document.select("div.anime__details__widget > div > div:nth-child(1) > ul > li:nth-child(3)") .text().trim().replace("Status: ", "") ) - val type = document.selectFirst("div.col-lg-6.col-md-6 ul li:contains(Tipe:) a")?.text()?.lowercase() ?: "tv" val description = document.select(".anime__details__text > p").text().trim() val episodes = mutableListOf() @@ -119,31 +120,36 @@ class KuramanimeProvider : MainAPI() { val episode = Regex("(\\d+[.,]?\\d*)").find(name)?.groupValues?.getOrNull(0) ?.toIntOrNull() val link = it.attr("href") - Episode(link, name, episode = episode) + Episode(link, episode = episode) } if(eps.isEmpty()) break else episodes.addAll(eps) } + val type = getType(document.selectFirst("div.col-lg-6.col-md-6 ul li:contains(Tipe:) a")?.text()?.lowercase() ?: "tv", episodes.size) val recommendations = document.select("div#randomList > a").mapNotNull { val epHref = it.attr("href") val epTitle = it.select("h5.sidebar-title-h5.px-2.py-2").text() val epPoster = it.select(".product__sidebar__view__item.set-bg").attr("data-setbg") - newAnimeSearchResponse(epTitle, epHref, TvType.Anime) { this.posterUrl = epPoster addDubStatus(dubExist = false, subExist = true) } } - return newAnimeLoadResponse(title, url, getType(type, episodes.size)) { + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { engName = title - posterUrl = poster + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = status plot = description this.tags = tags this.recommendations = recommendations + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } diff --git a/KuronimeProvider/build.gradle.kts b/KuronimeProvider/build.gradle.kts index 74ca1975..5b95951e 100644 --- a/KuronimeProvider/build.gradle.kts +++ b/KuronimeProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 15 +version = 16 cloudstream { diff --git a/KuronimeProvider/src/main/kotlin/com/hexated/KuronimeProvider.kt b/KuronimeProvider/src/main/kotlin/com/hexated/KuronimeProvider.kt index 9160beb0..1a49aaee 100644 --- a/KuronimeProvider/src/main/kotlin/com/hexated/KuronimeProvider.kt +++ b/KuronimeProvider/src/main/kotlin/com/hexated/KuronimeProvider.kt @@ -2,6 +2,8 @@ package com.hexated import com.fasterxml.jackson.annotation.JsonProperty 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.extractors.helper.AesHelper import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson @@ -130,8 +132,8 @@ class KuronimeProvider : MainAPI() { val poster = document.selectFirst("div.l[itemprop=image] > img")?.attr("data-src") val tags = document.select(".infodetail > ul > li:nth-child(2) > a").map { it.text() } val type = - document.selectFirst(".infodetail > ul > li:nth-child(7)")?.ownText()?.removePrefix(":") - ?.lowercase()?.trim() ?: "tv" + getType(document.selectFirst(".infodetail > ul > li:nth-child(7)")?.ownText()?.removePrefix(":") + ?.lowercase()?.trim() ?: "tv") val trailer = document.selectFirst("div.tply iframe")?.attr("data-src") val year = Regex("\\d, (\\d*)").find( @@ -148,18 +150,23 @@ class KuronimeProvider : MainAPI() { val name = it.selectFirst("a")?.text() ?: return@mapNotNull null val episode = Regex("(\\d+[.,]?\\d*)").find(name)?.groupValues?.getOrNull(0)?.toIntOrNull() - Episode(link, name, episode = episode) + Episode(link, episode = episode) }.reversed() - return newAnimeLoadResponse(title, url, getType(type)) { + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { engName = title - posterUrl = poster + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = status plot = description addTrailer(trailer) this.tags = tags + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } diff --git a/NeonimeProvider/build.gradle.kts b/NeonimeProvider/build.gradle.kts index 657d7382..bfa7a96c 100644 --- a/NeonimeProvider/build.gradle.kts +++ b/NeonimeProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 7 +version = 8 cloudstream { diff --git a/NeonimeProvider/src/main/kotlin/com/hexated/NeonimeProvider.kt b/NeonimeProvider/src/main/kotlin/com/hexated/NeonimeProvider.kt index bd7059d5..f6e2d83c 100644 --- a/NeonimeProvider/src/main/kotlin/com/hexated/NeonimeProvider.kt +++ b/NeonimeProvider/src/main/kotlin/com/hexated/NeonimeProvider.kt @@ -1,6 +1,8 @@ package com.hexated 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.utils.ExtractorLink import com.lagradost.cloudstream3.utils.loadExtractor @@ -8,7 +10,7 @@ import org.jsoup.nodes.Element import java.net.URI class NeonimeProvider : MainAPI() { - override var mainUrl = "https://neonime.fun" + override var mainUrl = "https://neonime.ink" private var baseUrl = mainUrl override var name = "Neonime" override val hasQuickSearch = false @@ -120,13 +122,17 @@ class NeonimeProvider : MainAPI() { val mPoster = document.selectFirst(".sbox > .imagen > .fix > img[itemprop = image]")?.attr("data-src") val mTrailer = document.selectFirst("div.youtube_id iframe")?.attr("data-wpfc-original-src")?.substringAfterLast("html#")?.let{ "https://www.youtube.com/embed/$it"} val year = document.selectFirst("a[href*=release-year]")!!.text().toIntOrNull() + val tracker = APIHolder.getTracker(listOf(mTitle),TrackerType.getTypes(TvType.Movie),year,true) return newMovieLoadResponse(name = mTitle, url = url, type = TvType.Movie, dataUrl = url) { - posterUrl = mPoster + posterUrl = tracker?.image ?: mPoster + backgroundPosterUrl = tracker?.cover this.year = year plot = document.select("div[itemprop = description]").text().trim() rating = document.select("span[itemprop = ratingValue]").text().toIntOrNull() tags = document.select("p.meta_dd > a").map { it.text() } addTrailer(mTrailer) + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } else { @@ -138,18 +144,21 @@ class NeonimeProvider : MainAPI() { val link = fixUrl(it.selectFirst(".episodiotitle > a")!!.attr("href")) val name = it.selectFirst(".episodiotitle > a")?.ownText().toString() val episode = Regex("(\\d+[.,]?\\d*)").find(name)?.groupValues?.getOrNull(0)?.toIntOrNull() - Episode(link, name, episode = episode) + Episode(link, episode = episode) }.reversed() - + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(TvType.Anime),year,true) return newAnimeLoadResponse(title, url, TvType.Anime) { engName = title - posterUrl = poster + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = getStatus(document.select("div.metadatac > span").last()!!.text().trim()) plot = document.select("div[itemprop = description] > p").text().trim() tags = document.select("#info a[href*=\"-genre/\"]").map { it.text() } addTrailer(trailer) + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } } diff --git a/Nimegami/build.gradle.kts b/Nimegami/build.gradle.kts index afc730a5..a1e4ca98 100644 --- a/Nimegami/build.gradle.kts +++ b/Nimegami/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 4 +version = 5 cloudstream { diff --git a/Nimegami/src/main/kotlin/com/hexated/Nimegami.kt b/Nimegami/src/main/kotlin/com/hexated/Nimegami.kt index 3143bc15..5fffdd9d 100644 --- a/Nimegami/src/main/kotlin/com/hexated/Nimegami.kt +++ b/Nimegami/src/main/kotlin/com/hexated/Nimegami.kt @@ -2,6 +2,8 @@ package com.hexated import com.fasterxml.jackson.annotation.JsonProperty 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.utils.* import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson @@ -96,15 +98,15 @@ class Nimegami : MainAPI() { val year = table.getContent("Musim / Rilis").text().filter { it.isDigit() }.toIntOrNull() val status = getStatus(document.selectFirst("h1[itemprop=headline]")?.text()) - val type = table.getContent("Type").text() + val type = getType(table.getContent("Type").text()) val description = document.select("div#Sinopsis p").text().trim() val trailer = document.selectFirst("div#Trailer iframe")?.attr("src") val episodes = document.select("div.list_eps_stream li") .mapNotNull { - val name = it.text() + val episode = Regex("Episode\\s?(\\d+)").find(it.text())?.groupValues?.getOrNull(0)?.toIntOrNull() val link = it.attr("data") - Episode(link, name) + Episode(link, episode = episode) } val recommendations = document.select("div#randomList > a").mapNotNull { @@ -118,10 +120,12 @@ class Nimegami : MainAPI() { } } - return newAnimeLoadResponse(title, url, getType(type)) { + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { engName = title - posterUrl = poster - backgroundPosterUrl = bgPoster + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover ?: bgPoster this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = status @@ -129,6 +133,8 @@ class Nimegami : MainAPI() { this.tags = tags this.recommendations = recommendations addTrailer(trailer) + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } diff --git a/NontonAnimeIDProvider/build.gradle.kts b/NontonAnimeIDProvider/build.gradle.kts index cff263d4..14a56948 100644 --- a/NontonAnimeIDProvider/build.gradle.kts +++ b/NontonAnimeIDProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 16 +version = 17 cloudstream { diff --git a/NontonAnimeIDProvider/src/main/kotlin/com/hexated/NontonAnimeIDProvider.kt b/NontonAnimeIDProvider/src/main/kotlin/com/hexated/NontonAnimeIDProvider.kt index 2912e7a2..6f068fba 100644 --- a/NontonAnimeIDProvider/src/main/kotlin/com/hexated/NontonAnimeIDProvider.kt +++ b/NontonAnimeIDProvider/src/main/kotlin/com/hexated/NontonAnimeIDProvider.kt @@ -2,6 +2,8 @@ package com.hexated import com.fasterxml.jackson.annotation.JsonProperty 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.extractors.Hxfile import com.lagradost.cloudstream3.utils.ExtractorLink @@ -11,7 +13,7 @@ import org.jsoup.nodes.Element import java.net.URI class NontonAnimeIDProvider : MainAPI() { - override var mainUrl = "https://nontonanimeid.lol" + override var mainUrl = "https://nontonanimeid.top" override var name = "NontonAnimeID" override val hasQuickSearch = false override val hasMainPage = true @@ -130,7 +132,7 @@ class NontonAnimeIDProvider : MainAPI() { val status = getStatus( document.select("span.statusseries").text().trim() ) - val type = document.select("span.typeseries").text().trim().lowercase() + val type = getType(document.select("span.typeseries").text().trim().lowercase()) val rating = document.select("span.nilaiseries").text().trim().toIntOrNull() val description = document.select(".entry-content.seriesdesc > p").text().trim() val trailer = document.selectFirst("a.trailerbutton")?.attr("href") @@ -167,21 +169,22 @@ class NontonAnimeIDProvider : MainAPI() { }.reversed() } - val recommendations = document.select(".result > li").mapNotNull { val epHref = it.selectFirst("a")!!.attr("href") val epTitle = it.selectFirst("h3")!!.text() val epPoster = it.select(".top > img").attr("data-src") - newAnimeSearchResponse(epTitle, epHref, TvType.Anime) { this.posterUrl = epPoster addDubStatus(dubExist = false, subExist = true) } } - return newAnimeLoadResponse(title, url, getType(type)) { + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { engName = title - posterUrl = poster + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = status @@ -190,6 +193,8 @@ class NontonAnimeIDProvider : MainAPI() { addTrailer(trailer) this.tags = tags this.recommendations = recommendations + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } diff --git a/OploverzProvider/build.gradle.kts b/OploverzProvider/build.gradle.kts index 3b5d9597..e2ebbfc0 100644 --- a/OploverzProvider/build.gradle.kts +++ b/OploverzProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 23 +version = 24 cloudstream { diff --git a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt index 92547017..8ed03196 100644 --- a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt +++ b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProvider.kt @@ -1,7 +1,8 @@ package com.hexated import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.extractors.Filesim +import com.lagradost.cloudstream3.LoadResponse.Companion.addAniListId +import com.lagradost.cloudstream3.LoadResponse.Companion.addMalId import com.lagradost.cloudstream3.utils.* import org.jsoup.nodes.Element @@ -113,18 +114,21 @@ class OploverzProvider : MainAPI() { val title = document.selectFirst("h1.entry-title")?.text() ?.replace("Subtitle Indonesia", "")?.trim() ?: "" - val type = document.selectFirst("div.alternati span.type")?.text() ?: "" - + val type = getType(document.selectFirst("div.alternati span.type")?.text() ?: "") + val year = document.selectFirst("div.alternati a")?.text()?.filter { it.isDigit() }?.toIntOrNull() val episodes = document.select("div.lstepsiode.listeps ul li").mapNotNull { val header = it.selectFirst("a") ?: return@mapNotNull null val episode = header.text().trim().toIntOrNull() val link = fixUrl(header.attr("href")) - Episode(link, header.text(), episode = episode) + Episode(link, episode = episode) }.reversed() - return newAnimeLoadResponse(title, url, getType(type)) { - posterUrl = document.selectFirst("div.thumb > img")?.attr("src") - this.year = document.selectFirst("div.alternati a")?.text()?.filter { it.isDigit() }?.toIntOrNull() + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { + posterUrl = tracker?.image ?: document.selectFirst("div.thumb > img")?.attr("src") + backgroundPosterUrl = tracker?.cover + this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = getStatus( @@ -133,6 +137,8 @@ class OploverzProvider : MainAPI() { plot = document.selectFirst("div.entry-content > p")?.text()?.trim() this.tags = document.select("div.genre-info a").map { it.text() } + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } diff --git a/OtakudesuProvider/build.gradle.kts b/OtakudesuProvider/build.gradle.kts index 39e00b68..fd37451e 100644 --- a/OtakudesuProvider/build.gradle.kts +++ b/OtakudesuProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 14 +version = 15 cloudstream { diff --git a/OtakudesuProvider/src/main/kotlin/com/hexated/OtakudesuProvider.kt b/OtakudesuProvider/src/main/kotlin/com/hexated/OtakudesuProvider.kt index 0a4b0dd3..9632d72e 100644 --- a/OtakudesuProvider/src/main/kotlin/com/hexated/OtakudesuProvider.kt +++ b/OtakudesuProvider/src/main/kotlin/com/hexated/OtakudesuProvider.kt @@ -2,6 +2,8 @@ package com.hexated import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.LoadResponse.Companion.addAniListId +import com.lagradost.cloudstream3.LoadResponse.Companion.addMalId import com.lagradost.cloudstream3.extractors.JWPlayer import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.ExtractorLink @@ -94,8 +96,8 @@ class OtakudesuProvider : MainAPI() { ?.replace(":", "")?.trim().toString() val poster = document.selectFirst("div.fotoanime > img")?.attr("src") val tags = document.select("div.infozingle > p:nth-child(11) > span > a").map { it.text() } - val type = document.selectFirst("div.infozingle > p:nth-child(5) > span")?.ownText() - ?.replace(":", "")?.trim() ?: "tv" + val type = getType(document.selectFirst("div.infozingle > p:nth-child(5) > span")?.ownText() + ?.replace(":", "")?.trim() ?: "tv") val year = Regex("\\d, (\\d*)").find( document.select("div.infozingle > p:nth-child(9) > span").text() @@ -112,7 +114,7 @@ class OtakudesuProvider : MainAPI() { val episode = Regex("Episode\\s?(\\d+)").find(name)?.groupValues?.getOrNull(0) ?: it.selectFirst("a")?.text() val link = fixUrl(it.selectFirst("a")!!.attr("href")) - Episode(link, name, episode = episode?.toIntOrNull()) + Episode(link, episode = episode?.toIntOrNull()) }.reversed() val recommendations = @@ -125,15 +127,20 @@ class OtakudesuProvider : MainAPI() { } } - return newAnimeLoadResponse(title, url, getType(type)) { + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { engName = title - posterUrl = poster + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = status plot = description this.tags = tags this.recommendations = recommendations + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } } diff --git a/Samehadaku/build.gradle.kts b/Samehadaku/build.gradle.kts index 1c566566..f3101866 100644 --- a/Samehadaku/build.gradle.kts +++ b/Samehadaku/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 14 +version = 15 cloudstream { diff --git a/Samehadaku/src/main/kotlin/com/hexated/Samehadaku.kt b/Samehadaku/src/main/kotlin/com/hexated/Samehadaku.kt index a903d225..d97e5426 100644 --- a/Samehadaku/src/main/kotlin/com/hexated/Samehadaku.kt +++ b/Samehadaku/src/main/kotlin/com/hexated/Samehadaku.kt @@ -1,6 +1,8 @@ package com.hexated 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.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities @@ -8,7 +10,7 @@ import com.lagradost.cloudstream3.utils.loadExtractor import org.jsoup.nodes.Element class Samehadaku : MainAPI() { - override var mainUrl = "https://samehadaku.world" + override var mainUrl = "https://samehadaku.bond" override var name = "Samehadaku" override val hasMainPage = true override var lang = "id" @@ -111,8 +113,8 @@ class Samehadaku : MainAPI() { document.selectFirst("div.spe > span:contains(Status)")?.ownText() ?: return null ) val type = - document.selectFirst("div.spe > span:contains(Type)")?.ownText()?.trim()?.lowercase() - ?: "tv" + getType(document.selectFirst("div.spe > span:contains(Type)")?.ownText()?.trim()?.lowercase() + ?: "tv") val rating = document.selectFirst("span.ratingValue")?.text()?.trim()?.toRatingInt() val description = document.select("div.desc p").text().trim() val trailer = document.selectFirst("div.trailer-anime iframe")?.attr("src") @@ -129,9 +131,12 @@ class Samehadaku : MainAPI() { it.toSearchResult() } - return newAnimeLoadResponse(title, url, getType(type)) { + val tracker = APIHolder.getTracker(listOf(title),TrackerType.getTypes(type),year,true) + + return newAnimeLoadResponse(title, url, type) { engName = title - posterUrl = poster + posterUrl = tracker?.image ?: poster + backgroundPosterUrl = tracker?.cover this.year = year addEpisodes(DubStatus.Subbed, episodes) showStatus = status @@ -140,6 +145,8 @@ class Samehadaku : MainAPI() { addTrailer(trailer) this.tags = tags this.recommendations = recommendations + addMalId(tracker?.malId) + addAniListId(tracker?.aniId?.toIntOrNull()) } }