无插件 - 赛事直播
http://www.wuchajian.xyz
jianghubailei (2226)5天前
只支持新包名版(体积19MB),或者Sigma版
搜索支持多关键字,用空格隔开
部分线路无法播放,更换线路
备用地址:http://www.yoozb.live
{
"bookSourceComment": "只支持新包名版(体积19MB),或者Sigma版\n\n搜索支持多关键字,用空格隔开\n\n部分线路无法播放,更换线路\n\n备用地址:http:\/\/www.yoozb.live",
"bookSourceGroup": "直播",
"bookSourceName": "无插件 - 赛事直播",
"bookSourceType": 4,
"bookSourceUrl": "http:\/\/www.wuchajian.xyz",
"customButton": false,
"customOrder": 1,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "@js:\nconst list = []\nconst push = (title, url, size) => list.push({\n title,\n url,\n style: {layout_flexBasisPercent: size}\n});\n\nconst url = source.key + \"\/m.html\";\nlet time = +String(java.get(\"wuchajian_time\"))\nlet html = String(java.get(\"wuchajian\"));\n\nif(!html || Date.now() - time > 3.6e6){\n html = java.ajax(url);\n java.put(\"wuchajian\", html);\n java.put(\"wuchajian_time\", Date.now());\n}\n\npush(\"全部赛事\", url, 0.29);\n\nconst doc = org.jsoup.Jsoup.parse(html);\nconst leagues = new Set();\n\ndoc.select(\"[data-role=content] .league\")\n.forEach(el => leagues.add(String(el.text())));\n\nleagues.forEach(lg =>\n push(lg, `${url}#${encodeURI(lg)}`, 0.29)\n)\n\nJSON.stringify(list)",
"header": "{\"User-Agent\":\"Mozilla\/5.0 (iPhone; CPU iPhone OS 17_2_1 like Mac OS X) AppleWebKit\/605.1.15 (KHTML, like Gecko) Version\/17.2 Mobile\/15E148 Safari\/604.1\"}",
"jsLib": "function hitRateFilter(arr, keyWords = '', exactLeague = false) {\n if (!Array.isArray(arr)) return [];\n const words = keyWords\n .trim()\n .split(\/\\s+\/)\n .filter(Boolean);\n \n if (!words.length) return arr.slice();\n\n const regs = words.map(w => new RegExp(w.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&'), 'i'));\n\n const extract = obj =>\n Object.values(obj)\n .map(String)\n .join(' ');\n\n const scored = [];\n \n for (let item of arr) {\n \t if (exactLeague) {\n let league = String(item.league || '');\n let hit = words.some(w => w == league);\n if (!hit) continue;\n }\n let hits = regs.reduce((n, r) => n + r.test(extract(item)), 0);\n if (hits) scored.push({ item, rate: hits \/ words.length });\n }\n \n scored.sort((a, b) => b.rate - a.rate);\n \n return scored.map(x => x.item);\n}\n\n",
"lastUpdateTime": "1768214087015",
"loginUi": "[\n {\n \"name\": \"清空发现缓存\",\n \"type\": \"button\",\n \"action\": \"clear()\"\n }\n]",
"loginUrl": "function login(){}\n\nfunction clear(){\n\t java.put(\"wuchajian\", \"\")\n\t source.refreshExplore()\n}",
"respondTime": 180000,
"ruleBookInfo": {},
"ruleContent": {
"content": "<js>\nif(result){\n result.replace(\/.*?=\/, \"\")\n}else{\n java.toast(\"没有嗅探到资源\")\n} \n<\/js>",
"sourceRegex": ".*(?:index\\.m3u8|jhyun\\.m3u8|playlist\\.m3u8$|\\.m3u8?|\\.mp4|\\.m3u8$).*"
},
"ruleExplore": {},
"ruleSearch": {
"bookList": "@js:\nconst isStrict = !baseUrl.endsWith(\"#\");\nconst keys = decodeURI(baseUrl.split(\"#\")?.[1] || \"\");\n\nconst html = result.replace(\/^\\s*(<li>.*?)<li>\\s*$\/gm, \"$1<\/li>\");\n\nconst doc = org.jsoup.Jsoup.parse(html);\nconst resList = [];\n\nlet currDate = \"\";\n\ndoc.select('[role=\"main\"] li').forEach(li => {\n let divider = li.select('li[data-theme=b]');\n if (divider.size() > 0) {\n currDate = divider.text().trim();\n return;\n }\n\n let a = li.select('a').first();\n if (!a) return;\n \n let fullText = String(a.text());\n let title = fullText.replace(\/^.*\\d{2}:\\d{2}\/, '').trim();\n let league = li.select('.league').text().trim();\n let status = li.select('.close').size() \n ? \"已结束\" \n : li.select('.live').size()\n ? \"直播中\" \n : '未开赛';\n \n let time = fullText.match(\/\\d{2}:\\d{2}\/)?.[0]\n let datetime = currDate + (time ? ' ' + time : '');\n let kind = [league, status];\n \n let id = a.attr('href');\n let links = doc.select(id).select(\"a\")\n .toArray()\n .filter(link=>link.attr(\"href\").startsWith(\"http\"))\n .map(String);\n let json = JSON.stringify(links);\n let url = `data:;base64,${java.base64Encode(json)},{\"type\":\"\"}`\n \n resList.push({\n title,\n datetime,\n league,\n kind,\n url\n });\n});\n\nconst results = hitRateFilter(resList, keys, isStrict);\nif(results.length === 0){\n\t results.push({\n title: `没有找到与“${keys}”相关的赛事`,\n datetime: \"尽量缩短关键字,字越多,越搜不到\"\n })\n}\nresults",
"bookUrl": "url",
"checkKeyWord": "CBA",
"intro": "datetime",
"kind": "kind",
"name": "title"
},
"ruleToc": {
"chapterList": "@js:\nJSON.parse(java.hexDecodeToString(result))",
"chapterName": "text",
"chapterUrl": "a@href##$##,{\"webView\": true}"
},
"searchUrl": "\/m.html#{{encodeURI(key)}}#",
"weight": 0
}