diff --git a/src/es/pelisplushd/build.gradle b/src/es/pelisplushd/build.gradle index f7630b20b..3de485c8a 100644 --- a/src/es/pelisplushd/build.gradle +++ b/src/es/pelisplushd/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Pelisplushd' pkgNameSuffix = 'es.pelisplushd' extClass = '.PelisplushdFactory' - extVersionCode = 38 + extVersionCode = 39 libVersion = '13' } @@ -18,6 +18,7 @@ dependencies { implementation(project(':lib-dood-extractor')) implementation(project(':lib-voe-extractor')) implementation(project(':lib-okru-extractor')) + implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1" } apply from: "$rootDir/common.gradle" diff --git a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt index e0e2c0035..0bca77a26 100644 --- a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt +++ b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt @@ -5,6 +5,7 @@ import android.content.SharedPreferences import android.util.Base64 import androidx.preference.ListPreference import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.StreamWishExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList @@ -13,6 +14,7 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor +import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor @@ -92,31 +94,30 @@ open class Pelisplushd(override val name: String, override val baseUrl: String) val apiUrl = data.substringAfter("video[1] = '", "").substringBefore("';", "") val alternativeServers = document.select("ul.TbVideoNv.nav.nav-tabs li:not(:first-child)") if (apiUrl.isNotEmpty()) { - val domainRegex = Regex("^(?:https?:\\/\\/)?(?:[^@\\/\\n]+@)?(?:www\\.)?([^:\\/?\\n]+)") - val domainUrl = domainRegex.findAll(apiUrl).firstOrNull()?.value - + // val domainRegex = Regex("^(?:https?:\\/\\/)?(?:[^@\\/\\n]+@)?(?:www\\.)?([^:\\/?\\n]+)") + // val domainUrl = domainRegex.findAll(apiUrl).firstOrNull()?.value val apiResponse = client.newCall(GET(apiUrl)).execute().asJsoup() - val encryptedList = apiResponse!!.select("#PlayerDisplay div[class*=\"OptionsLangDisp\"] div[class*=\"ODDIV\"] div[class*=\"OD\"] li[data-r]") - val decryptedList = apiResponse!!.select("#PlayerDisplay div[class*=\"OptionsLangDisp\"] div[class*=\"ODDIV\"] div[class*=\"OD\"] li:not([data-r])") + val encryptedList = apiResponse!!.select("#PlayerDisplay div[class*=\"OptionsLangDisp\"] div[class*=\"ODDIV\"] div[class*=\"OD\"] li") + val regIsUrl = "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)".toRegex() + encryptedList.forEach { - val url = String(Base64.decode(it.attr("data-r"), Base64.DEFAULT)) val server = it.select("span").text() - serverVideoResolver(url, server)?.forEach { video -> videoList.add(video) } - } - decryptedList.forEach { - val server = it.select("span").text() - val url = it.attr("onclick") + var url = it.attr("onclick") .substringAfter("go_to_player('") .substringBefore("?cover_url=") .substringBefore("')") .substringBefore("',") .substringBefore("?poster") .substringBefore("#poster=") - val regIsUrl = "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)".toRegex() - if (regIsUrl.containsMatchIn(url)) { + + if (!regIsUrl.containsMatchIn(url)) { + url = String(Base64.decode(url, Base64.DEFAULT)) + } + + if (!url.contains("?data=")) { serverVideoResolver(url, server)?.forEach { video -> videoList.add(video) } } else { - val apiPageSoup = client.newCall(GET("$domainUrl/player/?id=$url")).execute().asJsoup() + val apiPageSoup = client.newCall(GET(url)).execute().asJsoup() val realUrl = apiPageSoup.selectFirst("iframe")?.attr("src") if (realUrl != null) { serverVideoResolver(realUrl, server)?.forEach { video -> videoList.add(video) } @@ -195,6 +196,13 @@ open class Pelisplushd(override val name: String, override val baseUrl: String) DoodExtractor(client).videoFromUrl(url2, "DoodStream", false)?.let { videoList.add(it) } } else if (server.lowercase() == "upload") { return YourUploadExtractor(client).videoFromUrl(url, headers = headers) + } else if (server.lowercase().contains("streamwish")) { + val docHeaders = headers.newBuilder() + .add("Referer", "$baseUrl/") + .build() + StreamWishExtractor(client, docHeaders).videosFromUrl(url, "StreamWish ") + } else if (server.contains("filemoon") || server.contains("moonplayer")) { + FilemoonExtractor(client).videosFromUrl(url, headers = headers).also(videoList::addAll) } } catch (_: Exception) {} return videoList diff --git a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt index 0433fab16..8da1d1b31 100644 --- a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt +++ b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt @@ -2,6 +2,9 @@ package eu.kanade.tachiyomi.animeextension.es.pelisplushd import androidx.preference.ListPreference import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.StreamHideExtractor +import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.StreamWishExtractor +import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.UqloadExtractor import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList import eu.kanade.tachiyomi.animesource.model.SAnime @@ -16,7 +19,6 @@ import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.jsonPrimitive @@ -190,6 +192,18 @@ class Pelisplusph(override val name: String, override val baseUrl: String) : Pel if (embedUrl.contains("streamlare")) { videoList.addAll(StreamlareExtractor(client).videosFromUrl(url)) } + if (embedUrl.contains("streamwish")) { + val docHeaders = headers.newBuilder() + .add("Referer", "$baseUrl/") + .build() + StreamWishExtractor(client, docHeaders).videosFromUrl(url, "StreamWish ") + } + if (embedUrl.contains("ahvsh") || embedUrl.contains("streamhide")) { + StreamHideExtractor(client).videosFromUrl(url, "StreamHide") + } + if (embedUrl.contains("uqload")) { + UqloadExtractor(client).videosFromUrl(url, headers) + } return videoList } diff --git a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt index cfdac8724..605f249a0 100644 --- a/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt +++ b/src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt @@ -1,7 +1,12 @@ package eu.kanade.tachiyomi.animeextension.es.pelisplushd +import android.util.Base64 import androidx.preference.ListPreference import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.StreamHideExtractor +import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.StreamWishExtractor +import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.UqloadExtractor +import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.VudeoExtractor import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList import eu.kanade.tachiyomi.animesource.model.SAnime @@ -105,16 +110,35 @@ class Pelisplusto(override val name: String, override val baseUrl: String) : Pel } } + private fun fetchUrls(text: String?): List { + if (text.isNullOrEmpty()) return listOf() + val linkRegex = "(http|ftp|https):\\/\\/([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])".toRegex() + return linkRegex.findAll(text).map { it.value.trim().removeSurrounding("\"") }.toList() + } + override fun videoListParse(response: Response): List