From ad526142b9e488cfa4575b4848e19e6411fbc835 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Sun, 18 Dec 2022 11:20:05 +0100 Subject: [PATCH] update superembed --- .../kotlin/com/lagradost/CaptchaSolver.kt | 36 ++++++++++++ .../com/lagradost/SuperembedProvider.kt | 58 ++++++++----------- 2 files changed, 60 insertions(+), 34 deletions(-) create mode 100644 SuperembedProvider/src/main/kotlin/com/lagradost/CaptchaSolver.kt diff --git a/SuperembedProvider/src/main/kotlin/com/lagradost/CaptchaSolver.kt b/SuperembedProvider/src/main/kotlin/com/lagradost/CaptchaSolver.kt new file mode 100644 index 0000000..6f81b17 --- /dev/null +++ b/SuperembedProvider/src/main/kotlin/com/lagradost/CaptchaSolver.kt @@ -0,0 +1,36 @@ +package com.lagradost + +import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson +import com.lagradost.cloudstream3.utils.AppUtils.toJson +import kotlinx.coroutines.delay +import org.json.JSONArray +import org.json.JSONObject +import android.util.Log + +public object CaptchaSolver { + suspend fun predictFace(url: String): String? { + val img = "data:image/jpeg;base64," + base64Encode(app.get(url).body.bytes()) + val reqData = HFRequest(listOf(img)).toJson() + val res = app.post("https://yuqi-gender-classifier.hf.space/api/queue/push/", json = reqData).text + val request = tryParseJson(res) + for (i in 1..5) { + delay(500L) + val document = app.post("https://yuqi-gender-classifier.hf.space/api/queue/status/", json=request?.toJson()).text + val status = tryParseJson(document) + if (status?.get("status") != "COMPLETE") continue + return (((status.get("data") as? JSONObject?) + ?.get("data") as? JSONArray?) + ?.get(0) as? JSONObject?) + ?.get("label") as String? + } + return null + } + + private data class HFRequest( + val data: List, + val action: String = "predict", + val fn_index: Int = 0, + val session_hash: String = "aaaaaaaaaaa" + ) +} \ No newline at end of file diff --git a/SuperembedProvider/src/main/kotlin/com/lagradost/SuperembedProvider.kt b/SuperembedProvider/src/main/kotlin/com/lagradost/SuperembedProvider.kt index 8b3936f..ae084a4 100644 --- a/SuperembedProvider/src/main/kotlin/com/lagradost/SuperembedProvider.kt +++ b/SuperembedProvider/src/main/kotlin/com/lagradost/SuperembedProvider.kt @@ -6,9 +6,8 @@ import com.lagradost.cloudstream3.metaproviders.TmdbProvider import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.loadExtractor -import kotlinx.coroutines.delay -import org.json.JSONArray -import org.json.JSONObject +import okhttp3.FormBody +import android.util.Log class SuperembedProvider : TmdbProvider() { override var mainUrl = "https://seapi.link" @@ -54,40 +53,31 @@ class SuperembedProvider : TmdbProvider() { val url: String ) { suspend fun getIframeContents(): String? { - val document = app.get(url) + var document = app.get(url) + for (i in 1..5) { + if ("captcha-message" in document.text) { + val soup = document.document + val prompt = soup.selectFirst(".captcha-message")?.text() ?: continue + val captchaId = soup.selectFirst("input[name=\"captcha_id\"]")?.attr("value") ?: continue + val promptGender = if ("female" in prompt) "female" else "male" + val checkboxes = soup.select(".captcha-checkbox").mapNotNull { it -> + val img = it.selectFirst("img")?.attr("src") ?: return@mapNotNull null + val gender = CaptchaSolver.predictFace("https://streamembed.net${img}") ?: return@mapNotNull null + if (gender != promptGender) return@mapNotNull null + return@mapNotNull it.selectFirst("input")?.attr("value") + } + val formData = FormBody.Builder().apply { + add("captcha_id", captchaId) + checkboxes.forEach { check -> + add("captcha_answer[]", check) + } + }.build() + document = app.post(url, requestBody=formData) + } else { break } + } val regex = "(res) - for (i in 1..5) { - delay(500L) - val document = app.post("https://hf.space/embed/njgroene/age-gender-profilepic/api/queue/status/", json=request).text - val status = tryParseJson(document) - if (status?.get("status") != "COMPLETE") continue - val pred = (((status.get("data") as? JSONObject?) - ?.get("data") as? JSONArray?) - ?.get(0) as? String?) ?: return null - return if ("Male" in pred) Gender.Male - else if ("Female" in pred) Gender.Female - else null - } - } - - private data class HFRequest( - val data: List, - val action: String = "predict", - val fn_index: Int = 0, - val session_hash: String = "aaaaaaaaaaa" - ) - }*/ }