From 5853f993868c52a8c1fba34d74c776584321b826 Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Mon, 29 Aug 2022 10:37:43 +0800 Subject: [PATCH 1/3] [Feature] Add new extractor - PlayLtXyz --- .../cloudstream3/extractors/PlayLtXyz.kt | 85 +++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 1 + 2 files changed, 86 insertions(+) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt new file mode 100644 index 0000000000..d1317c40cc --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt @@ -0,0 +1,85 @@ +package com.lagradost.cloudstream3.extractors + +import android.util.Log +import com.fasterxml.jackson.annotation.JsonProperty +import com.fasterxml.jackson.module.kotlin.readValue +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.mapper +import com.lagradost.cloudstream3.utils.* + +class PlayLtXyz: ExtractorApi() { + override val name: String = "PlayLt" + override val mainUrl: String = "https://play.playlt.xyz" + override val requiresReferer = true + + private data class ResponseData( + @JsonProperty("data") val data: String? + ) + + override suspend fun getUrl(url: String, referer: String?): List { + val extractedLinksList = mutableListOf() + //Log.i(this.name, "Result => (url) $url") + var idUser = "" + var idFile = "" + var bodyText = "" + val doc = app.get(url, referer = referer).document + //Log.i(this.name, "Result => (url, script) $url / ${doc.select("script")}") + doc.select("script").forEach { + val text = it?.toString() ?: "" + if (text.isNotBlank()) { + if (text.contains("var idUser")) { + bodyText = text + //Log.i(this.name, "Result => (bodyText) $bodyText") + } + } + } + //Log.i(this.name, "Result => (bodyText) $bodyText") + if (bodyText.isNotBlank()) { + idUser = "(?<=var idUser = \")(.*)(?=\";)".toRegex().find(bodyText) + ?.groupValues?.get(0).toString() + + idFile = "(?<=var idfile = \")(.*)(?=\";)".toRegex().find(bodyText) + ?.groupValues?.get(0).toString() + } + Log.i(this.name, "Result => (idUser, idFile) $idUser / $idFile") + if (idUser.isNotBlank() && idFile.isNotBlank()) { + //val sess = HttpSession() + val ajaxHead = mapOf( + Pair("Origin", mainUrl), + Pair("Referer", mainUrl), + Pair("Sec-Fetch-Site", "same-site"), + Pair("Sec-Fetch-Mode", "cors"), + Pair("Sec-Fetch-Dest", "empty") + ) + val ajaxData = mapOf( + Pair("referrer", referer ?: mainUrl), + Pair("typeend", "html") + ) + + //idUser = 608f7c85cf0743547f1f1b4e + val posturl = "https://api-plhq.playlt.xyz/apiv5/$idUser/$idFile" + val data = app.post(posturl, headers = ajaxHead, data = ajaxData) + Log.i(this.name, "Result => (posturl) $posturl") + if (data.isSuccessful) { + val itemstr = data.text + Log.i(this.name, "Result => (data) $itemstr") + mapper.readValue(itemstr).let { item -> + val linkUrl = item.data ?: "" + if (linkUrl.isNotBlank()) { + extractedLinksList.add( + ExtractorLink( + source = name, + name = name, + url = linkUrl, + referer = url, + quality = Qualities.Unknown.value, + isM3u8 = true + ) + ) + } + } + } + } + return extractedLinksList + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 217837c969..f8f42bbb54 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -322,6 +322,7 @@ val extractorApis: MutableList = arrayListOf( Streamlare(), VidSrcExtractor(), VidSrcExtractor2(), + PlayLtXyz(), ) From aa9ce3f963598d13299a0553e2120cd358294f22 Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Mon, 29 Aug 2022 17:05:26 +0800 Subject: [PATCH 2/3] various cleanups --- .../cloudstream3/extractors/PlayLtXyz.kt | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt index d1317c40cc..5479db6ef0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt @@ -2,10 +2,9 @@ package com.lagradost.cloudstream3.extractors import android.util.Log import com.fasterxml.jackson.annotation.JsonProperty -import com.fasterxml.jackson.module.kotlin.readValue import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.mapper import com.lagradost.cloudstream3.utils.* +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson class PlayLtXyz: ExtractorApi() { override val name: String = "PlayLt" @@ -13,7 +12,7 @@ class PlayLtXyz: ExtractorApi() { override val requiresReferer = true private data class ResponseData( - @JsonProperty("data") val data: String? + @JsonProperty("data") val data: String? = null ) override suspend fun getUrl(url: String, referer: String?): List { @@ -36,12 +35,12 @@ class PlayLtXyz: ExtractorApi() { //Log.i(this.name, "Result => (bodyText) $bodyText") if (bodyText.isNotBlank()) { idUser = "(?<=var idUser = \")(.*)(?=\";)".toRegex().find(bodyText) - ?.groupValues?.get(0).toString() + ?.groupValues?.get(0) ?: "" idFile = "(?<=var idfile = \")(.*)(?=\";)".toRegex().find(bodyText) - ?.groupValues?.get(0).toString() + ?.groupValues?.get(0) ?: "" } - Log.i(this.name, "Result => (idUser, idFile) $idUser / $idFile") + //Log.i(this.name, "Result => (idUser, idFile) $idUser / $idFile") if (idUser.isNotBlank() && idFile.isNotBlank()) { //val sess = HttpSession() val ajaxHead = mapOf( @@ -59,11 +58,11 @@ class PlayLtXyz: ExtractorApi() { //idUser = 608f7c85cf0743547f1f1b4e val posturl = "https://api-plhq.playlt.xyz/apiv5/$idUser/$idFile" val data = app.post(posturl, headers = ajaxHead, data = ajaxData) - Log.i(this.name, "Result => (posturl) $posturl") + //Log.i(this.name, "Result => (posturl) $posturl") if (data.isSuccessful) { val itemstr = data.text Log.i(this.name, "Result => (data) $itemstr") - mapper.readValue(itemstr).let { item -> + tryParseJson(itemstr)?.let { item -> val linkUrl = item.data ?: "" if (linkUrl.isNotBlank()) { extractedLinksList.add( From c22f7b35f0811e309991a35a76e55688dfa89993 Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Fri, 2 Sep 2022 18:31:50 +0800 Subject: [PATCH 3/3] cleanups --- .../lagradost/cloudstream3/extractors/PlayLtXyz.kt | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt index 5479db6ef0..9a03155656 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt @@ -23,15 +23,10 @@ class PlayLtXyz: ExtractorApi() { var bodyText = "" val doc = app.get(url, referer = referer).document //Log.i(this.name, "Result => (url, script) $url / ${doc.select("script")}") - doc.select("script").forEach { + bodyText = doc.select("script").firstOrNull { val text = it?.toString() ?: "" - if (text.isNotBlank()) { - if (text.contains("var idUser")) { - bodyText = text - //Log.i(this.name, "Result => (bodyText) $bodyText") - } - } - } + text.contains("var idUser") + }?.toString() ?: "" //Log.i(this.name, "Result => (bodyText) $bodyText") if (bodyText.isNotBlank()) { idUser = "(?<=var idUser = \")(.*)(?=\";)".toRegex().find(bodyText)