diff --git a/app/src/main/java/com/github/catvod/spider/ReBoYingShi.kt b/app/src/main/java/com/github/catvod/spider/ReBoYingShi.kt new file mode 100644 index 00000000..93829c43 --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/ReBoYingShi.kt @@ -0,0 +1,75 @@ +package com.github.catvod.spider + +import android.content.Context +import com.github.catvod.bean.Class +import com.github.catvod.bean.Result +import com.github.catvod.bean.Vod +import com.github.catvod.net.OkHttp +import com.github.catvod.utils.Json +import com.github.catvod.utils.Util +import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import java.net.URLEncoder +import java.nio.charset.Charset + +/** + * 电影云集 + * + * @author lushunming + * @createdate 2024-12-03 + */ +class ReBoYingShi : Cloud() { + private val siteUrl = "https://reboys.cn" + + + + + private val headerWithCookie: MutableMap + get() { + val header: MutableMap = HashMap() + header.put("User-Agent", Util.CHROME) + + return header + } + + @Throws(Exception::class) + override fun init(context: Context?, extend: String?) { + super.init(context, extend) + } + + + + + + @Throws(Exception::class) + override fun searchContent(key: String?, quick: Boolean): String? { + return searchContent(key, "1") + } + + @Throws(Exception::class) + override fun searchContent(key: String?, quick: Boolean, pg: String?): String? { + return searchContent(key, pg) + } + + private fun searchContent(key: String?, pg: String?): String? { + val searchPageURL = siteUrl + "/s/${URLEncoder.encode(key, Charset.defaultCharset().name())}.html" + val html = OkHttp.string(searchPageURL, this.headerWithCookie) + val apiToken = Util.findByRegex("const apiToken = \"(.*?)\";", html, 1) + + val searchURL = siteUrl + "/search?keyword=${URLEncoder.encode(key, Charset.defaultCharset().name())}" + val header = headerWithCookie.toMutableMap() + header.put("API-TOKEN", apiToken) + val json = OkHttp.string(searchURL, header) + val jsonObj = Json.safeObject(json) + var vodList = emptyList() + if (jsonObj.get("code").asInt == 0) { + val results = jsonObj.get("data").asJsonObject.get("data").asJsonObject.get("results").asJsonArray + vodList = results.map { + val title = it.asJsonObject.get("title").asString + val vodId = it.asJsonObject.get("links").asJsonArray[0].asJsonObject.get("url").asString + Vod(vodId, title, "", "") + } + } + return Result.string(vodList) + } +} \ No newline at end of file diff --git a/app/src/test/java/ReBoYSTest.kt b/app/src/test/java/ReBoYSTest.kt new file mode 100644 index 00000000..c75e7258 --- /dev/null +++ b/app/src/test/java/ReBoYSTest.kt @@ -0,0 +1,108 @@ +import android.app.Application +import com.github.catvod.server.Server +import com.github.catvod.spider.DianYingYunJi +import com.github.catvod.spider.Init +import com.github.catvod.spider.ReBoYingShi +import com.github.catvod.utils.Json +import com.google.gson.GsonBuilder +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment + +@RunWith(RobolectricTestRunner::class) +class ReBoYSTest { + private var mockContext: Application? = null + + private var spider: ReBoYingShi? = null + + @Before + @Throws(Exception::class) + fun setUp() { + mockContext = RuntimeEnvironment.application + Init.init(mockContext) + spider = ReBoYingShi() + + // spider.init(mockContext, "{\"cookie\":\"b-user-id=89ede34e-0efc-e1dd-c997-f16aaa792d0c; _UP_A4A_11_=wb9661c6dfb642f88f73d8e0c7edd398; b-user-id=89ede34e-0efc-e1dd-c997-f16aaa792d0c; ctoken=wla6p3EUOLyn1FSB8IKp1SEW; grey-id=5583e32b-39df-4bf0-f39f-1adf83f604a2; grey-id.sig=p8ReBIMG2BeZu1sYvsuOAZxYbx-MVrsfKEiCv87MsTM; isQuark=true; isQuark.sig=hUgqObykqFom5Y09bll94T1sS9abT1X-4Df_lzgl8nM; _UP_F7E_8D_=ZkyvVHnrBLp1A1NFJIjWi0PwKLOVbxJPcg0RzQPI6KmBtV6ZMgPh38l93pgubgHDQqhaZ2Sfc0qv%2BRantbfg1mWGAUpRMP4RqXP78Wvu%2FCfvkWWGc5NhCTV71tGOIGgDBR3%2Bu6%2Fjj44KlE5biSNDOWW7Bigcz27lvOTidzNw8s%2FWtKAIxWbnCzZn4%2FJMBUub1SIMcW89g57k4mfPmDlCgpZKzxwl6beSfdtZ4RUWXmZOn5v5NkxVKhU4wR0Pq7NklczEGdRq2nIAcu7v22Uw2o%2FxMY0xBdeC9Korm5%2FNHnxl6K%2Bd6FXSoT9a3XIMQO359auZPiZWzrNlZe%2BqnOahXcx7KAhQIRqSOapSmL4ygJor4r5isJhRuDoXy7vJAVuH%2FRDtEJJ8rZTq0BdC23Bz%2B0MrsdgbK%2BiW; _UP_D_=pc; __wpkreporterwid_=3d3f74a7-99b7-4916-3f78-911fc2eb9d87; tfstk=fIoZNxjnbhKwPOu0TWZ4LsaRqirTcudSSmNbnxD0C5VgClMm8xMyB-GsnSu4tjpOflAOmSD-9PNiGl120XrgkVNb1SrqHbJBN3tSBAEYoQOWVUUg9qZ8n1bGGkD3CqGYINKSBABhjnXgp3_Vywz6gSc0Syj3BWf0mr2DLW24eZfiiovEKWefj1q0swq3E82iNEMinMy7SLrcpA4Fh3z_ZAViCfih3PbtdW5N_DuU77AaTijmYRkL2Wq54ENoy5a7ZXxCbok33XzS7QSZgxD-oyoVsdGotql0p2dVu7umC4nLStbiLmParc4FELHrI-c0u2dPVRrs8zoZWKCnIbNZrlHfUCMUz2z8KyXVSlgSFmUojh58OzeqTzgwaGll4YCYKwctDV5coP2LL79eKHxpNTXHmre1kZU32JPWCR_AkP2LL79eLZQY-WeUNdw1.; __pus=2051c82285199d8be553be41dd5a2100AAQ+mmv35G4FDDZ5x+3Mhe2OMbNgweQ1ODbW8zDt9YuP1LQVqHUuAAz9KWLsPjpNtim0AVGHusN4MCosTmbq/khM; __kp=e6604120-6051-11ef-bfe4-c31b6cdd0766; __kps=AATcZArVgS76EPn0FMaV4HEj; __ktd=sii/iz4ePzEaoVirXul7QQ==; __uid=AATcZArVgS76EPn0FMaV4HEj; __itrace_wid=5829b95d-dac1-48d3-bfd5-f60cd9462786; __puus=7da0b96cb710fa1b376934485f977e05AATp/q8/QupT7IiBR1GWqZhxlIRT677smMvoHlLxQA0Lk6CkP0YJBOTl+p9DZgzlMz6w4hPXPgWsokukk8PW7ZfhFfPmv8tKMgLpCGLW+tk57luhNghmSdTeVPkAF59STtyCPBEtiNzNAd/zZJ6qILJDi5ywEBAAAg+gOyWHoLHNUR+QxeHRuQa8g5WWA95J8jebIlrr8rCvI1vjTbtiYktT\",\"token\":\"26fc6787afff43e78b78992e782502f1\"}"); + // spider.init(mockContext, "{\"cookie\":\"ctoken=rldVUeNBAbGyhJdbpC4wEUE-;__pus=75e54cf66f9ea5ed1497838782a90a78AATTBUV9c9w7KXUiHDEl6VdV8Wxki4L9R5kIIjSKQnX1wedJe3s8weva95YKUkRqI1aBY/MA+YBNvaTO0JkXvLp+;__kp=be6b9e10-74f8-11ef-aa08-7d8956cd7603;__kps=AATcZArVgS76EPn0FMaV4HEj;__ktd=sii/iz4ePzEaoVirXul7QQ==;__uid=AATcZArVgS76EPn0FMaV4HEj\"}"); + // spider.init(mockContext, ""); + /* spider!!.init( + mockContext, + "{\"site\": [\"https://www.wogg.net/\",\"https://wogg.xxooo.cf/\"],\"uccookie\":\"_UP_28A_52_=381;_UP_BT_=html5;_UP_F7E_8D_=ZkyvVHnrBLp1A1NFJIjWi0PwKLOVbxJPcg0RzQPI6Kl8ttcYB1X9Nkx0DnGMyJVLgv0M%2FCztZQaIhZhKaI%2F0Fa%2F5Fqe1t%2BDWF1o9sO71vnupc%2Fvxa%2B78J%2B%2BRZYZzk2EJNXvW0Y4gaAMFHf67r%2BOPjtggEPU7aNnlZbsGKBzPbuW85OJ3M3Dyz9a0oAjFZucLNmfj8kwFS5su6ugGZUgH1RU4wR0Pq7NklczEGdRq2nIAcu7v22Uw2o%2FxMY0xBdeC9Korm5%2FNHnxl6K%2Bd6FXSoT9a3XIMQO359auZPiZWzrNlZe%2BqnOahXcx7KAhQIRqSHYYCfquwtPWx%2FgYBqTnLfzoXy7vJAVuH%2FRDtEJJ8rZTq0BdC23Bz%2B0MrsdgbK%2BiW;_UP_6D1_64_=069;_UP_A4A_11_=wb96b12a16f941809f5af993726ba192;_UP_D_=mobilectoken=oxJV13ITm7aa7_rsplIXC-_v;__pus=cef2cc2dfd5d8af70df36bcedf83995cAAT3ZYhqlLos+yCaVQYYC944c4HEQnHz8uEpdQner0OcqISOpBObxl2kck65MGceRIDBd+MLtDxsNqwXvgDIFpYU;__kp=0d340990-9b39-11ef-ae54-4f733858896a;__kps=AAQXoZxLp9Oe2Ps0d/hNBJl4;__ktd=2gPNadz6Z9c+2+FyQyQZUw==;__uid=AAQXoZxLp9Oe2Ps0d/hNBJl4;UDRIVE_TRANSFER_SESS=UpLXXX2HAXJNW0AHgDcMurpazcqTbU-EQWnKG6RKtkdhdqZgHGTM-BSulf_oo1nmMMjo6hFdByLlm-bEiwjByMbIIEehsxhuuV00b96SSaPExn0wMcQ8SmzJa-YwonEE2MEVWCHcRYuW4Z-ljMOgab7qaGtQUpqjkl-p6OTv23BW-4gM6y7DNKvGeaMv_3NX\"," + + "\"cookie\":\"b-user-id=89ede34e-0efc-e1dd-c997-f16aaa792d0c; _UP_A4A_11_=wb9661c6dfb642f88f73d8e0c7edd398; b-user-id=89ede34e-0efc-e1dd-c997-f16aaa792d0c; ctoken=wla6p3EUOLyn1FSB8IKp1SEW; grey-id=5583e32b-39df-4bf0-f39f-1adf83f604a2; grey-id.sig=p8ReBIMG2BeZu1sYvsuOAZxYbx-MVrsfKEiCv87MsTM; isQuark=true; isQuark.sig=hUgqObykqFom5Y09bll94T1sS9abT1X-4Df_lzgl8nM; _UP_F7E_8D_=ZkyvVHnrBLp1A1NFJIjWi0PwKLOVbxJPcg0RzQPI6KmBtV6ZMgPh38l93pgubgHDQqhaZ2Sfc0qv%2BRantbfg1mWGAUpRMP4RqXP78Wvu%2FCfvkWWGc5NhCTV71tGOIGgDBR3%2Bu6%2Fjj44KlE5biSNDOWW7Bigcz27lvOTidzNw8s%2FWtKAIxWbnCzZn4%2FJMBUub1SIMcW89g57k4mfPmDlCgpZKzxwl6beSfdtZ4RUWXmZOn5v5NkxVKhU4wR0Pq7NklczEGdRq2nIAcu7v22Uw2o%2FxMY0xBdeC9Korm5%2FNHnxl6K%2Bd6FXSoT9a3XIMQO359auZPiZWzrNlZe%2BqnOahXcx7KAhQIRqSOapSmL4ygJor4r5isJhRuDoXy7vJAVuH%2FRDtEJJ8rZTq0BdC23Bz%2B0MrsdgbK%2BiW; _UP_D_=pc; __wpkreporterwid_=3d3f74a7-99b7-4916-3f78-911fc2eb9d87; tfstk=fIoZNxjnbhKwPOu0TWZ4LsaRqirTcudSSmNbnxD0C5VgClMm8xMyB-GsnSu4tjpOflAOmSD-9PNiGl120XrgkVNb1SrqHbJBN3tSBAEYoQOWVUUg9qZ8n1bGGkD3CqGYINKSBABhjnXgp3_Vywz6gSc0Syj3BWf0mr2DLW24eZfiiovEKWefj1q0swq3E82iNEMinMy7SLrcpA4Fh3z_ZAViCfih3PbtdW5N_DuU77AaTijmYRkL2Wq54ENoy5a7ZXxCbok33XzS7QSZgxD-oyoVsdGotql0p2dVu7umC4nLStbiLmParc4FELHrI-c0u2dPVRrs8zoZWKCnIbNZrlHfUCMUz2z8KyXVSlgSFmUojh58OzeqTzgwaGll4YCYKwctDV5coP2LL79eKHxpNTXHmre1kZU32JPWCR_AkP2LL79eLZQY-WeUNdw1.; __pus=2051c82285199d8be553be41dd5a2100AAQ+mmv35G4FDDZ5x+3Mhe2OMbNgweQ1ODbW8zDt9YuP1LQVqHUuAAz9KWLsPjpNtim0AVGHusN4MCosTmbq/khM; __kp=e6604120-6051-11ef-bfe4-c31b6cdd0766; __kps=AATcZArVgS76EPn0FMaV4HEj; __ktd=sii/iz4ePzEaoVirXul7QQ==; __uid=AATcZArVgS76EPn0FMaV4HEj; __itrace_wid=5829b95d-dac1-48d3-bfd5-f60cd9462786; __puus=7da0b96cb710fa1b376934485f977e05AATp/q8/QupT7IiBR1GWqZhxlIRT677smMvoHlLxQA0Lk6CkP0YJBOTl+p9DZgzlMz6w4hPXPgWsokukk8PW7ZfhFfPmv8tKMgLpCGLW+tk57luhNghmSdTeVPkAF59STtyCPBEtiNzNAd/zZJ6qILJDi5ywEBAAAg+gOyWHoLHNUR+QxeHRuQa8g5WWA95J8jebIlrr8rCvI1vjTbtiYktT\",\"token\":\"26fc6787afff43e78b78992e782502f1\"}" + )*/ + } + + @Test + @Throws(Exception::class) + fun homeContent() { + val content = spider!!.homeContent(true) + val map = Json.safeObject(content) + val gson = GsonBuilder().setPrettyPrinting().create() + + println("homeContent--" + gson.toJson(map)) + + //Assert.assertFalse(map.getAsJsonArray("list").isEmpty()); + } + + @Test + @Throws(Exception::class) + fun homeVideoContent() { + val content = spider!!.homeVideoContent() + val map = Json.safeObject(content) + val gson = GsonBuilder().setPrettyPrinting().create() + + println("homeVideoContent--" + gson.toJson(map)) + + // Assert.assertFalse(map.getAsJsonArray("list").isEmpty()); + } + + @Test + @Throws(Exception::class) + fun categoryContent() { + val content = spider!!.categoryContent("https://dyyjpro.com/category/dianying", "2", true, null) + val map = Json.safeObject(content) + val gson = GsonBuilder().setPrettyPrinting().create() + println("categoryContent--" + gson.toJson(map)) + Assert.assertFalse(map.getAsJsonArray("list").isEmpty()) + } + + @Test + @Throws(Exception::class) + fun detailContent() { + val content = spider!!.detailContent(mutableListOf("/s/家庭煮夫.html")) + println("detailContent--" + content) + + val map = Json.safeObject(content) + val gson = GsonBuilder().setPrettyPrinting().create() + println("detailContent--" + gson.toJson(map)) + Assert.assertFalse(map.getAsJsonArray("list").isEmpty()) + } + + @Test + @Throws(Exception::class) + fun playerContent() { + val content = spider!!.playerContent( + "quark4K", + "81c9aa49887d4b07aba861d7dd76d0ac++0ec2d75805f83bd045434f0d22f71489++4be1d75e17aa++wGlrbmw95nBbzO2rbCcEicZ8f4a+z5aKiuyoLQLA5SQ=", + ArrayList() + ) + println("playerContent--" + content) + val map = Json.safeObject(content) + val gson = GsonBuilder().setPrettyPrinting().create() + println("playerContent--" + gson.toJson(map)) + Assert.assertFalse(map.getAsJsonPrimitive("url").getAsString().isEmpty()) + } + + @Test + @Throws(Exception::class) + fun searchContent() { + val content = spider!!.searchContent("屠户之子的科举之路", false) + val map = Json.safeObject(content) + val gson = GsonBuilder().setPrettyPrinting().create() + println("searchContent--" + gson.toJson(map)) + Assert.assertFalse(map.getAsJsonArray("list").isEmpty()) + } +} \ No newline at end of file diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index b7d79b80..ae3895e8 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index eb78f631..8a834e06 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -7df1f46baf40c21051abe0182086bef4 +49c24003ea2a52abb468ad7661ae1730 diff --git a/json/index.json b/json/index.json index 994a0557..6f72ffd9 100644 --- a/json/index.json +++ b/json/index.json @@ -1,5 +1,5 @@ { - "spider": "https://andoridspidermt.netlify.app/jar/custom_spider.jar;md5;7df1f46baf40c21051abe0182086bef4", + "spider": "https://andoridspidermt.netlify.app/jar/custom_spider.jar;md5;49c24003ea2a52abb468ad7661ae1730", "lives": [ { "name": "电视直播", @@ -144,6 +144,14 @@ "searchable": 1, "changeable": 1, "ext": {} + },{ + "key": "ReBoYingShi", + "name": "热播影视4k", + "type": 3, + "api": "csp_ReBoYingShi", + "searchable": 1, + "changeable": 1, + "ext": {} }, {