From 92bf935d3662fa0acdf717560c610da589859287 Mon Sep 17 00:00:00 2001 From: odnar-dev <73726132+odnar-dev@users.noreply.github.com> Date: Thu, 17 Mar 2022 15:39:26 +0000 Subject: [PATCH] Update EgyBestProvider.kt (#803) * Update EgyBestProvider.kt scrape egybest home page and show the same categories as the site * add movies recommendations to EgyBest * update arabic strings * add Cast to EgyBest --- .../movieproviders/EgyBestProvider.kt | 46 +++++++++++++------ app/src/main/res/values-ar/strings.xml | 25 +++++----- 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/EgyBestProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/EgyBestProvider.kt index 22114816..f1c19d32 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/EgyBestProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/EgyBestProvider.kt @@ -21,11 +21,11 @@ class EgyBestProvider : MainAPI() { private fun Element.toSearchResponse(): SearchResponse? { val url = this.attr("href") ?: return null val posterUrl = select("img")?.attr("src") - val title = select("span.title").text() - .replace("\\(.*\\)".toRegex(), "") - val year = select("span.title").text() - .replace(".*\\(|\\)".toRegex(), "") - val tvType = if (url.contains("/movie/")) TvType.Movie else TvType.TvSeries + var title = select("span.title").text() + val year = title.getYearFromTitle() + val isMovie = Regex(".*/movie/.*|.*/masrahiya/.*").matches(url) + val tvType = if (isMovie) TvType.Movie else TvType.TvSeries + title = if (year !== null) title else title.split(" (")[0].trim() // If you need to differentiate use the url. return MovieSearchResponse( title, @@ -33,24 +33,21 @@ class EgyBestProvider : MainAPI() { this@EgyBestProvider.name, tvType, posterUrl, - year.toIntOrNull(), + year, null, ) } override suspend fun getMainPage(): HomePageResponse { // url, title - val pagesUrl = listOf( - Pair("$mainUrl/movies/?page="+(0..25).random(), "Movies"), - Pair("$mainUrl/tv/?page="+(0..25).random(), "Series"), - ) - val pages = pagesUrl.apmap { (url, name) -> - val doc = app.get(url).document - val list = doc.select("div.movies a").not("a.auto.load.btn.b").mapNotNull { element -> + val doc = app.get(mainUrl).document + val pages = doc.select("#mainLoad div.mbox").apmap { + val name = it.select(".bdb.pda > strong").text() + val list = it.select(".movie").mapNotNull { element -> element.toSearchResponse() } HomePageList(name, list) - }.sortedBy { it.name } + } return HomePageResponse(pages) } @@ -66,9 +63,13 @@ class EgyBestProvider : MainAPI() { return result.distinct().sortedBy { it.name } } + private fun String.getYearFromTitle(): Int? { + return Regex("""\(\d{4}\)""").find(this)?.groupValues?.firstOrNull()?.toIntOrNull() + } + override suspend fun load(url: String): LoadResponse { val doc = app.get(url).document - val isMovie = url.contains("/movie/") + val isMovie = Regex(".*/movie/.*|.*/masrahiya/.*").matches(url) val posterUrl = doc.select("div.movie_img a img")?.attr("src") val year = doc.select("div.movie_title h1 a")?.text()?.toIntOrNull() val title = doc.select("div.movie_title h1 span[itemprop=\"name\"]").text() @@ -81,7 +82,19 @@ class EgyBestProvider : MainAPI() { it.text().contains("النوع") }?.select("a")?.map { it.text() } + val actors = doc.select("div.cast_list .cast_item")?.mapNotNull { + val name = it.selectFirst("div > a > img")?.attr("alt") ?: return@mapNotNull null + val image = it.selectFirst("div > a > img")?.attr("src") ?: return@mapNotNull null + val roleString = it.selectFirst("div > span").text() + val mainActor = Actor(name, image) + ActorData(actor = mainActor, roleString = roleString) + } + return if (isMovie) { + val recommendations = doc.select(".movies_small .movie")?.mapNotNull { element -> + element.toSearchResponse() + } + newMovieLoadResponse( title, url, @@ -90,8 +103,10 @@ class EgyBestProvider : MainAPI() { ) { this.posterUrl = posterUrl this.year = year + this.recommendations = recommendations this.plot = synopsis this.tags = tags + this.actors = actors } } else { val episodes = ArrayList() @@ -119,6 +134,7 @@ class EgyBestProvider : MainAPI() { this.tags = tags this.year = year this.plot = synopsis + this.actors = actors } } } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index b50a31e5..ab8564cf 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -13,6 +13,7 @@ سرعة (%.2fx) Rated: %.1f !تم إيجاد تحديث جديد\n%s -> %s + %d دقيقة CloudStream الصفحة الرئيسية @@ -23,7 +24,7 @@ …بحث لايوجد بيانات المزيد من الخيارات - الحلقة القادمة + الحلقة التالية النواع شارك فتح في الويب @@ -38,7 +39,7 @@ لا شيء إعادة المشاهدة - تشغيل الفيلم + مشاهدة الفيلم تشغيل التورنت المصادر الترجمة @@ -59,8 +60,8 @@ خطأ في تحميل الرابط التخزين الداخلي - دبلجة - مترجمة + مدبلج + مترجم حذف ملف تشغيل الملف @@ -112,7 +113,7 @@ لم يتم العثور على وصف لم يتم العثور على وصف - صورة داخل صورة + نافذة منبثقة يستمر في التشغيل في مشغل مصغر فوق التطبيقات الأخرى زر تغيير حجم المشغل قم بإزالة الحدود السوداء @@ -162,8 +163,8 @@ لا موسم حلقة حلقات - س - ه + S + E لم يتم العثور على أي حلقات حذف ملف @@ -173,6 +174,7 @@ -30 +30 This will permanently delete %s\nAre you sure? + %dد\nمتبقية جاري التنفيذ اكتمل @@ -246,12 +248,12 @@ عام لغات الموفر - شكل التطبيق + واجهة التطبيق النوع المفضل من المشاهدة أوتوماتيك - مناسب لتصميم التلفاز - مناسبة لتصميم الهاتف + واجهة خاصة بتلفاز + واجهة خاصة بهاتف اللون الأساسي مظهر التطبيق @@ -276,11 +278,12 @@ نصٌّ حكيمٌ لهُ سِرٌّ قاطِعٌ وَذُو شَأنٍ عَظيمٍ مكتوبٌ على ثوبٍ أخضرَ ومُغلفٌ بجلدٍ أزرق موصى به - تحميل من ملف + إختيار ملف الملف الذي تم تنزيله رئيسي مساعد خلفية ترجمة كروم كاست إعدادات ترجمة الكروم كاست + المصادر