UAA 修改版

https://www.uaa.com##主域名,需要梯子

jianghubailei (2226)1天前


源仓库出现了很多加密规则,看到本仓库某个uaa规则需要激活码,激活码需要进论坛获取,而注册论坛需要购买6元邀请码。


遂有了这个二改版。

注:只修改了基本页和发现
二维码导入
{
    "bookSourceComment": "\n使用登录功能切换模式和域名,切换后需手动刷新\n\n刷新方法:长按跳出菜单 --> 点击刷新",
    "bookSourceGroup": "🔞",
    "bookSourceName": "UAA 修改版",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/www.uaa.com##主域名,需要梯子",
    "customOrder": 21,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "exploreUrl": "@js:\nvar discoveryData = {\n  novel: {\n    topTitle: \"🔖小说专区🔖\",\n    order: [\"最新上架\", \"最近更新\", \"最多观看\", \"最多收藏\"],\n    cateTitle: \"🏷小说分类🏷\",\n    cate: [\"都市\", \"校园\", \"乱伦\", \"玄幻\", \"系统\", \"穿越\", \"武侠\", \"奇幻\", \"乡村\", \"历史\", \"明星\", \"科幻\", \"同人\"],\n    tagTitle: \"🏷标签🏷\",\n    tag: [\"1v1\", \"BE\", \"Futa\", \"HE\", \"NP\", \"NTL\", \"NTR\", \"SM\", \"暗黑\", \"百合\", \"变装\", \"病娇\", \"产奶\", \"痴女\", \"触手\", \"纯爱\", \"粗口\", \"催眠\", \"耽美\", \"道具\", \"调教\", \"反差\", \"父女\", \"复仇\", \"改造\", \"搞笑\", \"公媳\", \"狗血\", \"骨科\", \"好文笔\", \"后宫\", \"监禁\", \"交换伴侣\"]\n  },\n  audio: {\n    topTitle: \"🔖听书专区🔖\",\n    cateTitle: \"🏷听书分类🏷\",\n    cate: [\"有声小说\", \"淫词艳曲\", \"激情骚麦\", \"寸止训练\"],\n    authorTitle: \"🏷作者标签🏷\",\n    authors: [\"小苮儿\", \"曼曼\", \"点心\", \"小窈\", \"小咪\", \"戴逸\", \"雅朵\", \"小野猫\", \"步非烟\", \"小瑶\", \"姽狐\", \"芯媛\", \"小美\", \"浅浅\", \"沙拉\", \"萱妹\", \"Rain\", \"南征\", \"小筝\", \"小琳\", \"林三岁\", \"叶倩彤\", \"秋水\", \"Mini姐\", \"戴猫耳的大魔王\", \"源源\", \"青梅\", \"嫣然\", \"小爽\", \"大宝\", \"Rainnight.雨\", \"小颦\", \"楪祈\", \"小一熟了吗\", \"小晶晶软糖\", \"李二狗\", \"绝色\", \"梦瑶\", \"紫洛\", \"小晴\", \"想睡觉\", \"宋恩\", \"小优\", \"墨白\", \"小媚\", \"魅惑\", \"鹿梧\", \"偷听\", \"狐姬\", \"柳瑶\"],\n    rankTitle: \"🏷排行榜🏷\",\n    rank: [\"周榜\", \"月榜\", \"年榜\", \"热门\"]\n  },\n  comic: {\n    topTitle: \"🔖漫画专区🔖\",\n    area: [\"全部\", \"日本\", \"韩漫\"],\n    cate: [\"短篇\", \"单本\", \"同人\", \"剧情\", \"校园\", \"爱情\", \"BL\", \"奇幻\", \"调教\", \"乱伦\"],\n    status: [\"全部\", \"已完结\", \"连载中\"],\n    tag: {\n      \"全部彩色\": \"\",\n      \"女主\": \"orientation=2\",\n      \"原创首发\": \"source=1\"\n    },\n    rankTitle: \"🏷排行榜🏷\",\n    rank: [\"周榜\", \"月榜\", \"年榜\", \"收藏\"]\n  },\n  video: {\n    topTitle: \"🔖视频专区🔖\",\n    order: [, \"最新排行\", , \"观看排行\", \"收藏排行\"], \/\/ 不要删除多余逗号\n    cate: [\"国产视频\", \"日本AV\", \"H动漫\"],\n    tagTitle: \"🏷标签🏷\",\n    tag: [\"自拍偷拍\", \"主播福利\", \"丝袜网袜\", \"泳装水着\", \"JK制服\", \"女仆\", \"吊带袜\", \"兔女郎\", \"少女萝莉\", \"白虎\", \"苗条\", \"美腿美脚\", \"美臀\", \"熟女\", \"巨乳\", \"颜射\", \"肛交\", \"潮吹\", \"口交\", \"69\", \"乳交\", \"内射中出\", \"捆绑调教\", \"痴女痴汉\", \"强奸轮奸\", \"3P群交\", \"奇异催眠\", \"出轨\", \"NTR\", \"医生护士\", \"空中女郎\", \"未亡人\", \"老师校园\", \"人妻主妇\", \"OL\", \"姐姐妹妹\", \"母亲女儿\", \"TS人妖\", \"女高中生\"]\n  }\n}\n\n\nlet type = String(source.getVariable())?.split(\",\")?.[0] || 0;\njava.toast(\"type:\"+type)\nlet list = [];\nconst typeSort = [\n  \"novel\",\n  \"comic\",\n  \"video\",\n  \"audio\"\n ]\n\nconst push = (title, url, type1, type2) => {\n  list.push({\n    title: title,\n    url: url,\n    style: {\n      layout_flexGrow: type1,\n      layout_flexBasisPercent: type2\n    }\n  });\n};\n\nlet { novel, audio, comic, video } = discoveryData;\nif (typeSort[type] === \"novel\") {\n  let url = `{{getUrl()}}api\/novel\/app\/novel\/search?`;\n  push(novel.topTitle, null, 1, 1);\n  novel.order.forEach((order, i) => {\n    push(order, `${url}page={{page}}&size=20&orderType=${i + 1}`, 1, 0.35);\n  });\n  push(novel.cateTitle, null, 1, 1);\n  novel.cate.forEach(cat => {\n    push(cat, `${url}category=${cat}&page={{page}}&size=20`, 1, 0.25);\n  });\n  push(novel.tagTitle, null, 1, 1);\n  novel.tag.forEach(tag => {\n    push(tag, `${url}includeTags=${tag}&page={{page}}&size=20`, 1, 0.25);\n  });\n}\nelse if (typeSort[type] === \"audio\") {\n  push(audio.topTitle, null, 1, 1);\n  push(audio.cateTitle, null, 1, 1);\n  audio.cate.forEach(cat => {\n    push(cat, `{{getUrl()}}api\/audio\/app\/audio\/search?category=${cat}&page={{page}}&size=25`, 1, 0.4);\n  });\n  push(audio.authorTitle, null, 1, 1);\n  audio.authors.forEach(author => {\n    push(author, `{{getUrl()}}api\/audio\/app\/audio\/search?author=${author}&sort=3&searchType=1&page={{page}}&size=25`, 1, 0.25);\n  });\n  push(audio.rankTitle, null, 1, 1);\n  audio.rank.forEach((rank, i) => {\n    push(rank, `{{getUrl()}}api\/audio\/app\/audio\/rank?page={{page}}&type=${i + 1}&size=25`, 1, 0.4);\n  });\n}\nelse if (typeSort[type] === \"comic\") {\n  let url = `{{getUrl()}}api\/comic\/app\/comic\/search?`;\n  push(comic.topTitle, null, 1, 1);\n  comic.area.forEach((area, arigin) => {\n    push(area, `${url}origin=${arigin || \"\"}&page={{page}}&size=25`, 1, 0.39);\n  });\n  comic.cate.forEach(cat => {\n    push(cat, `${url}category=${cat}&page={{page}}&size=25`, 1, 0.25);\n  });\n  const finished = [\"\", 1, 0];\n  comic.status.forEach((status, i) => {\n    push(status, `${url}finished=${finished[i]}&page={{page}}&size=25`, 1, 0.39);\n  });\n  for (let [tag, value] of Object.entries(comic.tag)) {\n    push(tag, `${url}${value}&page={{page}}&size=25`, 1, 0.25);\n  }\n  push(comic.rankTitle, null, 1, 1);\n  comic.rank.forEach((rank, i) => {\n    push(rank, `{{getUrl()}}api\/comic\/app\/comic\/rank?page={{page}}&type=${i + 1}&size=25`, 1, 0.25);\n  });\n}\nelse if (typeSort[type] === \"video\") {\n  let url = `{{getUrl()}}api\/video\/app\/video\/search?`;\n  push(video.topTitle, null, 1, 1);\n  for (let i = 0; i < video.order.length; i++) {\n    let order = video.order[i];\n    if (!order) continue;\n    push(order, `${url}category=&orderType=${i}&page={{page}}&searchType=1&size=40`, 1, 0.25);\n  };\n  video.cate.forEach((cat, index) => {\n    push(cat, `${url}orderType=1&origin=${index + 1}&page={{page}}&searchType=1&size=40`, 1, 0.25);\n  });\n  push(video.tagTitle, null, 1, 1);\n  video.tag.forEach(tag => {\n    push(tag, `${url}tag=${tag}&page={{page}}&searchType=1&size=40`, 1, 0.25);\n  });\n}\nelse {\n\t java.toast(\"类型出错,请用登录功能重新选择类型!!!\")\n}\n\nJSON.stringify(list, null, 2)",
    "header": "@js:\nJSON.stringify({\n  'User-Agent': \"Mozilla\/5.0 (Linux; Android 15; V2304A Build\/AP3A.240905.015.A2; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/132.0.6834.163 Mobile Safari\/537.36\",\n  'sec-ch-ua-platform': \"\\\"Android\\\"\",\n  'origin': getUrl(),\n  'x-requested-with': \"cn.mujiankeji.mbrowser\",\n  'Referer': getUrl(),\n  'Accept-language': \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\"\n})",
    "jsLib": "var host = [\n  \"https:\/\/www.uaa001.com\/\",\n  \"https:\/\/www.uaa002.com\/\",\n\t\"https:\/\/www.uaa003.com\/\",\n\t\"https:\/\/www.uaa004.com\/\",\n\t\"https:\/\/www.uaa005.com\/\",\n\t\"https:\/\/www.uaa202410.com\/\"\n]\n\nfunction getUrl() {\n\t let v = String(this.source.getVariable());\n  let code = v.split(\",\")[1] || 0;\n  return host[code]\n}\n\nvar ua = 'Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/135.0.0.0 Safari\/537.36 Edg\/135.0.0.0';",
    "lastUpdateTime": "1745846299577",
    "loginUi": "[\n{\n\"name\": \"🔺登 录🔺\",\n\"type\": \"button\",\n\"action\": \"login(true)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.39\n}\n},\n{\n        \"name\":  \"  退出登录  \",\n        \"type\": \"button\",\n        \"action\": \"logout()\"\n      },\n{\n\"name\": \"⚙️ 当前模式 ⚙️\",\n\"type\": \"button\",\n\"action\": \"K()\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 1\n}\n},\n{\n\"name\": \"❗小说❗\",\n\"type\": \"button\",\n\"action\": \"M(0)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.39\n}\n},\n{\n\"name\": \"❗漫画❗\",\n\"type\": \"button\",\n\"action\": \"M(1)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.39\n}\n},\n{\n\"name\": \"❗视频❗\",\n\"type\": \"button\",\n\"action\": \"M(2)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.39\n}\n},\n{\n\"name\": \"❗听书❗\",\n\"type\": \"button\",\n\"action\": \"M(3)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.39\n}\n},\n{\n\"name\":\"❗ ⚙️ 当前 域名 ⚙️ ❗\",\n\"type\":\"button\",\n\"action\":\"H()\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 1\n}\n},\n{\n\"name\":\"0⃣️\",\n\"type\":\"button\",\n\"action\":\"A(0)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.29\n}\n\n},\n{\n\"name\":\"1⃣️\",\n\"type\":\"button\",\n\"action\":\"A(1)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.29\n}\n\n},\n{\n\"name\":\"2⃣️\",\n\"type\":\"button\",\n\"action\":\"A(2)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.29\n}\n\n},\n{\n\"name\":\"3⃣️\",\n\"type\":\"button\",\n\"action\":\"A(3)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.25\n}\n\n},\n{\n\"name\":\"4⃣️\",\n\"type\":\"button\",\n\"action\":\"A(4)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.25\n}\n\n},\n{\n\"name\":\"5⃣️\",\n\"type\":\"button\",\n\"action\":\"A(5)\",\n\"style\": {\n\"layout_flexGrow\": 1,\n\"layout_flexBasisPercent\": 0.25\n}\n}\n]       ",
    "loginUrl": "\/\/登录\nfunction login() {\n\t  let url = getUrl();\n   let cookies = this.cookie.getCookie(url) || this.java.getCookie(url)\n   if (cookies && cookies != \"\") {\n     java.toast(\"\\n请不要重复登录,请先退出登录!\")\n     return false\n   }\n   try {\n     java.startBrowserAwait(url, \"登录\")\n   } catch (e) {\n     java.toast(e)\n   }\n   cookies = cookie.getCookie(url)\n   if (!cookies || cookies == \"\") {\n     java.toast(\"登录失败!\")\n     return false\n   }\n   java.toast(\"登录成功!\")\n   return true\n}\n\n\/\/退出登录\nfunction logout() {\n   cookie.removeCookie(getUrl());\n   let cookies = cookie.getCookie(url)\n   if (cookies && cookies != \"\") {\n     java.toast(\"退出登录失败!\")\n     return false\n   }\n   java.toast(\"成功退出登录!\")\n   return true\n}\n\n var mode = [\"❗小说模式❗\",\"❗漫画模式❗\",\"❗视频模式❗\",\"❗听书模式❗\"]\n \n \/\/显示当前模式\nvar K = () => {\n  let v = String(source.getVariable()).split(\",\");\n  let x = v[0] || 0;\n  java.toast(\"\\n\" + mode[x])\n}\n \n \/\/设置模式\nvar M = (x) => {\n  let v = String(source.getVariable()).split(\",\");\n  v[0] = x;\n  source.setVariable(v.join(\",\"));\n  java.toast(`\\n成功设置\\n${mode[x]}`)\n}\n\n\/\/显示当前域名\nvar H = () => {\n  let v = String(source.getVariable()).split(\",\");\n  let x = v[1] || 0;\n\t java.toast(`\\n当前域名:【${x}】\\n${getUrl()}`)\n}\n\n\/\/设置域名\nvar A = (x) => {\n  let v = String(source.getVariable()).split(\",\");\n  v[1] = x;\n\t source.setVariable(v.join(\",\"));\n\t java.toast(`\\n当前域名:【${v[1]}】\\n${getUrl()}`)\n}",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "author",
        "init": "<js>\nlet v = String(source.getVariable()).split(\",\");\nlet x = v[2];\n if (baseUrl.match(\/novel\/)){\nname=`{{@@[email protected][email protected]@text}}`\nauthor=`{{@@[email protected][email protected]@a@text}}`\nkind=`{{book.kind}}`\nword=`{{book.wordCount}}`\nlast=`{{@@[email protected][email protected]@text##最新:}}`\n\ntry {\n    const response = java.ajax(`{{getUrl()}}api\/novel\/app\/novel\/comments?novelId=@get:{bid}&sortType=1&page=${x}&rows=5`);\n    const jsonData = JSON.parse(response);\n    const logOutput = jsonData.data.map(comment => {\n        const cleanNickName = comment.updateTime.replace(\/T\/g,'  ').replace(\/\\..*\/g, '');\n        \/\/ 根据分数生成星星显示\n        const generateStars = (score) => {\n            let starCount = Math.min(Math.floor(score \/ 2), 5);\n            let stars = '';\n            for (let i = 0; i < 5; i++) {\n                stars += i < starCount? '★' : '☆';\n            }\n            return stars;\n        };\n        const starDisplay = generateStars(comment.score);\n        return `\n  [${cleanNickName}]  ${comment.createTimeFormat}\n⛄【${comment.nickName}】:👍🏻${comment.score} ${starDisplay}\n ${comment.content}\n \\n&shy;\n \n`;\n    }).join('\\n');\n    \/\/java.log(logOutput);\n} catch (error) {\n    const errorLog = {\n        [SyntaxError.name]: '数据解析失败: ',\n        default: 'AJAX请求失败: '\n    }[error.name || 'default'] + error.message;\n    java.log(errorLog);\n}\ninfo = `&nbsp;\n📖 书名:{{@@[email protected][email protected]@text}}\n👤 作者:{{@@[email protected][email protected]@a@text}}\n📜 篇幅:{{@@[email protected]@li.1@text}}\n🔖 标签:{{@@class.tag_box@li[0:-3]@a@text##\\n}}\n🗿 肉量:{{@@class.props_box@[email protected]@text}}\n✏  评分:{{@@class.score_box@span@text}}\n🕰 最新:{{@@[email protected][email protected]@text##最新:}}\n👁 观看:{{@@class.props_box@[email protected]@text}}\n❤️ 收藏:{{@@class.props_box@[email protected]@text}}\n🏷 简介:{{@@class.ellipsis@text##小说简介:}}`;\nintro=info+`\\n&shy;\\n【✨评论✨】最新\\n&shy;${logOutput}`\ninfo=logOutput?intro:info\n}else if(baseUrl.match(\/comic\/)){\n\tname=`{{book.name}}`\n\t\tauthor=`{{book.author}}`\n\t\tkind=`{{book.kind}}`\n\t\tword=``\n\t\tlast=``\n\t\tinfo=`&nbsp;\n📖 书名:{{book.name}}\n👤 作者:{{book.author}}\n🏷 简介:{{book.intro}}`;\n\n\t}else if (baseUrl.match(\/video\/)) {\n\t\tname=`{{$.model.title}}`\n\t\tauthor=`{{$.model.keywords}}`\n\t\tkind=`{{$..tags}}`\n\t\tword=``\n\t\tlast=``\n\t\tinfo=`{{$..brief}}`\n\t\t}else if (baseUrl.match(\/audio\/)) {\n   name=`{{$.model.title}}`\n\t\tauthor=`{{$.model.authors}}`\n\t\tkind=`{{java.getString('.finished')==1?\"完结\":\"连载\"}},{{$..categories}}`\n\t\tword=``\n\t\tlast=`{{$..latestUpdate}}`\n\t\tinfo=`{{$..brief}}`\n}\ndata = {\n    name: name,\n    author: author,\n    kind: kind,\n    word:word,\n    last: last,\n    info: info\n};\n\nJSON.stringify(data);\n<\/js>",
        "intro": "info",
        "kind": "kind##\\###,",
        "lastChapter": "last",
        "name": "name",
        "wordCount": "word"
    },
    "ruleContent": {
        "content": "<js>\nif (baseUrl.match(\/novel\/)){\nvar document = org.jsoup.Jsoup.parse(result);\nvar limit_box = document.select(\"div.limit_code_box\");\nif (result['match'](\/正文内容已隐藏\/)) {\n    java['toast']('\\n❗❗❗【抱歉,系统检测到访问异常,请输入验证码!】👻');\n    java.startBrowser(baseUrl,'验证')\n      }\nif (limit_box.hasClass(\"hide\")) {\n  \tdocument.select(\"div.line\");\n }}\nelse if(baseUrl.match(\/comic\/)){\tresult=java.getString(\"#content@img@src\");\nresult.split('\\n').map(x=>`<img src=\"${x}\">`).join('\\n');\n\t}else if(baseUrl.match(\/video\/)){\n\t\tif (book['durChapterIndex'] == chapter['index']) {\n        b64 = java['base64Encode'](`\n    <html>\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width\">\n        <style>\n            body {\n                margin: 0;\n                font-family: Arial, sans-serif;\n                background: linear-gradient(135deg, #ece9e6, #ffffff);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: flex-start;\n                padding: 20px;\n            }\n            .container {\n                width: 100%;\n                max-width: 800px;\n                background: #fff;\n                border-radius: 10px;\n                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n                overflow: hidden;\n                margin-bottom: 20px;\n            }\n            h3 {\n                margin: 0;\n                padding: 10px 20px;\n                font-size: 0.9em;\n                background: #333;\n                color: #fff;\n                border-radius: 10px 10px 0 0;\n            }\n            .video-container {\n                width: 100%;\n                background: #000;\n                position: relative;\n            }\n            video {\n                width: 100%;\n                height: auto;\n                display: block;\n            }\n            .info-container {\n                padding: 20px;\n            }\n            .info-container p {\n                margin: 10px 0;\n                color: #555;\n            }\n            .info-container p span {\n                font-weight: bold;\n                color: #000;\n            }\n        <\/style>\n    <\/head>\n    <body>\n        <div class=\"container\">\n            <h3>{{$.model.title}}<\/h3>\n            <div class=\"video-container\">\n                <video id=\"video\" src=\"{{$.model.url}}\" poster=\"{{$.model.coverUrl}}\" controls><\/video>\n            <\/div>\n        <\/div>\n        <div class=\"info-container\">\n            <p>⌚️ 时长:<span>{{$.model.durationFormat}}<\/span><\/p>\n            <p>📆 日期:<span>{{$.model.onlineTime##T|.000.*## }}<\/span><\/p>\n            <p>🎥 播放:<span>{{$.model.viewCount}}次<\/span><\/p>\n            <p>📩 收藏:<span>{{$.model.collectCount}}<\/span><\/p>\n            <p>🕵 片商:<span>{{$.model.authors}}<\/span><\/p>\n            <p>👤 上传:<span>{{$.model.uploader}}<\/span><\/p>\n            <p>🔖 标签:<span>{{$.model.categories}},{{$.model.tags}}<\/span><\/p>\n            <p>🏷 简介:<span>{{$.model.brief}}<\/span><\/p>\n        <\/div>\n        <script>\n            \/\/ 获取视频元素\n            const video = document.getElementById('video');\n            let touchStartX = 0;\n            let touchStartY = 0;\n            let touchStartTime = 0;\n            let isLongPress = false;\n\n            \/\/ 滑动快进\n            video.addEventListener('touchstart', (e) => {\n                touchStartX = e.touches[0].clientX;\n                touchStartY = e.touches[0].clientY;\n                touchStartTime = Date.now();\n                isLongPress = false;\n            });\n\n            video.addEventListener('touchmove', (e) => {\n                const deltaX = e.touches[0].clientX - touchStartX;\n                const deltaY = e.touches[0].clientY - touchStartY;\n\n                \/\/ 如果是水平滑动,且未进入长按状态\n                if (Math.abs(deltaX) > Math.abs(deltaY) && !isLongPress) {\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX \/ 50); \/\/ 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                }\n                e.preventDefault(); \/\/ 防止默认行为(如页面滚动)\n            });\n\n            \/\/ 长按快进\n            video.addEventListener('touchend', (e) => {\n                const touchEndTime = Date.now();\n                const touchDuration = touchEndTime - touchStartTime;\n\n                \/\/ 如果长按时间超过500ms,进入长按快进状态\n                if (touchDuration > 500) {\n                    isLongPress = true;\n\n                    \/\/ 在长按状态下,根据滑动距离快进\n                    const deltaX = e.changedTouches[0].clientX - touchStartX;\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX \/ 100); \/\/ 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                } else {\n                    isLongPress = false;\n                }\n            });\n        <\/script>\n    <\/body>\n    <\/html>\n`);\n        dataUrl = 'data:text\/html;base64,' + b64;\n        java['startBrowser'](dataUrl, title);\n        java['toast']('正在加载视频\\n视频加载较慢,请耐心等待');\n    }\n    '【刷新正文】播放\\n✅直链:\\n' + `{{$.model.url}}`;\n\n\t\t}else if (baseUrl.match(\/audio\/)) {\njava.getString('{$.model.url}')\n}\n<\/js>",
        "title": "",
        "webJs": ""
    },
    "ruleExplore": {
        "author": "$.authors",
        "bookList": "$.model.data||$.model",
        "bookUrl": "<js>\n if (baseUrl.match(\/novel\/)){\n'{{getUrl()}}novel\/intro?id={{$.id}}'\n}else if (baseUrl.match(\/comic\/)) {\n\t'{{getUrl()}}comic\/intro?id={{$.id}}'\n\t}else if (baseUrl.match(\/video\/)) {\n'{{getUrl()}}api\/video\/app\/video\/intro?force=false&id={{$.id}}&viewId='+new Date().getTime() + Math.round(Math.random() * (9999 - 1000) + 1000)\n\t\t}else if (baseUrl.match(\/audio\/)) {\n'{{getUrl()}}api\/audio\/app\/audio\/intro?id={{$.id}}'\n}\n<\/js>",
        "coverUrl": "$.coverUrl",
        "intro": "$.brief##原作:",
        "kind": "{{$.finished##0##连载}}\n{{$.pornRateDesc##\\((.*)\\)##$1###}}\n{{$.categories}}##1##完结",
        "lastChapter": "$.latestUpdate",
        "name": "$.title&&@put:{bid:$.id}",
        "wordCount": "$.wordCount"
    },
    "ruleSearch": {
        "author": "$.authors",
        "bookList": "<js>\njava.setContent(cache.get('urlss') );\ncache.delete('urlss');\nresult=java.getElements('$.model.data')\nresult\n<\/js>",
        "bookUrl": "<js>\nlet v = String(source.getVariable()).split(\",\");\nlet x = v[0];\n if (x==0){\n'{{getUrl()}}novel\/intro?id={{$.id}}'\n}else if (x==1) {\n\t'{{getUrl()}}comic\/intro?id={{$.id}}'\n\t}else if (x==2) {\n'{{getUrl()}}api\/video\/app\/video\/intro?force=false&id={{$.id}}&viewId='+new Date().getTime() + Math.round(Math.random() * (9999 - 1000) + 1000)\n\t\t}else if (x==3) {\n'{{getUrl()}}api\/audio\/app\/audio\/intro?id={{$.id}}'\n}\n<\/js>",
        "checkKeyWord": "",
        "coverUrl": "$.coverUrl",
        "intro": "$.brief##原作:",
        "kind": "{{$.finished##0##连载}}\n{{$.pornRateDesc##\\((.*)\\)##$1###}}\n{{$.categories}}##1##完结",
        "lastChapter": "$.latestUpdate",
        "name": "$.title&&@put:{bid:$.id}",
        "wordCount": "$.wordCount"
    },
    "ruleToc": {
        "chapterList": "<js>\n if (baseUrl.match(\/novel\/)){\n\tbook.type = 8;\n \/\/java.toast('当前为小说模式🧾'); \n var data = [];\nvar list = java.getElements(\".catalog_ul li\");\nvar n = src.match(\/catalog_ul[^\\(]+.*-n.*(\\d+)\\)\/) ? parseInt(src.match(\/catalog_ul[^\\(]+.*-n.*(\\d+)\\)\/)[1]) : 0;\nvar m = list.length;\nvar k = \/menu\/.test(list) && \/展开章节\/.test(list) ? 1 : 0;\n\/\/java.log(n+'\/'+m+'\/'+k);\nfor (i in list) {\n    if (i >= m - n - k) {break}\n    var list_i = \/img\/.test(list[i].select(\"span\")[0]) ? list[i].select(\"span\")[0] : list[i].select(\"a\");\n    data.push({\n        title: String(list_i.text()).replace(book.name, \"\").replace(\/^\\s+|\\snew\/g, \"\"),\n        link: \/img\/.test(list[i].select(\"span\")[0]) ? \"\" : `${getUrl()}${list[i].select(\"a\").attr(\"href\")}`,\n        time: \/img\/.test(list[i].select(\"span\")[0])  ? \"\" : String(list[i].select(\"span\").text()).replace(\/游客\/g,'✨').replace(\/币\/g,'💰').replace(\/new\\s\/g,''),\n        vol: \/img\/.test(list[i].select(\"span\")[0]) ? true : false,\n        vip: \/币\/.test(list[i].select(\"span\")[0]) ? true : false\n    });\n}\ndata;\n }else if (baseUrl.match(\/comic\/)) {\n\tbook.type = 64;\n \/\/java.toast('当前为漫画模式🧾'); \n var data=[]\nvar list = java.getElements(\".catalog_ul li\");\nvar n = src.match(\/catalog_ul[^\\(]+.*-n.*(\\d+)\\)\/) ? parseInt(src.match(\/catalog_ul[^\\(]+.*-n.*(\\d+)\\)\/)[1]) : 0;\nvar m = list.length;\nvar k = \/menu\/.test(list) && \/展开章节\/.test(list) ? 1 : 0;\n\/\/java.log(n+'\/'+m+'\/'+k);\nfor (i in list) {\n    if (i >= m - n - k) {break}\n    var list_i = \/img\/.test(list[i].select(\"span\")[0]) ? list[i].select(\"span\")[0] : list[i].select(\"a\");\n    data.push({\n        title: String(list_i.text()).replace(book.name, \"\").replace(\/^\\s+|\\snew\/g, \"\"),\n        link: \/img\/.test(list[i].select(\"span\")[0]) ? \"\" : `${getUrl()}${list[i].select(\"a\").attr(\"href\")}`,\n        time: \/img\/.test(list[i].select(\"span\")[0])  ? \"\" : String(list[i].select(\"span\").text()).replace(\/游客\/g,'✨').replace(\/币\/g,'💰').replace(\/new\\s\/g,''),\n        vol: \/img\/.test(list[i].select(\"span\")[0]) ? true : false,\n        vip: \/币\/.test(list[i].select(\"span\")[0]) ? true : false\n    });\n}\ndata;\n\t}else if (baseUrl.match(\/video\/)) {\n    book.type = 8;\n    \/\/java.toast('当前为视频模式🧾');\n  var data = []\n    name=java.getString('{$..title}')\n    href=`${getUrl()}api\/video\/app\/video\/intro?force=false&id=`+java.getString('{$.model.id}')+`&viewId=` + Date.now() + Math.round(Math.random() * (9999 - 1000) + 1000);\n\n data.push({\n    \ttitle:name,\n    \tlink:href\t  \t\t\n    });\n data\n  }else if (baseUrl.match(\/audio\/)) {\n    book.type = 32;\n    \/\/java.toast('当前为听书模式🧾');\n    var data = []\n    name=java.getString('{$..title}')\n    href=`${getUrl()}api\/audio\/app\/audio\/chapter?force=false&id=`+java.getString('{$..latestReadChapterId}')+`&offset=0&viewId=` + Date.now() + Math.round(Math.random() * (9999 - 1000) + 1000);\n data.push({\n    \ttitle:name,\n    \tlink:href\t  \t\t\n    });\n    \n data\n}\n <\/js>",
        "chapterName": "title",
        "chapterUrl": "link",
        "isVip": "vip",
        "isVolume": "vol",
        "updateTime": "time"
    },
    "searchUrl": "<js>\n let v = String(source.getVariable()).split(\",\");\n let x = v[0];\nlet url = getUrl();\nlet ss;\nlet uri = `${url}api\/novel\/app\/novel\/search?category=&excludeTags=&keyword=${key}&orderType=0&page=${page}&searchType=1&size=40`; \/\/默认搜索小说\n\ntry {\n\tif (x == 0){\n\turl +=\t`api\/novel\/app\/novel\/search?category=&excludeTags=&keyword=${key}&orderType=0&page=${page}&searchType=1&size=40`\n\tss = java.get(url,{\t'user-agent': ua});\n\t\t\t\t}else if (x == 1) {\nurl +=\t`api\/comic\/app\/comic\/search?keyword=${key}&orderType=1&page=${page}&searchType=1&size=40`\nss = java.get(url,{\t'user-agent': ua});\n     }else if (x == 2 ) {\nurl +=\t`api\/video\/app\/video\/search?keyword=${key}&orderType=1&page=${page}&searchType=1&size=40`\nss = java.get(url,{\t'user-agent': ua});\n\t   \t}else if (x == 3 ) {\nurl +=\t`api\/audio\/app\/audio\/search?category=&keyword={{encodeURIComponent(key)}}&orderType=0&page=${page}&searchType=1&size=42`\nss = java.get(url,{\t'user-agent': ua});\n}\njava.log(ss.ss.statusCode())\njava.log(String(Object.keys(ss)))\nlet code = ss.statusCode();\nif (code==302||code==301) {\n\turi=ss.header(\"location\");\n\t}\n\telse if (code == 200) {\n\tcache.put('urlss', ss.body());\n\t\t}else if (code == 502) {\n\t\tjava.toast('\\n'+'👻ip被拉黑了👻')\n}\n\t}catch(err) {\n\t\tjava.log('💔访问出错💔')\n\t\tjava.log(String(err))\n\t\tjava.toast('\\n💔访问出错,更换域名💔')\n\t}\n\turi;\n<\/js>",
    "variableComment": "设置模式和域名\n!!!建议在登录功能中设置!!!\n\n模式选择:\n小说:0\n漫画:1\n视频:2\n听书:3\n\n域名:0~5\n\n填入数字,用英文逗号隔开",
    "weight": 0
}
广告