🔍 找书啦·求书互助

https://www.zhaoshu.la

laizhiyu (6509)18小时前

这是个找书网站,貌似是菠萝猫出的。需要菠萝猫书源配合,菠萝猫书源须写书籍URL正则。打开已解决,详情页黄色按钮会调起菠萝猫书源书籍。

做完才发现它一个月才能发一次求书贴,基本没啥用。但还是发出来吧。

二维码导入
{
    "bookSourceComment": "须菠萝猫书源配合\n找书啦 zhaoshu.la —— 在线求书互助站\n· 发现:最新已解决 \/ 最新未解决 \/ 全部求书 \/ 🙋我的求书(每页10条,page 翻页)\n· 搜索:\/search\/{关键词}\/all\/,匹配求书帖标题+描述\n· 详情:\/request\/{id}.html\n· ★简介用官方 <useweb> 浏览器渲染:简介里直接生成橙色按钮,点一下就走 legado:\/\/import\/addToBookshelf 深链 → 按各书源详情页正则匹配 → 直接打开那本书的详情页\n· 目录:把「求书原帖 + 每一条书友回复」映射成虚拟章节;标题带 🔗 表示该回复含书源网址,带 ✅ 表示已被采纳;回复里每条网址再生成「🔗 一键开书」章节(点它直接调起阅读)\n· 正文:展示该条回复全文 + 提取出的网址 + 复制网址跳转提示\n· 登录界面可登录 \/ 检查登录状态 \/ 退出 \/ 发布求书帖(书名2~200字,描述≥10字;站点无删除功能)\n· 站点必须使用手机端 UA,桌面 UA 会被 GoEdge WAF 拦截(302 到 \/WAF\/VERIFY\/CAPTCHA)\n· 阅读全部匿名可访问,无需登录;登录仅用于发帖\/回复\n· 服务器响应较慢(单页约 6~7 秒),已放宽 timeout\n",
    "bookSourceGroup": "AI书源",
    "bookSourceName": "🔍 找书啦·求书互助",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/www.zhaoshu.la",
    "bookUrlPattern": "https?:\/\/(?:www\\.)?zhaoshu\\.la\/request\/\\d+\\.html",
    "customButton": false,
    "customOrder": 6,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "🔥 最新已解决::https:\/\/www.zhaoshu.la\/solved\/{{page>1?'page\/'+page:''}}&&⏳ 最新未解决::https:\/\/www.zhaoshu.la\/unsolved\/{{page>1?'page\/'+page:''}}&&📚 全部求书::https:\/\/www.zhaoshu.la\/all\/{{page>1?'page\/'+page:''}}&&🙋 我的求书::https:\/\/www.zhaoshu.la\/user\/requests.php",
    "header": "{\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 14; Pixel 8) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/126.0.0.0 Mobile Safari\/537.36\", \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\"}",
    "lastUpdateTime": "1788781557116",
    "loginCheckJs": "(function(){\n  try {\n    \/* 未登录访问「我的求书」时站点 302 → \/auth\/login.php,\n       因此判据是:最终 URL 是登录页(而不是原来写的 \/user\/requests.php,\n       那个 URL 在重定向后永远不会出现,提示从来不会弹)。 *\/\n    var u = String(result.url() || '');\n    if (u.indexOf('\/auth\/login.php') >= 0) {\n      java.toast('⚠️ 查看「我的求书」需要先登录:书源管理 → 本来源 → 登录');\n    }\n  } catch (e) {}\n  return result;\n})()\n",
    "loginUi": "[{\"name\": \"邮箱\", \"type\": \"text\", \"hint\": \"找书啦登录邮箱(浏览找书无需登录)\"}, {\"name\": \"密码\", \"type\": \"password\", \"hint\": \"登录密码\"}, {\"name\": \"① 登录\", \"type\": \"button\", \"action\": \"login()\"}, {\"name\": \"② 检查登录状态\", \"type\": \"button\", \"action\": \"checkLogin()\"}, {\"name\": \"③ 退出登录\", \"type\": \"button\", \"action\": \"logout()\"}, {\"name\": \"书名\", \"type\": \"text\", \"hint\": \"发布求书:书名(2~200字)\"}, {\"name\": \"描述\", \"type\": \"text\", \"hint\": \"发布求书:线索描述(≥10字,作者\/平台\/字数\/渠道等)\"}, {\"name\": \"④ 发布求书帖\", \"type\": \"button\", \"action\": \"publishRequest()\"}, {\"name\": \"⑤ 我的求书入口\", \"type\": \"button\", \"action\": \"openMyRequests()\"}, {\"name\": \"📖 使用说明\", \"type\": \"button\", \"action\": \"showHelp()\"}]",
    "loginUrl": "function zsHomeHtml(){\n    try { return String(java.ajax('https:\/\/www.zhaoshu.la\/')); } catch(e) { return ''; }\n}\nfunction zsLogged(html){\n    \/\/ 判据:页头「退出登录 \/auth\/logout.php」链接只在已登录时渲染。\n    \/\/ 不能用 \/request\/create.php —— 首页导航栏常年挂这个入口占位;\n    \/\/ 也不能用「登录你的找书啦账号」反向判断 —— 这句是登录框副标题,登录页必含。\n    return String(html).indexOf('\/auth\/logout.php') >= 0;\n}\nfunction zsFlashMsg(html){\n    var m = String(html).match(\/--danger-bg[^>]*>([\\s\\S]*?)<\\\/div>\/);\n    if (!m) return '';\n    return String(m[1]).replace(\/<[^>]+>\/g, '').replace(\/\\s+\/g, '');\n}\n\/* 取指定页面的 csrf_token。页面自身渲染失败\/被WAF时才返回空串;\n   旧版曾把「登录你的找书啦账号」当未登录哨兵——实际上它是登录框副标题,\n   登录页本身就含这句话,导致 token 永远被清空(260907 修复)。 *\/\nfunction zsCsrf(path){\n    var h = '';\n    try { h = String(java.ajax('https:\/\/www.zhaoshu.la' + path)); } catch(e) { return ''; }\n    var m = h.match(\/name=\"csrf_token\" value=\"([0-9a-f]+)\"\/);\n    return m ? m[1] : '';\n}\nfunction zsToken(){ return zsCsrf('\/auth\/login.php'); }\n\/* 表单 POST,走 java.ajax 的 URL 选项式以复用 CookieJar 与书源 UA *\/\nfunction zsPost(path, formObj){\n    var pairs = [];\n    for (var k in formObj) pairs.push(encodeURIComponent(k) + '=' + encodeURIComponent(formObj[k]));\n    var opt = { method: 'POST', body: pairs.join('&'),\n                headers: { 'Content-Type': 'application\/x-www-form-urlencoded' } };\n    return String(java.ajax('https:\/\/www.zhaoshu.la' + path + ',' + JSON.stringify(opt)));\n}\nfunction zsGet(path){\n    try { return String(java.ajax('https:\/\/www.zhaoshu.la' + path)); } catch(e) { return ''; }\n}\n\/* 站点对「未登录时的POST」一律 302 → 首页(登录成功也 302 → 首页),\n   POST 响应体被重定向吞掉 flash(如\"邮箱或密码错误\")。\n   会话是否有效用 GET 首页看「退出登录」链接复核。 *\/\nfunction zsSessionValid(){\n    return zsLogged(zsHomeHtml());\n}\nfunction login(){\n    var em = '', pw = '';\n    try {\n        em = String(result.get('邮箱') || '').trim();\n        pw = String(result.get('密码') || '');\n    } catch (e) { em = ''; pw = ''; }\n    if (!em || !pw) { java.toast('⚠️ 请先填写邮箱和密码'); return; }\n    java.toast('⏳ 正在登录找书啦…');\n    try {\n        var tk = zsToken();\n        if (!tk) { java.toast('❌ 未取得CSRF令牌,站点可能触发WAF,请稍后再试'); return; }\n        var res = zsPost('\/auth\/login.php', { csrf_token: tk, email: em, password: pw });\n        if (res.indexOf('GOEDGE_WAF') >= 0) {\n            java.toast('❌ 触发WAF人机验证,请先用浏览器打开网站过一次验证');\n            return;\n        }\n        \/* 会话复核:登录成败不能只看 POST 响应(可能被 302 重定向改写),\n           重新 GET 首页看「退出登录」链接是否出现 *\/\n        if (zsSessionValid()) {\n            java.toast('✅ 登录成功:' + em + ' 现在可以发布求书帖了');\n        } else {\n            var fm = zsFlashMsg(res);\n            if (!fm) {\n                \/* flash 可能被 302 吞掉,补一发登录页 GET 兜底 *\/\n                fm = zsFlashMsg(String(java.ajax('https:\/\/www.zhaoshu.la\/auth\/login.php')));\n            }\n            java.toast('❌ 登录失败:' + (fm || '邮箱或密码不正确'));\n        }\n    } catch (e2) {\n        java.toast('❌ 登录异常:' + e2.message);\n    }\n}\n\/* 发布求书帖:POST \/request\/create.php  csrf_token + book_name + description *\/\nfunction publishRequest(){\n    var nm = '', ds = '';\n    try {\n        nm = String(result.get('书名') || '').trim();\n        ds = String(result.get('描述') || '').trim();\n    } catch (e) { nm = ''; ds = ''; }\n    if (!nm || nm.length < 2)  { java.toast('⚠️ 书名至少 2 个字'); return; }\n    if (nm.length > 200)       { java.toast('⚠️ 书名不能超过 200 字'); return; }\n    if (!ds || ds.length < 10) { java.toast('⚠️ 描述至少 10 个字,线索越详细越容易被找到'); return; }\n    java.toast('⏳ 正在发布求书帖…');\n    try {\n        \/* 260907实测:已登录但处于发帖限制时,create.php 会静默 302 回首页(无表单无提示),\n           必须先判页面形态再决定提示,否则会把\"限制中\"误报成\"未登录\" *\/\n        var cp = zsGet('\/request\/create.php');\n        if (cp.indexOf('name=\"book_name\"') < 0) {\n            if (zsLogged(cp)) {\n                java.toast('❌ 站点暂不接受发布:可能处于发帖冷却期(发帖后一段时间内不能再发)或账号受限,请稍后再试');\n            } else {\n                java.toast('❌ 未登录无法发布:请先填邮箱密码点「① 登录」');\n            }\n            return;\n        }\n        var tk = (cp.match(\/name=\"csrf_token\" value=\"([0-9a-f]+)\"\/) || [])[1] || '';\n        if (!tk) { java.toast('❌ 未取得CSRF令牌,请稍后再试'); return; }\n        if (!zsSessionValid()) { java.toast('❌ 登录已失效,请重新点「① 登录」'); return; }\n        var res = zsPost('\/request\/create.php', { csrf_token: tk, book_name: nm, description: ds });\n        if (res.indexOf('GOEDGE_WAF') >= 0) {\n            java.toast('❌ 触发WAF人机验证,请先用浏览器打开网站过一次验证');\n            return;\n        }\n        var cid = res.match(\/canonical\" href=\"https?:\\\/\\\/[^\\\/]+\\\/request\\\/(\\d+)\\.html\"\/);\n        if (res.indexOf('发布成功') >= 0 || (cid && res.indexOf('request-book-name') >= 0)) {\n            java.longToast('✅ 发布成功' + (cid ? (':求书帖 #' + cid[1] + '《' + nm + '》') : '')\n                + '\\n可在发现页「🙋 我的求书」查看。'\n                + '\\n注意:站点不提供删除功能,帖子会长期公开。');\n        } else {\n            java.toast('❌ 发布失败:' + (zsFlashMsg(res) || '请确认已登录且描述不少于10字'));\n        }\n    } catch (e3) {\n        java.toast('❌ 发布异常:' + e3.message);\n    }\n}\nfunction openMyRequests(){\n    java.toast('🙋 我的求书:回到书源「发现」页,点最后一个分类「🙋 我的求书」即可');\n}\nfunction checkLogin(){\n    java.toast('⏳ 正在检查登录状态…');\n    var h = zsHomeHtml();\n    if (!h) { java.toast('❌ 无法访问网站,请检查网络'); return; }\n    if (h.indexOf('GOEDGE_WAF') >= 0) { java.toast('❌ 触发WAF人机验证,请稍后重试'); return; }\n    if (zsLogged(h)) {\n        var m = h.match(\/user-name\">([^<]+)<\/);\n        var n = h.match(\/user-title[^>]*>([^<]*)<\/);\n        java.toast('✅ 已登录:' + (m ? m[1] : '未知用户') + (n ? '(' + n[1].trim() + ')' : '') + ' 可发布\/回复求书帖');\n    } else {\n        java.toast('⚠️ 未登录(浏览找书无需登录,发帖\/回复才需要)');\n    }\n}\nfunction logout(){\n    try {\n        try { source.removeLoginInfo(); } catch(e0) {}\n        cookie.removeCookie('https:\/\/www.zhaoshu.la\/');\n        try { source.removeLoginHeader(); } catch(e1) {}\n        var still = zsLogged(zsHomeHtml());\n        java.toast(still ? '⚠️ 已清除本站Cookie,但站点仍判定为登录中,重启阅读后生效'\n                         : '🚪 已退出登录(本站Cookie已清除)');\n    } catch (e) { java.toast('❌ 退出失败:' + e.message); }\n}\nfunction showHelp(){\n    var t = '【找书啦 使用说明】' + String.fromCharCode(10)\n          + '1. 发现页:最新已解决 \/ 最新未解决 \/ 全部求书 \/ 我的求书' + String.fromCharCode(10)\n          + '2. 搜索框输入书名,匹配的是求书帖标题与描述' + String.fromCharCode(10)\n          + '3. 点书名进详情页,书友回复里带网址即为找到的书源' + String.fromCharCode(10)\n          + '4. 详情页简介是网页渲染的,直接点橙色「📖 打开这本书」按钮即可调起该书详情页' + String.fromCharCode(10)\n          + '5. 目录里每条网址也会生成「🔗 一键开书」章节,作为按钮之外的双保险' + String.fromCharCode(10)\n          + '6. 发布求书:先点「① 登录」,再填「书名」「描述」两点,点「④ 发布求书帖」' + String.fromCharCode(10)\n          + '   书名字数 2~200,描述至少 10 字;站点无删除功能,请谨慎发布' + String.fromCharCode(10)\n          + '7. 发布后点「发现 → 🙋 我的求书」查看自己的帖子(未登录时该页为空)' + String.fromCharCode(10)\n          + '8. 浏览找书无需登录;只有发帖\/回复才需要登录' + String.fromCharCode(10)\n          + '9. 本站必须使用手机UA,电脑UA会触发GoEdge WAF人机验证';\n    try { java.longToast(t); } catch (e) { try { java.toast(t); } catch (e2) { java.copyText(t); } }\n}",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "@js:(function(){var d=(result&&typeof result.select==='function')?result:Packages.org.jsoup.Jsoup.parse(String(result));var e=d.select('div.detail-user-name a').first();return e?e.text().trim():'';})()",
        "intro": "@js:(function(){var Jsoup=Packages.org.jsoup.Jsoup;var d=(result&&typeof result.select==='function')?result:Jsoup.parse(String(result));var SOH=String.fromCharCode(1);function esc(s){return String(s).replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;');}function T(el){if(!el)return '';var s=String(el.html()).replace(\/<br\\s*\\\/?>\/gi,SOH);var ps=String(Jsoup.parseBodyFragment(s).text()).split(SOH);for(var i=0;i<ps.length;i++)ps[i]=ps[i].trim();return ps.join('<br>');}function host(u){var m=String(u).match(\/^https?:\\\/\\\/([^\\\/]+)\/i);return m?m[1].replace(\/^www\\.\/,''):String(u).substring(0,26);}var v='';try{v=String(source.getVariable()||'').trim();}catch(e){v='';}var OPT=v?',{\"origin\":\"'+v+'\"}':'';function deep(u){return 'legado:\/\/import\/addToBookshelf?src='+encodeURIComponent(String(u)+OPT);}var h1=d.select('h1.request-book-name').first();var title='';if(h1){var c=h1.clone(),bs=c.select('span.badge');for(var y=0;y<bs.size();y++)bs.get(y).remove();title=String(c.text()).replace(\/^[\\s📖]+\/,'').trim();}var bd=d.select('h1.request-book-name span.badge').first();var us=d.select('div.detail-user-name a').first();var mt=d.select('div.detail-user-meta').first();var rs=d.select('div.reply-item');var urls=[],seen={};for(var a=0;a<rs.size();a++){var ls=rs.get(a).select('a[href]');for(var b=0;b<ls.size();b++){var hu=String(ls.get(b).attr('href'));if(hu.indexOf('http')!==0||hu.indexOf('zhaoshu.la')>=0||seen[hu]){continue;}seen[hu]=1;var au=rs.get(a).select('div.reply-user-name-row a').first();urls.push({u:hu,f:au?String(au.text()).trim():'书友',ac:rs.get(a).hasClass('accepted')?1:0});}}urls.sort(function(x,y){return y.ac-x.ac;});var H='<useweb><html><head><meta charset=\"utf-8\">';H+='<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">';H+='<style>body{margin:0;padding:10px 12px 14px;background:#f5f6f8;color:#1c1c1e;font-family:sans-serif;font-size:14.5px;line-height:1.6}';H+='.hd{font-size:17px;font-weight:700;margin:0 0 4px}.mt{color:#6b7280;font-size:12.5px;margin:0 0 10px}';H+='.cd{background:#fff;border-radius:9px;padding:9px 11px;margin:0 0 9px}.cd b{color:#ff9900;font-size:12.5px;display:block;margin-bottom:3px}';H+='.tip{background:#fff7e6;border:1px solid #ffd591;border-radius:9px;padding:8px 11px;margin:0 0 9px;color:#874d00;font-size:13px}';H+='a.bt{display:block;background:#ff9900;color:#fff;border-radius:9px;padding:10px 12px;margin:0 0 8px;text-decoration:none;font-size:15px;font-weight:700}';H+='a.bt:active{background:#e67e00}a.bt .ok{float:right;font-weight:400;font-size:12.5px}';H+='.uu{font-size:11.5px;color:#6b7280;word-break:break-all;margin:0 0 9px;padding:0 2px}.rp{border-left:3px solid #ff9900;padding-left:8px;margin:0 0 9px}';H+='.rh{font-size:12.5px;color:#374151}.no{background:#eef0f3;border-radius:9px;padding:12px;text-align:center;color:#6b7280}';H+='<\/style><\/head><body>';H+='<div class=\"hd\">'+esc(title)+'<\/div>';H+='<div class=\"mt\">'+esc(bd?String(bd.text()).trim():'')+' · 求书人 '+esc(us?String(us.text()).trim():'匿名')+' · '+esc(mt?String(mt.text()).trim():'')+' · 共 '+rs.size()+' 条回复<\/div>';H+='<div class=\"cd\"><b>求书描述<\/b>'+(T(d.select('div.detail-description').first())||'(发布者未填写)')+'<\/div>';if(urls.length){H+='<div class=\"tip\">👇 点下面的按钮,阅读会直接打开这本书的详情页(需已装能匹配该书源网址的书源)<\/div>';for(var k=0;k<urls.length;k++){var it=urls[k];H+='<a class=\"bt\" href=\"'+esc(deep(it.u))+'\">📖 打开这本书 · '+esc(host(it.u))+(it.ac?'<span class=\"ok\">✅已采纳<\/span>':'')+'<\/a>';H+='<div class=\"uu\">'+(k+1)+'. '+esc(it.u)+' (来自 '+esc(it.f)+',长按可复制)<\/div>';} }else{H+='<div class=\"no\">这条求书帖的回复里还没有书源网址<\/div>';}H+='<div class=\"cd\"><b>全部回复 '+rs.size()+' 条<\/b>';for(var q=0;q<rs.size();q++){var r=rs.get(q);var ru=r.select('div.reply-user-name-row a').first();H+='<div class=\"rp\"><div class=\"rh\">💬 回复'+(q+1)+' · '+esc(ru?String(ru.text()).trim():'书友')+(r.hasClass('accepted')?' · ✅已采纳':'')+'<\/div>'+(T(r.select('div.reply-text').first())||'(空)')+'<\/div>';}H+='<\/div>';if(v)H+='<div class=\"mt\">已指定书源:'+esc(v)+'<\/div>';H+='<\/body><\/html><\/useweb>';return H;})()",
        "kind": "@js:(function(){var d=(result&&typeof result.select==='function')?result:Packages.org.jsoup.Jsoup.parse(String(result));var a=[],b=d.select('h1.request-book-name span.badge').first(),c=d.select('div.reply-section h2 span.count').first(),m=d.select('div.detail-user-meta').first();if(b)a.push(b.text().trim());if(c)a.push('回复'+String(c.text()).replace(\/[()()]\/g,'')+'条');if(m)a.push(m.text().trim());return a.join(' · ');})()",
        "name": "@js:(function(){var d=(result&&typeof result.select==='function')?result:Packages.org.jsoup.Jsoup.parse(String(result));var e=d.select('h1.request-book-name').first();if(!e)return '';return (function(){var c=e.clone(),bs=c.select('span.badge');for(var z=0;z<bs.size();z++)bs.get(z).remove();return String(c.text());})().replace(\/^[\\s📖]+\/,'').trim();})()"
    },
    "ruleContent": {
        "content": "@js:(function(){var Jsoup=Packages.org.jsoup.Jsoup;var d=(result&&typeof result.select==='function')?result:Jsoup.parse(String(result));var NL=String.fromCharCode(10),SEP='──────────────────────',SOH=String.fromCharCode(1);function T(el){if(!el)return '';var s=String(el.html()).replace(\/<br\\s*\\\/?>\/gi,SOH);return (function(){var ps=String(Jsoup.parseBodyFragment(s).text()).split(SOH);for(var q0=0;q0<ps.length;q0++)ps[q0]=ps[q0].trim();return ps.join(NL);})().trim();}function LK(el){var a=[],ls=el.select('a[href]');for(var i=0;i<ls.size();i++){var h=ls.get(i).attr('href');if(h.indexOf('http')===0)a.push(h);}return a;}var rid=String(baseUrl||'').replace(\/^[\\s\\S]*#reply-\/,'');var h1=d.select('h1.request-book-name').first();var title=h1?(function(){var c=h1.clone(),bs=c.select('span.badge');for(var z=0;z<bs.size();z++)bs.get(z).remove();return String(c.text());})().replace(\/^[\\s📖]+\/,'').trim():'';var bd=d.select('h1.request-book-name span.badge').first();var us=d.select('div.detail-user-name a').first();var mt=d.select('div.detail-user-meta').first();if(rid.indexOf('open-')===0){var zraw='';try{zraw=decodeURIComponent(rid.substring(5));}catch(e9){zraw=rid.substring(5);}var zvv='';try{zvv=String(source.getVariable()||'').trim();}catch(e10){zvv='';}var zoo=zvv?',{\"origin\":\"'+zvv+'\"}':'';var zok='';try{java.openUrl('legado:\/\/import\/addToBookshelf?src='+encodeURIComponent(zraw+zoo));zok='✅ 已调起阅读,正在打开该书详情页';}catch(e11){zok='⚠️ 调起失败:'+e11.message;}var zbb='🔗 一键开书'+NL+NL+zraw+NL+NL+zok+NL;if(zvv)zbb=zbb+NL+'(已指定书源:'+zvv+')'+NL;zbb=zbb+NL+'也可直接在书籍详情页的简介里点「📖 打开这本书」按钮。';return zbb;}var rs=d.select('div.reply-item');var head='📖《'+title+'》'+NL+'🔖 '+(bd?bd.text().trim():'')+' 👤 求书人:'+(us?us.text().trim():'匿名')+' 🕐 '+(mt?mt.text().trim():'')+NL+'💬 共 '+rs.size()+' 条回复';var TIP=NL+SEP+NL+'💡 返回书籍详情页,简介里就有可点击的「📖 打开这本书」按钮;'+NL+'   目录里的「🔗 一键开书」章节同样可直接调起阅读打开该书。';if(rid==='intro'||rid===''){var out=head+NL+SEP+NL+'【求书描述】'+NL+(T(d.select('div.detail-description').first())||'(发布者未填写描述)')+NL+SEP+NL+'【全部回复】'+NL;var urls=[];for(var i=0;i<rs.size();i++){var r=rs.get(i);var u=r.select('div.reply-user-name-row a').first();var acc=r.hasClass('accepted')?'✅已采纳':'未采纳';out+=NL+'💬 回复'+(i+1)+'|'+(u?u.text().trim():'书友')+'('+acc+')'+NL+(T(r.select('div.reply-text').first())||'(空)')+NL;var ls=LK(r);for(var j=0;j<ls.length;j++){out+=' 🔗 '+ls[j]+NL;urls.push(ls[j]);}}if(urls.length){out+=NL+SEP+NL+'【🔗 书友找到的书源地址 共'+urls.length+'条】'+NL;for(var k=0;k<urls.length;k++)out+=(k+1)+'. '+urls[k]+NL;}else out+=NL+'(回复中暂未发现外部书源网址)';return out+TIP;}var target=null,idx=0;for(var n=0;n<rs.size();n++){var bb=rs.get(n).select('button[data-type=reply]').first();var idd=bb?bb.attr('data-id'):('n'+(n+1));if(String(idd)===rid){target=rs.get(n);idx=n+1;break;}}if(!target&&rs.size()>0){var pi=parseInt(rid,10);if(pi>0&&pi<=rs.size()){target=rs.get(pi-1);idx=pi;}else{target=rs.get(0);idx=1;}}if(!target)return head+NL+SEP+NL+'(该求书帖暂无回复内容)'+TIP;var u2=target.select('div.reply-user-name-row a').first();var ttl=target.select('div.reply-user-name-row span.user-title').first();var adm=target.select('span.admin-badge').first();var ft=target.select('div.reply-footer span').first();var lk=target.select('span.like-count').first();var out=head+NL+SEP+NL;out+='💬 回复 '+idx+'|'+(u2?u2.text().trim():'书友');if(ttl)out+='('+ttl.text().trim()+(adm?'·'+adm.text().trim():'')+')';out+=NL;var info=[];if(ft)info.push('🕐 '+ft.text().trim());if(lk)info.push('❤️ '+lk.text().trim()+' 赞');if(target.hasClass('accepted'))info.push('✅ 已被采纳');if(info.length)out+=info.join(' ')+NL;out+=SEP+NL+(T(target.select('div.reply-text').first())||'(空)')+NL;var ls2=LK(target);if(ls2.length){out+=NL+SEP+NL+'【🔗 本条回复中的书源地址】'+NL;for(var q=0;q<ls2.length;q++)out+=(q+1)+'. '+ls2[q]+NL;}return out+TIP;})()"
    },
    "ruleExplore": {
        "author": "@js:(function(){var e=result.select('div.request-user-name a').first();if(e){var t=String(e.text()).trim();if(t)return t;}return '我';})()",
        "bookList": "class.request-item",
        "bookUrl": "@js:(function(){var e=result.select('h2.request-book-name a').first();return e?e.attr('href'):'';})()",
        "intro": "@js:(function(){var p=result.select('p.request-description').first(),b=result.select('span.badge').first();var t=p?p.text().trim():'',s=b?b.text().trim():'',tip='';if(s.indexOf('已解决')>=0)tip='  ➜ 点击书名进详情页,简介里有可直接点击的开书按钮';else if(s.indexOf('未解决')>=0)tip='  ➜ 点击书名进详情页查看求书线索';return (t||'(发布者未填写补充描述)')+tip;})()",
        "kind": "@js:(function(){var a=[],b=result.select('span.badge').first(),m=result.select('div.request-meta').first(),t='';if(b)a.push(String(b.text()).trim());if(m)t=String(m.text()).trim();if(!t){var all=result.select('div.request-actions .action-btn');for(var i=all.size()-1;i>=0;i--){var x=String(all.get(i).text()).replace(\/\\s+\/g,' ').trim();if(\/(刚刚|秒|分钟|小时|天前|天前|周|月|年|\\d{1,2}月\\d{1,2}日)\/.test(x)){t=x;break;}}}if(t)a.push(t);return a.join(' · ');})()",
        "lastChapter": "@js:(function(){var a=result.select('div.request-actions a.action-btn').first();return a?a.text().trim():'';})()",
        "name": "@js:(function(){var e=result.select('h2.request-book-name a').first();return e?e.text().trim():'';})()"
    },
    "ruleSearch": {
        "author": "@js:(function(){var e=result.select('div.request-user-name a').first();if(e){var t=String(e.text()).trim();if(t)return t;}return '我';})()",
        "bookList": "class.request-item",
        "bookUrl": "@js:(function(){var e=result.select('h2.request-book-name a').first();return e?e.attr('href'):'';})()",
        "checkKeyWord": "我的",
        "intro": "@js:(function(){var p=result.select('p.request-description').first(),b=result.select('span.badge').first();var t=p?p.text().trim():'',s=b?b.text().trim():'',tip='';if(s.indexOf('已解决')>=0)tip='  ➜ 点击书名进详情页,简介里有可直接点击的开书按钮';else if(s.indexOf('未解决')>=0)tip='  ➜ 点击书名进详情页查看求书线索';return (t||'(发布者未填写补充描述)')+tip;})()",
        "kind": "@js:(function(){var a=[],b=result.select('span.badge').first(),m=result.select('div.request-meta').first(),t='';if(b)a.push(String(b.text()).trim());if(m)t=String(m.text()).trim();if(!t){var all=result.select('div.request-actions .action-btn');for(var i=all.size()-1;i>=0;i--){var x=String(all.get(i).text()).replace(\/\\s+\/g,' ').trim();if(\/(刚刚|秒|分钟|小时|天前|天前|周|月|年|\\d{1,2}月\\d{1,2}日)\/.test(x)){t=x;break;}}}if(t)a.push(t);return a.join(' · ');})()",
        "lastChapter": "@js:(function(){var a=result.select('div.request-actions a.action-btn').first();return a?a.text().trim():'';})()",
        "name": "@js:(function(){var e=result.select('h2.request-book-name a').first();return e?e.text().trim():'';})()"
    },
    "ruleToc": {
        "chapterList": "@js:(function(){var Jsoup=Packages.org.jsoup.Jsoup;var d=(result&&typeof result.select==='function')?result:Jsoup.parse(String(result));var out=new Packages.org.jsoup.select.Elements();var h1=d.select('h1.request-book-name').first();var title=h1?(function(){var c=h1.clone(),bs=c.select('span.badge');for(var z=0;z<bs.size();z++)bs.get(z).remove();return String(c.text());})().replace(\/^[\\s📖]+\/,'').trim():'求书原帖';var box=Jsoup.parseBodyFragment('<div class=\"zs-intro\" data-rid=\"intro\" data-no=\"0\"><\/div>').body().child(0);box.text('📋 求书原帖|'+title);out.add(box);var rs=d.select('div.reply-item');for(var i=0;i<rs.size();i++){var r=rs.get(i);var b=r.select('button[data-type=reply]').first();r.attr('data-rid',b?b.attr('data-id'):('n'+(i+1)));r.attr('data-no',String(i+1));out.add(r);var gl=r.select('a[href]');var got={};for(var j=0;j<gl.size();j++){var hu=String(gl.get(j).attr('href'));if(hu.indexOf('http')!==0||hu.indexOf('zhaoshu.la')>=0||got[hu]){continue;}got[hu]=1;var op=Jsoup.parseBodyFragment('<div class=\"zs-open\"><\/div>').body().child(0);op.attr('data-rid','open-'+encodeURIComponent(hu));op.attr('data-no',String(i+1));var zh=hu.substring(hu.indexOf('\/\/')+2).split('\/')[0].replace(\/^www\\.\/,'');op.text('🔗 一键开书 · 回复'+(i+1)+' · '+zh);out.add(op);}}return out;})()",
        "chapterName": "@js:(function(){var e=result;if(e.hasClass('zs-intro')||e.hasClass('zs-open'))return e.text();var no=e.attr('data-no');var u=e.select('div.reply-user-name-row a').first();var nm=u?u.text().trim():'书友';var t=e.select('div.reply-text').first();var raw=String(t?t.text():'');var lk=raw.indexOf('http')>=0?' 🔗':'';var tx=raw.replace(\/https?:\\\/\\\/\\S+\/g,'').replace(\/\\s+\/g,' ').trim();var ac=e.hasClass('accepted')?' ✅':'';var br=tx.length>22?tx.substring(0,22)+'…':tx;return '💬 回复'+no+'|'+nm+lk+ac+(br?':'+br:'');})()",
        "chapterUrl": "@js:(function(){var b=baseUrl||'';if(b.indexOf('http')!==0){b=(book&&book.bookUrl)?book.bookUrl:'';}return b+'#reply-'+result.attr('data-rid');})()"
    },
    "searchUrl": "https:\/\/www.zhaoshu.la\/search\/{{java.encodeURI(key)}}\/all\/{{page>1?'page\/'+page:''}}",
    "variableComment": "填书源网址(bookSourceUrl,如 rrssk聚合)可强制指定书源;留空自动匹配。登录界面可①登录\/④发布求书帖\/🙋我的求书",
    "weight": 0
}
广告