From 6335b4172d5511585d04946733812970fb5666ec Mon Sep 17 00:00:00 2001 From: Shivam <69040506+brahmkshatriya@users.noreply.github.com> Date: Wed, 20 Jul 2022 02:18:48 +0530 Subject: [PATCH 1/4] Add Kim Cartoon (#1311) * * change url * Add Kim Cartoon * Remove prints & format a bit * Remove jsoup parse --- .../com/lagradost/cloudstream3/MainAPI.kt | 2 + .../animeproviders/KimCartoonProvider.kt | 153 ++++++++++++++++++ .../cloudstream3/extractors/XStreamCdn.kt | 5 + .../cloudstream3/utils/ExtractorApi.kt | 1 + 4 files changed, 161 insertions(+) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/animeproviders/KimCartoonProvider.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index e29e99d8..fc68d53c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -145,6 +145,8 @@ object APIHolder { NginxProvider(), OlgplyProvider(), AniflixProvider(), + + KimCartoonProvider() ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/animeproviders/KimCartoonProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/KimCartoonProvider.kt new file mode 100644 index 00000000..7dcca2da --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/KimCartoonProvider.kt @@ -0,0 +1,153 @@ +package com.lagradost.cloudstream3.animeproviders + +import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.loadExtractor +import org.jsoup.Jsoup + +class KimCartoonProvider : MainAPI() { + + override var mainUrl = "https://kimcartoon.li" + override var name = "Kim Cartoon" + override val hasQuickSearch = true + override val hasMainPage = true + + override val supportedTypes = setOf(TvType.Cartoon) + + private fun fixUrl(url: String): String { + return if (url.startsWith("/")) mainUrl + url else url + } + + override suspend fun getMainPage(): HomePageResponse { + val doc = app.get(mainUrl).document.select("#container") + val response = mutableListOf( + HomePageList( + "Latest Update", + doc.select("div.bigBarContainer div.items > div > a").map { + AnimeSearchResponse( + it.select(".item-title").let { div -> + //Because it doesn't contain Title separately + div.text().replace(div.select("span").text(), "") + }, + mainUrl + it.attr("href"), + mainUrl, + TvType.Cartoon, + fixUrl(it.select("img").let { img -> + img.attr("src").let { src -> + src.ifEmpty { img.attr("srctemp") } + } + }) + ) + } + ) + ) + val list = mapOf( + "Top Day" to "tab-top-day", + "Top Week" to "tab-top-week", + "Top Month" to "tab-top-month", + "New Cartoons" to "tab-newest-series" + ) + response.addAll(list.map { item -> + HomePageList( + item.key, + doc.select("#${item.value} > div").map { + AnimeSearchResponse( + it.select("span.title").text(), + mainUrl + it.select("a")[0].attr("href"), + mainUrl, + TvType.Cartoon, + fixUrl(it.select("a > img").attr("src")) + ) + } + ) + }) + return HomePageResponse(response) + } + + override suspend fun search(query: String): List { + return app.post( + "$mainUrl/Search/Cartoon", + data = mapOf("keyword" to query) + ).document + .select("#leftside > div.bigBarContainer div.list-cartoon > div.item > a") + .map { + AnimeSearchResponse( + it.select("span").text(), + mainUrl + it.attr("href"), + mainUrl, + TvType.Cartoon, + fixUrl(it.select("img").attr("src")) + ) + } + } + + override suspend fun quickSearch(query: String): List { + return app.post( + "$mainUrl/Ajax/SearchSuggest", + data = mapOf("keyword" to query) + ).document.select("a").map { + AnimeSearchResponse( + it.text(), + it.attr("href"), + mainUrl, + TvType.Cartoon, + ) + } + } + + + private fun getStatus(from: String?): ShowStatus? { + return when { + from?.contains("Completed") == true -> ShowStatus.Completed + from?.contains("Ongoing") == true -> ShowStatus.Ongoing + else -> null + } + } + + override suspend fun load(url: String): LoadResponse { + val doc = app.get(url).document.select("#leftside") + val info = doc.select("div.barContent") + val name = info.select("a.bigChar").text() + val eps = doc.select("table.listing > tbody > tr a").reversed().map { + Episode( + fixUrl(it.attr("href")), + it.text().replace(name, "").trim() + ) + } + val infoText = info.text() + fun getData(after: String, before: String): String? { + return if (infoText.contains(after)) + infoText + .substringAfter("$after:") + .substringBefore(before) + .trim() + else null + } + + return newTvSeriesLoadResponse(name, url, TvType.Cartoon, eps) { + posterUrl = fixUrl(info.select("div > img").attr("src")) + showStatus = getStatus(getData("Status", "Views")) + plot = getData("Summary", "Tags:") + tags = getData("Genres", "Date aired")?.split(",") + } + } + + override suspend fun loadLinks( + data: String, + isCasting: Boolean, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ): Boolean { + val servers = + app.get(data).document.select("#selectServer > option").map { fixUrl(it.attr("value")) } + servers.apmap { + app.get(it).document.select("#my_video_1").attr("src").let { iframe -> + if (iframe.isNotEmpty()) { + loadExtractor(iframe, "$mainUrl/", callback) + } + //There are other servers, but they require some work to do + } + } + return true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt index 7b7e63a9..7338f570 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt @@ -18,6 +18,11 @@ class DBfilm: XStreamCdn() { override val mainUrl: String = "https://dbfilm.bar" } +class Luxubu : XStreamCdn(){ + override val name: String = "FE" + override val mainUrl: String = "https://www.luxubu.review" +} + class FEmbed: XStreamCdn() { override val name: String = "FEmbed" override val mainUrl: String = "https://www.fembed.com" diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index d60b157e..af659771 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -222,6 +222,7 @@ val extractorApis: Array = arrayOf( FeHD(), Fplayer(), DBfilm(), + Luxubu(), LayarKaca(), // WatchSB(), 'cause StreamSB.kt works Uqload(), From f66ed45192289ccbb642b9dae2abdcde15c11c0a Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 19 Jul 2022 20:49:03 +0000 Subject: [PATCH 2/4] chore(docs): update list of sites --- docs/providers.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/providers.json b/docs/providers.json index 497747f6..18be9eba 100644 --- a/docs/providers.json +++ b/docs/providers.json @@ -272,6 +272,12 @@ "status": 1, "url": "https://kdramahood.com" }, + "KimCartoonProvider": { + "language": "en", + "name": "Kim Cartoon", + "status": 1, + "url": "https://kimcartoon.li" + }, "KuramanimeProvider": { "language": "id", "name": "Kuramanime", From 53a6a9b1a4eb51ec4bf29dbf759461b4b7ca2a2a Mon Sep 17 00:00:00 2001 From: Saksham Shekher <95137948+OshekharO@users.noreply.github.com> Date: Wed, 20 Jul 2022 10:33:48 +0530 Subject: [PATCH 3/4] Update VidEmbedProvider.kt (#1314) --- .../lagradost/cloudstream3/movieproviders/VidEmbedProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/VidEmbedProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/VidEmbedProvider.kt index d72a4d9f..49efb04b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/VidEmbedProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/VidEmbedProvider.kt @@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.TvType */ class VidEmbedProvider : VidstreamProviderTemplate() { // mainUrl is good to have as a holder for the url to make future changes easier. - override var mainUrl = "https://vidembed.cc" + override var mainUrl = "https://membed.net" // name is for how the provider will be named which is visible in the UI, no real rules for this. override var name = "VidEmbed" From 68e373e3fb067e4be5c439be4f3a92f4893091b9 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Wed, 20 Jul 2022 05:04:01 +0000 Subject: [PATCH 4/4] chore(docs): update list of sites --- docs/providers.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/providers.json b/docs/providers.json index 18be9eba..589a3508 100644 --- a/docs/providers.json +++ b/docs/providers.json @@ -532,7 +532,7 @@ "language": "en", "name": "VidEmbed", "status": 1, - "url": "https://vidembed.cc" + "url": "https://membed.net" }, "VidSrcProvider": { "language": "en",