fix movizland and tuktukcinema (#1025)

This commit is contained in:
adly98
2022-11-15 12:48:25 +02:00
committed by GitHub
parent c1b128c7b3
commit 3fb3d4e2b1
4 changed files with 96 additions and 104 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'موفيزلاند'
pkgNameSuffix = 'ar.movizland'
extClass = '.Movizland'
extVersionCode = 9
extVersionCode = 10
libVersion = '13'
}

View File

@ -29,13 +29,13 @@ import org.jsoup.nodes.Element
import org.jsoup.select.Elements
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.lang.Exception
import kotlin.Exception
class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val name = "موفيزلاند"
override val baseUrl = "https://watch.movizland.cyou"
override val baseUrl = "https://movizland.icu"
override val lang = "ar"
@ -47,45 +47,24 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
}
// Popular
private fun titleEdit(title: String, details: Boolean = false): String {
return if (Regex("فيلم (.*?) مترجم").containsMatchIn(title))
Regex("فيلم (.*?) مترجم").find(title)!!.groupValues[1] + " (فيلم)" // افلام اجنبيه مترجمه
else if (Regex("فيلم (.*?) مدبلج").containsMatchIn(title))
Regex("فيلم (.*?) مدبلج").find(title)!!.groupValues[1] + " (مدبلج)(فيلم)" // افلام اجنبيه مدبلجه
else if (Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").containsMatchIn(title)) // افلام عربى
Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").find(title)!!.groupValues[1] + " (فيلم)"
else if (title.contains("مسلسل")) {
if (title.contains("الموسم") and details) {
val newTitle = Regex("مسلسل (.*?) الموسم (.*?) الحلقة ([0-9]+)").find(title)
"${newTitle!!.groupValues[1]} (م.${newTitle.groupValues[2]})(${newTitle.groupValues[3]}ح)"
} else if (title.contains("الحلقة")and details) {
val newTitle = Regex("مسلسل (.*?) الحلقة ([0-9]+)").find(title)
"${newTitle!!.groupValues[1]} (${newTitle.groupValues[2]}ح)"
} else Regex(if (title.contains("الموسم")) "مسلسل (.*?) الموسم" else "مسلسل (.*?) الحلقة").find(title)!!.groupValues[1] + " (مسلسل)"
} else if (title.contains("انمي"))
return Regex(if (title.contains("الموسم"))"انمي (.*?) الموسم" else "انمي (.*?) الحلقة").find(title)!!.groupValues[1] + " (انمى)"
else if (title.contains("برنامج"))
Regex(if (title.contains("الموسم"))"برنامج (.*?) الموسم" else "برنامج (.*?) الحلقة").find(title)!!.groupValues[1] + " (برنامج)"
else
title
}
// ============================= popular =============================
override fun popularAnimeSelector(): String = "div.BlockItem"
override fun popularAnimeSelector(): String = "div.BlockItem a"
override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/page/$page/")
override fun popularAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create()
anime.thumbnail_url = element.select("a div.BlockImageItem img").attr("data-src")
anime.setUrlWithoutDomain(element.select("a").attr("href"))
anime.title = titleEdit(element.select("a div.BlockImageItem img").attr("alt"))
anime.thumbnail_url = element.select("div.BlockImageItem img").attr("data-src")
anime.setUrlWithoutDomain(element.attr("href"))
anime.title = titleEdit(element.select("div.BlockImageItem img").attr("alt"), true)
return anime
}
override fun popularAnimeNextPageSelector(): String = "div.pagination li a.next"
// episodes
// ============================= episodes =============================
private fun seasonsNextPageSelector() = "div.BlockItem a"
override fun episodeListParse(response: Response): List<SEpisode> {
@ -97,13 +76,11 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
if (type == "assembly")
episode.name = title.replace("فيلم", "").trim()
else if (type == "movie")
episode.name = "watch"
else if (Regex("الموسم (.*)").containsMatchIn(title))
episode.name = Regex("الموسم (.*)").find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
else if (Regex("الحلقة (.*)").containsMatchIn(title))
episode.name = Regex("الحلقة (.*)").find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
else if (Regex("حلقة (.*)").containsMatchIn(title))
episode.name = Regex("حلقة (.*)").find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
episode.name = "مشاهدة"
else if (TitleRegex.SEASON.containsMatchIn(title))
episode.name = TitleRegex.SEASON.find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
else if (TitleRegex.EPISODE.containsMatchIn(title))
episode.name = TitleRegex.EPISODE.find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
else
episode.name = title
@ -187,7 +164,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun episodeFromElement(element: Element): SEpisode = throw Exception("not used")
// Video links
// ============================= video links =============================
override fun videoListParse(response: Response): List<Video> {
val videos = mutableListOf<Video>()
@ -217,24 +194,6 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun videoListSelector() = "body"
private fun videosFromElement(element: Element): List<Video> {
val videoList = mutableListOf<Video>()
val qualityMap = mapOf("l" to "240p", "n" to "360p", "h" to "480p", "x" to "720p", "o" to "1080p")
val data = element.data().substringAfter(", file: \"").substringBefore("\"}],")
val url = Regex("(.*)_,(.*),\\.urlset/master(.*)").find(data)
val sources = url!!.groupValues[2].split(",")
for (quality in sources) {
val src = url.groupValues[1] + "_" + quality + "/index-v1-a1" + url.groupValues[3]
val video = qualityMap[quality]?.let {
Video(src, it, src)
}
if (video != null) {
videoList.add(video)
}
}
return videoList
}
override fun List<Video>.sort(): List<Video> {
val quality = preferences.getString("preferred_quality", null)
if (quality != null) {
@ -257,7 +216,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun videoFromElement(element: Element) = throw Exception("not used")
// Search
// ============================= search =============================
override fun searchAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create()
@ -275,11 +234,8 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun searchAnimeSelector(): String = "div.BlocksInner div.BlocksUI div.BlockItem, div.BoxOfficeOtherSide div.BlocksUI div.BlockItem"
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
var newQuery = query
if (Regex("(.*)\\(").containsMatchIn(query))
newQuery = Regex("(.*)\\(").find(query)!!.groupValues[1].replace("(", "")
val url = if (query.isNotBlank()) {
"$baseUrl/page/$page/?s=$newQuery"
"$baseUrl/page/$page/?s=$query"
} else {
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
when (filter) {
@ -298,7 +254,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
return GET(url, headers)
}
// Anime Details
// ============================= anime details =============================
override fun animeDetailsParse(document: Document): SAnime {
val anime = SAnime.create()
@ -312,7 +268,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
return anime
}
// Latest
// ============================= latest =============================
override fun latestUpdatesNextPageSelector(): String = throw Exception("Not used")
@ -322,7 +278,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun latestUpdatesSelector(): String = throw Exception("Not used")
// Filters
// ============================= filters =============================
override fun getFilterList() = AnimeFilterList(
AnimeFilter.Header("الفلترات مش هتشتغل لو بتبحث او وهي فاضيه"),
@ -353,8 +309,44 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
CatUnit("مسلسلات تركى", "series/turkish-series"),
CatUnit("مسلسلات عربى", "series/arab-series")
)
// ============================= title edit =============================
// preferred quality settings
private fun titleEdit(title: String, details: Boolean = false): String {
val movie = "فيلم"
val finalTitle = if (title.contains("مسلسل")) {
if (TitleRegex.SERIES_SEASONS.containsMatchIn(title)) {
val newTitle = TitleRegex.SERIES_SEASONS.find(title)
newTitle!!.groupValues[1].trim() + if (details) " (م.${newTitle.groupValues[2].trim()})(${newTitle.groupValues[3].trim()}ح)" else ""
} else if (TitleRegex.SERIES_EPISODES.containsMatchIn(title)) {
val newTitle = TitleRegex.SERIES_EPISODES.find(title)
newTitle!!.groupValues[1].trim() + if (details) " (${newTitle.groupValues[2].trim()}ح)" else ""
} else title
} else if (title.contains("فيلم")) {
if (TitleRegex.ARABIC_MOVIE.containsMatchIn(title)) // افلام عربى
TitleRegex.ARABIC_MOVIE.find(title)!!.groupValues[1].trim() + if (details) " ($movie)" else ""
else if (TitleRegex.MOVIES.containsMatchIn(title))
TitleRegex.MOVIES.find(title)!!.groupValues[1].trim() + if (details) " (${TitleRegex.MOVIES.find(title)!!.groupValues[2].trim()})($movie)" else ""
else title
} else if (title.contains("انمي"))
Regex(if (title.contains("الموسم"))"انمي(.*)الموسم" else "انمي(.*)الحلقة").find(title)!!.groupValues[1] + if (details) " (انمى)" else ""
else if (title.contains("برنامج"))
Regex(if (title.contains("الموسم"))"برنامج(.*)الموسم" else "برنامج(.*)حلقة").find(title)!!.groupValues[1].removeSurrounding(" ال") + if (details) " (برنامج)" else ""
else
title
return finalTitle.trim()
}
object TitleRegex {
val MOVIES = "(?:[^a-zA-Z]+)(.*)(?:[0-9 ]+)([^a-zA-Z]+)".toRegex()
val ARABIC_MOVIE = "فيلم ([^a-zA-Z]+) ([0-9]+)".toRegex()
val SERIES_SEASONS = "مسلسل(.*)الموسم(.*)الحلقة([ 0-9]+)".toRegex()
val SERIES_EPISODES = "مسلسل(.*)الحلقة([ 0-9]+)".toRegex()
val SEASON = "الموسم(.*)".toRegex()
val EPISODE = "حلقة(.*)".toRegex()
}
// ============================ quality settings =======================
override fun setupPreferenceScreen(screen: PreferenceScreen) {
val videoQualityPref = ListPreference(screen.context).apply {

View File

@ -2,10 +2,10 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
ext {
extName = 'تك تك سينما'
extName = وك توك سينما'
pkgNameSuffix = 'ar.tuktukcinema'
extClass = '.Tuktukcinema'
extVersionCode = 1
extVersionCode = 2
libVersion = '13'
}

View File

@ -32,7 +32,7 @@ import java.lang.Exception
class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val name = "تك تك سينما"
override val name = "توك توك سينما"
override val baseUrl = "https://w.tuktukcinema.net"
@ -61,24 +61,26 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
private fun titleEdit(title: String, details: Boolean = false): String {
return if (Regex("فيلم (.*?) مترجم").containsMatchIn(title))
Regex("فيلم (.*?) مترجم").find(title)!!.groupValues[1] + " (فيلم)" // افلام اجنبيه مترجمه
else if (Regex("فيلم (.*?) مدبلج").containsMatchIn(title))
Regex("فيلم (.*?) مدبلج").find(title)!!.groupValues[1] + " (مدبلج)(فيلم)" // افلام اجنبيه مدبلجه
else if (Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").containsMatchIn(title)) // افلام عربى
Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").find(title)!!.groupValues[1] + " (فيلم)"
else if (title.contains("مسلسل")) {
if (title.contains("الموسم") and details) {
return if (title.contains("فيلم")) {
if (Regex("فيلم (.*?) مترجم").containsMatchIn(title))
Regex("فيلم (.*?) مترجم").find(title)!!.groupValues[1] + if (details) " (فيلم)" else "" // افلام اجنبيه مترجمه
else if (Regex("فيلم (.*?) مدبلج").containsMatchIn(title))
Regex("فيلم (.*?) مدبلج").find(title)!!.groupValues[1] + if (details) " (مدبلج)(فيلم)" else "" // افلام اجنبيه مدبلجه
else if (Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").containsMatchIn(title)) // افلام عربى
Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").find(title)!!.groupValues[1] + if (details) " (فيلم)" else ""
else title
} else if (title.contains("مسلسل")) {
if (title.contains("الموسم")) {
val newTitle = Regex("مسلسل (.*?) الموسم (.*?) الحلقة ([0-9]+)").find(title)
return "${newTitle!!.groupValues[1]} (م.${newTitle.groupValues[2]})(${newTitle.groupValues[3]}ح)"
} else if (title.contains("الحلقة") and details) {
newTitle!!.groupValues[1] + if (details) " (م.${newTitle.groupValues[2]})(${newTitle.groupValues[3]}ح)" else ""
} else if (title.contains("الحلقة")) {
val newTitle = Regex("مسلسل (.*?) الحلقة ([0-9]+)").find(title)
return "${newTitle!!.groupValues[1]} (${newTitle.groupValues[2]}ح)"
} else Regex(if (title.contains("الموسم")) "مسلسل (.*?) الموسم" else "مسلسل (.*?) الحلقة").find(title)!!.groupValues[1] + " (مسلسل)"
newTitle!!.groupValues[1] + if (details) " (${newTitle.groupValues[2]}ح)" else ""
} else Regex(if (title.contains("الموسم")) "مسلسل (.*?) الموسم" else "مسلسل (.*?) الحلقة").find(title)!!.groupValues[1] + if (details) " (مسلسل)" else ""
} else if (title.contains("انمي"))
return Regex(if (title.contains("الموسم"))"انمي (.*?) الموسم" else "انمي (.*?) الحلقة").find(title)!!.groupValues[1] + " (انمى)"
return Regex(if (title.contains("الموسم"))"انمي (.*?) الموسم" else "انمي (.*?) الحلقة").find(title)!!.groupValues[1] + if (details) " (انمى)" else ""
else if (title.contains("برنامج"))
Regex(if (title.contains("الموسم"))"برنامج (.*?) الموسم" else "برنامج (.*?) الحلقة").find(title)!!.groupValues[1] + " (برنامج)"
Regex(if (title.contains("الموسم"))"برنامج (.*?) الموسم" else "برنامج (.*?) الحلقة").find(title)!!.groupValues[1] + if (details) " (برنامج)" else ""
else
title
}
@ -118,7 +120,7 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
addEpisodeNew(
ep.attr("href"),
"series",
seasonNum + " " + ep.text()
seasonNum + " : الحلقة " + ep.select("em").text()
)
}
} else {
@ -132,7 +134,7 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
addEpisodeNew(
ep.attr("href"),
"series",
seasonNum + " " + ep.text()
seasonNum + " : الحلقة " + ep.select("em").text()
)
}
}
@ -203,7 +205,7 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun searchAnimeSelector(): String = "div.Block--Item"
override fun searchAnimeNextPageSelector(): String = "div.paginate ul.page-numbers li.next a"
override fun searchAnimeNextPageSelector(): String = "div.paginate ul.page-numbers li a.next"
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
val url = if (query.isNotBlank()) {
@ -229,8 +231,11 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun searchAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create()
anime.title = titleEdit(element.select("a").attr("title"), true).trim()
anime.thumbnail_url = element.select("img").attr("data-src")
anime.title = titleEdit(element.select("h3").text(), true).trim()
if (element.ownerDocument().location().contains("?s="))
anime.thumbnail_url = element.select("img").attr("src")
else
anime.thumbnail_url = element.select("img").attr("data-src")
anime.setUrlWithoutDomain(element.select("a").attr("href") + "watch/")
return anime
}
@ -239,12 +244,12 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun animeDetailsParse(document: Document): SAnime {
val anime = SAnime.create()
val info = client.newCall(GET(document.select(episodeListSelector()).attr("href").replace("watch/", ""))).execute().asJsoup()
anime.genre = info.select("div.catssection li a").joinToString(", ") { it.text() }
anime.title = titleEdit(info.select("h1.post-title").text()).trim()
anime.author = info.select("ul.RightTaxContent li:contains(دولة) a").text()
anime.description = info.select("div.story").text().trim()
anime.genre = document.select("div.catssection li a").joinToString(", ") { it.text() }
anime.title = titleEdit(document.select("h1.post-title").text()).trim()
anime.author = document.select("ul.RightTaxContent li:contains(دولة) a").text()
anime.description = document.select("div.story").text().trim()
anime.status = SAnime.COMPLETED
anime.thumbnail_url = document.select("div.left div.image img").attr("src")
return anime
}
@ -252,7 +257,7 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun latestUpdatesSelector(): String = "div.Block--Item"
override fun latestUpdatesNextPageSelector(): String = "div.paginate ul.page-numbers li.next a"
override fun latestUpdatesNextPageSelector(): String = "div.paginate ul.page-numbers li a.next"
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/recent/page/$page/")
@ -285,16 +290,11 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
CatUnit("افلام اسيويه", "category/movies-33/افلام-اسيوي/"),
CatUnit("افلام هنديه", "category/movies-33/افلام-هندى/"),
CatUnit("كل المسسلسلات", "category/series-9/"),
CatUnit("مسلسلات اجنبى", "sercat/مسلسلات-اجنبي/"),
CatUnit("جديد مسلسلات اجنبى", "category/series-9/مسلسلات-اجنبي/"),
CatUnit("مسلسلات انمى", "sercat/قائمة-الانمي/"),
CatUnit("جديد مسلسلات انمى", "category/anime-6/انمي-مترجم/"),
CatUnit("مسلسلات تركى", "sercat/مسلسلات-تركي/"),
CatUnit("جديد مسلسلات تركى", "category/series-9/مسلسلات-تركي/"),
CatUnit("مسلسلات اسيوى", "sercat/مسلسلات-أسيوي/"),
CatUnit("جديد مسلسلات اسيوى", "category/series-9/مسلسلات-أسيوي/"),
CatUnit("مسلسلات هندى", "sercat/مسلسلات-هندي/"),
CatUnit("جديد مسلسلات هندى", "category/series-9/مسلسلات-هندي/")
CatUnit("مسلسلات اجنبى", "category/series-9/مسلسلات-اجنبي/"),
CatUnit("مسلسلات انمى", "category/anime-6/انمي-مترجم/"),
CatUnit("مسلسلات تركى", "category/series-9/مسلسلات-تركي/"),
CatUnit("مسلسلات اسيوى", "category/series-9/مسلسلات-أسيوي/"),
CatUnit("مسلسلات هندى", "category/series-9/مسلسلات-هندي/")
)
// preferred quality settings