fix for some arabic extensions (#528)
This commit is contained in:
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'Anime4up'
|
extName = 'Anime4up'
|
||||||
pkgNameSuffix = 'ar.anime4up'
|
pkgNameSuffix = 'ar.anime4up'
|
||||||
extClass = '.Anime4Up'
|
extClass = '.Anime4Up'
|
||||||
extVersionCode = 25
|
extVersionCode = 26
|
||||||
libVersion = '12'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ class Anime4Up : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override val name = "Anime4Up"
|
override val name = "Anime4Up"
|
||||||
|
|
||||||
override val baseUrl = "https://anime4up.vip"
|
override val baseUrl = "https://anime4up.art"
|
||||||
|
|
||||||
override val lang = "ar"
|
override val lang = "ar"
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ class Anime4Up : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun headersBuilder(): Headers.Builder {
|
override fun headersBuilder(): Headers.Builder {
|
||||||
return super.headersBuilder()
|
return super.headersBuilder()
|
||||||
.add("Referer", "https://anime4up.vip/") // https://s12.gemzawy.com https://moshahda.net
|
.add("Referer", "https://anime4up.art/") // https://s12.gemzawy.com https://moshahda.net
|
||||||
}
|
}
|
||||||
|
|
||||||
// Popular
|
// Popular
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'Animerco'
|
extName = 'Animerco'
|
||||||
pkgNameSuffix = 'ar.animerco'
|
pkgNameSuffix = 'ar.animerco'
|
||||||
extClass = '.Animerco'
|
extClass = '.Animerco'
|
||||||
extVersionCode = 4
|
extVersionCode = 5
|
||||||
libVersion = '12'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
// headers = Headers.headersOf("Referer", document.location())
|
// headers = Headers.headersOf("Referer", document.location())
|
||||||
)
|
)
|
||||||
).execute().asJsoup()
|
).execute().asJsoup()
|
||||||
val seasonsElements = seasonsHtml.select("span.se-t a")
|
val seasonsElements = seasonsHtml.select("div.seasontitle a")
|
||||||
seasonsElements.forEach {
|
seasonsElements.forEach {
|
||||||
val seasonEpList = parseEpisodesFromSeries(it)
|
val seasonEpList = parseEpisodesFromSeries(it)
|
||||||
episodeList.addAll(seasonEpList)
|
episodeList.addAll(seasonEpList)
|
||||||
@ -93,7 +93,7 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
} else {
|
} else {
|
||||||
val movieUrl = seriesLink
|
val movieUrl = seriesLink
|
||||||
val episode = SEpisode.create()
|
val episode = SEpisode.create()
|
||||||
episode.name = document.select("div.TPMvCn h1.Title").text()
|
episode.name = document.select("div.data h1").text()
|
||||||
episode.episode_number = 1F
|
episode.episode_number = 1F
|
||||||
episode.setUrlWithoutDomain(movieUrl)
|
episode.setUrlWithoutDomain(movieUrl)
|
||||||
episodeList.add(episode)
|
episodeList.add(episode)
|
||||||
@ -104,10 +104,10 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
// override fun episodeFromElement(element: Element): SEpisode = throw Exception("not used")
|
// override fun episodeFromElement(element: Element): SEpisode = throw Exception("not used")
|
||||||
|
|
||||||
private fun parseEpisodesFromSeries(element: Element): List<SEpisode> {
|
private fun parseEpisodesFromSeries(element: Element): List<SEpisode> {
|
||||||
val seasonId = element.attr("abs:href")
|
// val seasonId = element.attr("abs:href")
|
||||||
// val seasonName = element.text()
|
val seasonName = element.text()
|
||||||
// Log.i("seasonname", seasonName)
|
// Log.i("seasonname", seasonName)
|
||||||
val episodesUrl = seasonId
|
val episodesUrl = element.attr("abs:href")
|
||||||
val episodesHtml = client.newCall(
|
val episodesHtml = client.newCall(
|
||||||
GET(
|
GET(
|
||||||
episodesUrl,
|
episodesUrl,
|
||||||
@ -187,7 +187,8 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
||||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
||||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
||||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com")
|
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
||||||
|
embedUrl.contains("sbfast")
|
||||||
-> {
|
-> {
|
||||||
val headers = headers.newBuilder()
|
val headers = headers.newBuilder()
|
||||||
.set("Referer", embedUrl)
|
.set("Referer", embedUrl)
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'عرب سيد'
|
extName = 'عرب سيد'
|
||||||
pkgNameSuffix = 'ar.arabseed'
|
pkgNameSuffix = 'ar.arabseed'
|
||||||
extClass = '.ArabSeed'
|
extClass = '.ArabSeed'
|
||||||
extVersionCode = 2
|
extVersionCode = 3
|
||||||
libVersion = '12'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,8 +12,9 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.Headers
|
import okhttp3.FormBody
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
@ -28,7 +29,7 @@ class ArabSeed : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override val name = "عرب سيد"
|
override val name = "عرب سيد"
|
||||||
|
|
||||||
override val baseUrl = "https://eg1.arabseed.ink"
|
override val baseUrl = "https://m.arabseed.ink"
|
||||||
|
|
||||||
override val lang = "ar"
|
override val lang = "ar"
|
||||||
|
|
||||||
@ -49,6 +50,7 @@ class ArabSeed : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val anime = SAnime.create()
|
val anime = SAnime.create()
|
||||||
anime.setUrlWithoutDomain(element.attr("href"))
|
anime.setUrlWithoutDomain(element.attr("href"))
|
||||||
anime.title = element.select("div.BlockName > h4").text()
|
anime.title = element.select("div.BlockName > h4").text()
|
||||||
|
anime.thumbnail_url = element.select("div.Poster img").attr("data-src")
|
||||||
return anime
|
return anime
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,31 +63,73 @@ class ArabSeed : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val episode = SEpisode.create()
|
val episode = SEpisode.create()
|
||||||
episode.setUrlWithoutDomain(element.attr("href"))
|
episode.setUrlWithoutDomain(element.attr("href"))
|
||||||
episode.name = element.ownerDocument().select("div.InfoPartOne a h1.Title").text().replace(" مترجم", "").replace("فيلم ", "")
|
episode.name = element.ownerDocument().select("div.InfoPartOne a h1.Title").text().replace(" مترجم", "").replace("فيلم ", "")
|
||||||
|
|
||||||
return episode
|
return episode
|
||||||
}
|
}
|
||||||
|
|
||||||
// Video Links
|
// Video urls
|
||||||
|
|
||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
val srcVid = preferences.getString("preferred_quality", "سيرفر عرب سيد - 720p")!!
|
return videosFromElement(document)
|
||||||
val iframe = document.select("li:contains($srcVid) noscript iframe").attr("src")
|
|
||||||
val referer = response.request.url.encodedPath
|
|
||||||
val newHeaders = Headers.headersOf("referer", baseUrl + referer)
|
|
||||||
val iframeResponse = client.newCall(GET(iframe, newHeaders))
|
|
||||||
.execute().asJsoup()
|
|
||||||
return iframeResponse.select(videoListSelector()).map { videoFromElement(it) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun videoListSelector() = "source" // , video"
|
override fun videoListSelector() = "div.containerServers ul li" // ul#playeroptionsul
|
||||||
|
|
||||||
override fun videoFromElement(element: Element): Video {
|
private fun videosFromElement(document: Document): List<Video> {
|
||||||
return Video(element.attr("src").replace("https", "http"), "Default: If you want to change the quality go to extension settings", element.attr("src").replace("https", "http"), null)
|
val videoList = mutableListOf<Video>()
|
||||||
|
val elements = document.select(videoListSelector())
|
||||||
|
for (element in elements) {
|
||||||
|
val location = element.ownerDocument().location()
|
||||||
|
val videoHeaders = headers.newBuilder()
|
||||||
|
.set("Referer", "https://m.arabseed.ink/")
|
||||||
|
.set("X-Requested-With", "XMLHttpRequest")
|
||||||
|
.build()
|
||||||
|
// Headers.headersOf("Referer", location)
|
||||||
|
val dataPost = element.attr("data-post")
|
||||||
|
val dataServer = element.attr("data-server")
|
||||||
|
val dataQu = element.attr("data-qu")
|
||||||
|
val pageData = FormBody.Builder()
|
||||||
|
.add("post_id", dataPost)
|
||||||
|
.add("server", dataServer)
|
||||||
|
.add("qu", dataQu)
|
||||||
|
.build()
|
||||||
|
val ajax1 = "https://m.arabseed.ink/wp-content/themes/Elshaikh2021/Ajaxat/Single/Server.php"
|
||||||
|
val ajax = client.newCall(POST(ajax1, videoHeaders, pageData)).execute().asJsoup()
|
||||||
|
val embedUrl = ajax.select("iframe").attr("src")
|
||||||
|
when {
|
||||||
|
embedUrl.contains("seeeed") -> {
|
||||||
|
val iframeResponse = client.newCall(GET(embedUrl)).execute().asJsoup()
|
||||||
|
val videoUrl = iframeResponse.select("source").attr("src")
|
||||||
|
val video = Video(embedUrl, dataQu + "p", videoUrl.replace("https", "http"), null)
|
||||||
|
videoList.add(video)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return videoList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun videoFromElement(element: Element) = throw Exception("not used")
|
||||||
|
|
||||||
override fun videoUrlParse(document: Document) = throw Exception("not used")
|
override fun videoUrlParse(document: Document) = throw Exception("not used")
|
||||||
|
|
||||||
|
override fun List<Video>.sort(): List<Video> {
|
||||||
|
val quality = preferences.getString("preferred_quality", null)
|
||||||
|
if (quality != null) {
|
||||||
|
val newList = mutableListOf<Video>()
|
||||||
|
var preferred = 0
|
||||||
|
for (video in this) {
|
||||||
|
if (video.quality.contains(quality)) {
|
||||||
|
newList.add(preferred, video)
|
||||||
|
preferred++
|
||||||
|
} else {
|
||||||
|
newList.add(video)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newList
|
||||||
|
}
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
// Search
|
// Search
|
||||||
|
|
||||||
override fun searchAnimeFromElement(element: Element): SAnime {
|
override fun searchAnimeFromElement(element: Element): SAnime {
|
||||||
@ -124,7 +168,7 @@ class ArabSeed : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun animeDetailsParse(document: Document): SAnime {
|
override fun animeDetailsParse(document: Document): SAnime {
|
||||||
val anime = SAnime.create()
|
val anime = SAnime.create()
|
||||||
anime.thumbnail_url = document.select("div.Poster img").first().attr("src")
|
anime.thumbnail_url = document.select("div.Poster img").first().attr("data-src")
|
||||||
anime.title = document.select("div.InfoPartOne a h1.Title").text().replace(" مترجم", "").replace("فيلم ", "")
|
anime.title = document.select("div.InfoPartOne a h1.Title").text().replace(" مترجم", "").replace("فيلم ", "")
|
||||||
anime.genre = document.select("div.MetaTermsInfo > li:contains(النوع) > a").joinToString(", ") { it.text() }
|
anime.genre = document.select("div.MetaTermsInfo > li:contains(النوع) > a").joinToString(", ") { it.text() }
|
||||||
anime.description = document.select("div.StoryLine p").text()
|
anime.description = document.select("div.StoryLine p").text()
|
||||||
@ -176,7 +220,7 @@ class ArabSeed : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
key = "preferred_quality"
|
key = "preferred_quality"
|
||||||
title = "Preferred Quality"
|
title = "Preferred Quality"
|
||||||
entries = arrayOf("1080p", "720p", "480p", "360p")
|
entries = arrayOf("1080p", "720p", "480p", "360p")
|
||||||
entryValues = arrayOf("سيرفر عرب سيد - 1080p", "سيرفر عرب سيد - 720p", "سيرفر عرب سيد - 480p", "سيرفر عرب سيد - 360p")
|
entryValues = arrayOf("1080", "720", "480", "360")
|
||||||
setDefaultValue("سيرفر عرب سيد - 720p")
|
setDefaultValue("سيرفر عرب سيد - 720p")
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user