From 3794da7a6af0d9c05c57a09e0e1348b3ef8677ad Mon Sep 17 00:00:00 2001 From: Antony Date: Fri, 26 Aug 2022 21:28:53 +0200 Subject: [PATCH] EurostreamingProvider --- EurostreamingProvider/build.gradle.kts | 26 +++++ .../src/main/AndroidManifest.xml | 2 + .../com/lagradost/EurostreamingProvider.kt | 109 ++++++++++++++++++ .../lagradost/EurostreamingProviderPlugin.kt | 14 +++ 4 files changed, 151 insertions(+) create mode 100644 EurostreamingProvider/build.gradle.kts create mode 100644 EurostreamingProvider/src/main/AndroidManifest.xml create mode 100644 EurostreamingProvider/src/main/kotlin/com/lagradost/EurostreamingProvider.kt create mode 100644 EurostreamingProvider/src/main/kotlin/com/lagradost/EurostreamingProviderPlugin.kt diff --git a/EurostreamingProvider/build.gradle.kts b/EurostreamingProvider/build.gradle.kts new file mode 100644 index 0000000..fa19a12 --- /dev/null +++ b/EurostreamingProvider/build.gradle.kts @@ -0,0 +1,26 @@ +// use an integer for version numbers +version = 1 + + +cloudstream { + language = "it" + // All of these properties are optional, you can safely remove them + + // description = "Lorem Ipsum" + // authors = listOf("Cloudburst") + + /** + * Status int as the following: + * 0: Down + * 1: Ok + * 2: Slow + * 3: Beta only + * */ + status = 1 // will be 3 if unspecified + tvTypes = listOf( + "TvSeries" + ) + + + iconUrl = "https://www.google.com/s2/favicons?domain=eurostreaming.social&sz=%size%" +} \ No newline at end of file diff --git a/EurostreamingProvider/src/main/AndroidManifest.xml b/EurostreamingProvider/src/main/AndroidManifest.xml new file mode 100644 index 0000000..29aec9d --- /dev/null +++ b/EurostreamingProvider/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/EurostreamingProvider/src/main/kotlin/com/lagradost/EurostreamingProvider.kt b/EurostreamingProvider/src/main/kotlin/com/lagradost/EurostreamingProvider.kt new file mode 100644 index 0000000..f13bf3c --- /dev/null +++ b/EurostreamingProvider/src/main/kotlin/com/lagradost/EurostreamingProvider.kt @@ -0,0 +1,109 @@ +package com.lagradost + +import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.loadExtractor +import com.lagradost.cloudstream3.utils.AppUtils.parseJson +import com.lagradost.cloudstream3.utils.AppUtils.toJson + + +class EurostreamingProvider : MainAPI() { + override var lang = "it" + override var mainUrl = "https://eurostreaming.social" + override var name = "Eurostreaming" + override val hasMainPage = true + override val hasChromecastSupport = true + override val supportedTypes = setOf( + TvType.TvSeries + ) + + override val mainPage = mainPageOf( + Pair("$mainUrl/serie-tv-archive/page/", "Ultime serie Tv"), + Pair("$mainUrl/animazione/page/", "Ultime serie Animazione"), + + ) + + override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse { + val url = request.data + page + + val soup = app.get(url).document + val home = soup.select("div.post-thumb").map { + val title = it.selectFirst("img")!!.attr("alt") + val link = it.selectFirst("a")!!.attr("href") + val image = fixUrl(it.selectFirst("img")!!.attr("src")) + + MovieSearchResponse( + title, + link, + this.name, + TvType.Movie, + image + ) + } + return newHomePageResponse(request.name, home) + } + + override suspend fun search(query: String): List { + val doc = app.post( + "$mainUrl/index.php", data = mapOf( + "do" to "search", + "subaction" to "search", + "story" to query, + "sortby" to "news_read" + ) + ).document + return doc.select("div.post-thumb").map { + val title = it.selectFirst("img")!!.attr("alt") + val link = it.selectFirst("a")!!.attr("href") + val image = mainUrl + it.selectFirst("img")!!.attr("src") + + MovieSearchResponse( + title, + link, + this.name, + TvType.Movie, + image + ) + } + } + + override suspend fun load(url: String): LoadResponse { + val page = app.get(url) + val document = page.document + val title = document.selectFirst("h2")!!.text().replace("^([1-9+]]$","") + val style = document.selectFirst("div.entry-cover")!!.attr("style") + val poster = fixUrl(Regex("(/upload.+\\))").find(style)!!.value.dropLast(1)) + val episodeList = ArrayList() + document.select("div.tab-pane.fade").map { element -> + val season = element.attr("id").filter { it.isDigit() }.toInt() + element.select("li").map{episode -> + val data = episode.select("div.mirrors > a").map { it.attr("data-link") }.toJson() + val epTitle = episode.selectFirst("a")!!.attr("data-title") + episodeList.add( + Episode( + data, + epTitle, + season + ) + ) + } + } + return newTvSeriesLoadResponse(title, url, TvType.TvSeries, episodeList) { + posterUrl = poster + } + + } + + + override suspend fun loadLinks( + data: String, + isCasting: Boolean, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ): Boolean { + parseJson>(data).map { videoUrl -> + loadExtractor(videoUrl, data, subtitleCallback, callback) + } + return true + } +} \ No newline at end of file diff --git a/EurostreamingProvider/src/main/kotlin/com/lagradost/EurostreamingProviderPlugin.kt b/EurostreamingProvider/src/main/kotlin/com/lagradost/EurostreamingProviderPlugin.kt new file mode 100644 index 0000000..7a18c9b --- /dev/null +++ b/EurostreamingProvider/src/main/kotlin/com/lagradost/EurostreamingProviderPlugin.kt @@ -0,0 +1,14 @@ + +package com.lagradost + +import com.lagradost.cloudstream3.plugins.CloudstreamPlugin +import com.lagradost.cloudstream3.plugins.Plugin +import android.content.Context + +@CloudstreamPlugin +class EurostreamingProviderPlugin: Plugin() { + override fun load(context: Context) { + // All providers should be added in this manner. Please don't edit the providers list directly. + registerMainAPI(EurostreamingProvider()) + } +} \ No newline at end of file