159txt小说(多线路)

159txt小说

laizhiyu (6509)5天前

测试软件:sigma,legado-team
二维码导入
{
    "bookSourceComment": "\/\/ 159txt 多线路书源:m.159txt.com \/ m.34kanshu.com \/ m.43kanshu.com\n\/\/ ★ 发现页顶部「域名」下拉切换线路(rrssk 聚合模式),切换后自动清发现缓存\n\/\/ 搜索走 sososhu.com 网关:需登录(每日10次),登录界面可登录\/检查登录态\/查剩余额度\/签到\n\/\/ 目录修复:站点每5章会有1章链接id重复前一条,jsLib 用 gap\/2 算法自动修正(1658章实测99.7%)\n\/\/ UA 必须是移动端,桌面UA会被WAF拦截\n\/\/ v20: loginUi select action 改 result[name](loginUi 上下文 bindings 无 infoMap,用 infoMap 会直接抛错=登录界面切线路完全无反应);v19: exploreUrl 改纯文本JSON+{{}}模板(域名动态求值,彻底绕开 kinds 缓存);v18: T9_setvar 改走 java.putVariable(ExploreAdapter.evalButtonClick 不注入 source 全局,原写法静默失效=切换无效的真根因);v17: 入口URL带 host 指纹;切域名后若入口未变,退出发现页再进(App 的 ExploreAdapter.sourceKinds 进程级缓存规则侧清不到)",
    "bookSourceGroup": "AI",
    "bookSourceName": "159txt小说(多线路)",
    "bookSourceType": 0,
    "bookSourceUrl": "159txt小说",
    "bookUrlPattern": "^https?:\/\/(?:m[.])?(?:159txt|34kanshu|43kanshu)[.]com\/\\d+(\/\\d+)*\/?",
    "customButton": false,
    "customOrder": 8,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "<js>\n(function(){\n  var H = T9_HOST.call(this);\n  var P = T9_base();\n  var res = [];\n  res.push({ title: '域名', url: '', type: 'select',\n             chars: T9_HOSTS, default: H, viewName: \"'域名'\",\n             action: \"var _v=infoMap['域名'];if(!_v||_v=='null')_v='m.159txt.com';T9_SET('server', _v);java.refreshExplore();T9_T(java,'已切到: '+_v)\",\n             style: { layout_flexGrow: 1, layout_flexBasisPercent: 1 } });\n  res.push({ title: '当前网址', url: '', type: 'button',\n             viewName: \"'线路: ' + (function(){try{return T9_HOST.call(this);}catch(e){return 'm.159txt.com';}})()\",\n             action: \"java.toast('当前网址: '+T9_base())\",\n             style: { layout_flexGrow: 1, layout_flexBasisPercent: 1, layout_justifySelf: 'flex_start' } });\n  for (var i = 0; i < T9_CATS.length; i++)\n    res.push({ title: T9_CATS[i][0], url: P + '\/fenlei\/' + T9_CATS[i][1] + '\/{{page}}\/', style: { layout_flexGrow: 1, layout_flexBasisPercent: 0.32 } });\n  for (var i = 0; i < T9_QBC.length; i++)\n    res.push({ title: T9_QBC[i][0], url: P + '\/quanben\/fenlei\/' + T9_QBC[i][1] + '\/{{page}}\/', style: { layout_flexGrow: 1, layout_flexBasisPercent: 0.32 } });\n  for (var i = 0; i < T9_RANKS.length; i++)\n    res.push({ title: T9_RANKS[i][0], url: P + '\/rank\/' + T9_RANKS[i][1] + '\/', style: { layout_flexGrow: 1, layout_flexBasisPercent: 0.32 } });\n  return JSON.stringify(res);\n})()\n<\/js>",
    "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\", \"Referer\": \"https:\/\/m.159txt.com\/\"}",
    "jsLib": "var T9_UA = \"Mozilla\/5.0 (Linux; Android 14; Pixel 8) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/126.0.0.0 Mobile Safari\/537.36\";\nvar T9_HOSTS = [\"m.159txt.com\", \"m.34kanshu.com\", \"m.43kanshu.com\"];\nvar T9_DEFHOST = \"m.159txt.com\";\nvar T9_SOSO = \"https:\/\/www.sososhu.com\/\";\nvar T9_CATS = [[\"玄幻\",1],[\"奇幻\",2],[\"武侠\",3],[\"仙侠\",4],[\"都市\",5],[\"军事\",6],[\"历史\",7],[\"游戏\",8],[\"竞技\",9],[\"科幻\",10],[\"悬疑\",11],[\"灵异\",12],[\"其他\",13],[\"古代言情\",14],[\"仙侠奇缘\",15],[\"现代言情\",16],[\"浪漫青春\",17],[\"玄幻言情\",18],[\"悬疑灵异\",19],[\"科幻空间\",20],[\"游戏竞技\",21],[\"BL文\",22],[\"GL文\",23],[\"二次元\",24]];\nvar T9_QBC = [[\"完本·玄幻\",1],[\"完本·都市\",5],[\"完本·古代言情\",14]];\nvar T9_RANKS = [[\"总榜\",\"allvisit\"],[\"月榜\",\"monthvisit\"],[\"收藏榜\",\"goodnum\"],[\"周榜\",\"weekvisit\"]];\nfunction T9_T(jv, s) { try { jv.toast(String(s)); return 1; } catch (e) {} try { jv.longToast(String(s)); return 1; } catch (e2) {} return 0; }\nfunction T9_U(s) {\n  var t = String(s);\n  if (t.indexOf(String.fromCharCode(92) + \"u\") < 0) return t;\n  try {\n    var out = \"\", i = 0, BS = String.fromCharCode(92);\n    while (i < t.length) {\n      if (t.charAt(i) === BS && t.charAt(i + 1) === \"u\" && t.charAt(i + 2) >= \"0\" && t.charAt(i + 2) <= \"9\") {\n        var hx = t.substr(i + 2, 4), ok = 1;\n        for (var q = 0; q < 4; q++) {\n          var ch = hx.charAt(q);\n          var isH = (ch >= \"0\" && ch <= \"9\") || (ch >= \"a\" && ch <= \"f\") || (ch >= \"A\" && ch <= \"F\");\n          if (!isH) { ok = 0; break; }\n        }\n        if (ok) { out += String.fromCharCode(parseInt(hx, 16)); i += 6; continue; }\n      }\n      out += t.charAt(i); i++;\n    }\n    return out;\n  } catch (e) { return t; }\n}\nfunction T9_msg(t) {\n  var m = String(t).match(\/\"msg\":\"([^\"]*)\"\/);\n  if (!m) m = String(t).match(\/\"msg\":\\s*\"([^\"]*)\"\/);\n  if (!m) m = String(t).match(\/msg[\\s:]+\"([^\"]*)\"\/);\n  return m ? T9_U(m[1]) : \"\";\n}\nfunction T9_code(t) {\n  var m = String(t).match(\/\"(?:code|ret|status)\"\\s*:\\s*(-?[0-9]+)\/);\n  return m ? parseInt(m[1], 10) : null;\n}\nvar T9_DEF = 'm.159txt.com';\nfunction T9_SET(k, v) {\n  var java, source;\n  var ctx = this;\n  if (ctx && ctx.source) { source = ctx.source; java = ctx.java; }\n  else { source = (typeof source !== 'undefined') ? source : null; java = (typeof java !== 'undefined') ? java : null; }\n  var d = {};\n  try { d = JSON.parse(source.getVariable() || '{}'); } catch (e) { d = {}; }\n  d[k] = v;\n  try { source.putVariable(JSON.stringify(d)); } catch (e2) {}\n  return d;\n}\nfunction T9_GET(k) {\n  var ctx = this, source = (ctx && ctx.source) ? ctx.source : ((typeof source !== 'undefined') ? source : null);\n  var d = {};\n  try { d = JSON.parse(source.getVariable() || '{}'); } catch (e) { d = {}; }\n  return d[k] || '';\n}\nfunction T9_HOST() {\n  var h = '';\n  try { h = String(T9_GET.call(this, 'server')); } catch (e) { h = ''; }\n  if (!h || h == 'null' || h == 'undefined') h = '';\n  if (h) {\n    var bare = h.toLowerCase().replace(\/^https?:\\\/\\\/\/, '').replace(\/\\\/+$\/, '');\n    for (var i = 0; i < T9_HOSTS.length; i++) { if (T9_HOSTS[i] === bare) return bare; }\n  }\n  return T9_DEF;\n}\nfunction T9_host_UNUSED(jv) {\n  var h = \"\";\n  try { h = String(T9_var(jv).server || \"\"); } catch (e) { h = \"\"; }\n  if (!h || h == \"null\" || h == \"undefined\") h = \"\";\n  if (h) {\n    var bare = h.toLowerCase().replace(\/^https?:\\\/\\\/\/, \"\").replace(\/\\\/+$\/, \"\");\n    for (var i = 0; i < T9_HOSTS.length; i++) { if (T9_HOSTS[i] === bare) return bare; }\n  }\n  return T9_DEFHOST;\n}\nfunction T9_host_UNUSED(jv) {\n  var h = \"\";\n  try { h = String(T9_var(jv).server || \"\"); } catch (e) { h = \"\"; }\n  if (!h || h == \"null\" || h == \"undefined\") h = \"\";\n  if (h) {\n    var bare = h.toLowerCase().replace(\/^https?:\\\/\\\/\/, \"\").replace(\/\\\/+$\/, \"\");\n    for (var i = 0; i < T9_HOSTS.length; i++) { if (T9_HOSTS[i] === bare) return bare; }\n  }\n  return T9_DEFHOST;\n}\nfunction T9_base() { return \"https:\/\/\" + T9_HOST.call(this); }\nfunction T9_srv(u) {\n  var m = String(u || \"\").match(\/^(https?:\\\/\\\/[^\\\/]+)\/i);\n  var g = T9_HOST.call(this);\n  if (m) {\n    var dh = m[1].toLowerCase().replace(\/^https?:\\\/\\\/\/, \"\").replace(\/\\\/+$\/, \"\");\n    if (g && g === dh) return \"https:\/\/\" + g;\n    return m[1];\n  }\n  return \"https:\/\/\" + g;\n}\nfunction T9_abs(u) {\n  var s = String(u || \"\");\n  if (s.indexOf(\"http\") === 0) return s;\n  if (s.charAt(0) !== \"\/\") s = \"\/\" + s;\n  return T9_base();\n}\nfunction T9_fixToc(html) {\n  var s = html.indexOf(\"ul_all_chapters\");\n  if (s < 0) s = 0;\n  var re = \/href=\"([^\"]*\\\/(\\d+)\\\/(\\d+)\\\/(\\d+)[.]html)\">\/g;\n  var q = String.fromCharCode(34);\n  var arr = [], m;\n  re.lastIndex = s;\n  while ((m = re.exec(html))) {\n    var url = m[1];\n    var slash = url.lastIndexOf(\"\/\");\n    arr.push({ pfx: url.substring(0, slash + 1), id: parseInt(m[4], 10), pos: m.index, len: m[0].length });\n  }\n  if (!arr.length) return html;\n  var out = html.substring(0, arr[0].pos), prev = 0;\n  for (var i = 0; i < arr.length; i++) {\n    var fromHere = (i === 0) ? arr[0].pos : (arr[i - 1].pos + arr[i - 1].len);\n    out += html.substring(fromHere, arr[i].pos);\n    var cid = arr[i].id, keep = cid;\n    if (cid <= prev) {\n      var nxt = null;\n      for (var j = i + 1; j < arr.length; j++) { if (arr[j].id > cid) { nxt = arr[j].id; break; } }\n      var gap = (nxt === null) ? 2 : (nxt - cid);\n      var step = Math.floor(gap \/ 2);\n      if (step < 1) step = 1;\n      keep = cid + step;\n      if (keep <= prev) keep = prev + 1;\n      if (nxt !== null && keep >= nxt) keep = prev + 1;\n    }\n    out += \"href=\" + q + arr[i].pfx + keep + \".html\" + q + \">\";\n    prev = keep;\n  }\n  out += html.substring(arr[arr.length - 1].pos + arr[arr.length - 1].len);\n  return out;\n}\nfunction T9_nextPage(jv, sv, result, baseUrl) {\n  var s = (\"\" + result).indexOf(\"indexselect\");\n  if (s < 0) return \"\";\n  var e = (\"\" + result).indexOf(\"<\/select>\", s);\n  if (e < 0) return \"\";\n  var seg = (\"\" + result).substring(s, e);\n  var opts = seg.match(\/<option value=\"([^\"]+)\"([^>]*)>\/g) || [];\n  var cur = 0, vals = [];\n  for (var i = 0; i < opts.length; i++) {\n    var v = opts[i].match(\/value=\"([^\"]+)\"\/);\n    var sel = \/selected\/.test(opts[i]);\n    if (v) vals.push(v[1]);\n    if (sel) cur = i;\n  }\n  if (cur + 1 < vals.length) return vals[cur + 1];\n  return \"\";\n}\nfunction T9_search(jv, sv, result) {\n  var html = String(result || \"\");\n  if (html.length < 50) return [];\n  var m = html.match(\/var books = JSON[.]parse[(]d[(]\"([^\"]+)\"[)][)]\/);\n  if (!m) return [];\n  var txt;\n  try { txt = jv.base64Decode(m[1]); } catch (e) { return []; }\n  var arr;\n  try { arr = JSON.parse(txt); } catch (e) { return []; }\n  var out = [];\n  for (var i = 0; i < arr.length; i++) {\n    var b = arr[i];\n    var u = b.url || \"\";\n    if (!u) continue;\n    out.push(JSON.stringify({\n      name: b.name || \"\",\n      url: T9_abs(u),\n      author: b.author || \"\",\n      intro: b.intro || \"\",\n      kind: b.status || \"\",\n      lastChapter: b.chapter || \"\",\n      cover: b.cover || \"\"\n    }));\n  }\n  return out;\n}\nfunction T9_sign(jv, sv) {\n  var opt = { method: \"POST\",\n    headers: { \"User-Agent\": T9_UA, \"Content-Type\": \"application\/x-www-form-urlencoded\",\n               \"Referer\": T9_SOSO + \"?action=member\", \"X-Requested-With\": \"XMLHttpRequest\" } };\n  var r = \"\", tries = 0;\n  while (tries < 3) {\n    tries++;\n    try { var CKs=T9_SCOOKIE(); if(CKs) opt.headers[\"Cookie\"]=CKs; r = String(jv.ajax(T9_SOSO + \"?action=user_api&act=sign_in,\" + JSON.stringify(opt))); } catch (e) { r = \"\"; }\n    if (r.indexOf(\"code\") >= 0) break;\n    try { Packages.java.lang.Thread.sleep(1200); } catch (e2) {}\n  }\n  if (r.indexOf(\"code\") < 0) { T9_T(jv, \"签到请求失败:连不上 soshu 网关(已重试3次)\"); return; }\n  jv.log(\"sign resp:\" + r.substring(0, 200));\n  var c = T9_code(r), msg = T9_msg(r);\n  if (c === 0) { T9_T(jv, \"签到成功\" + (msg ? \":\" + msg : \"\")); }\n  else if (c === null) { T9_T(jv, \"签到失败:响应无法解析 \" + r.substring(0, 60)); }\n  else { T9_T(jv, \"签到失败(\" + c + \"):\" + (msg || \"可能今日已签到或未登录\")); }\n}\nfunction T9_signinfo(jv, sv) {\n  var r = \"\", tries = 0;\n  while (tries < 3) {\n    tries++;\n    try { var CKs=T9_SCOOKIE(); var HH=CKs?{\"User-Agent\":T9_UA,\"Cookie\":CKs}:{\"User-Agent\":T9_UA}; r = String(jv.ajax(T9_SOSO + \"?action=user_api&act=profile,\" + JSON.stringify({headers:HH}))); } catch (e) { r = \"\"; }\n    if (r.indexOf(\"code\") >= 0) break;\n    try { Packages.java.lang.Thread.sleep(1200); } catch (e2) {}\n  }\n  if (r.indexOf(\"code\") < 0) { T9_T(jv, \"查询失败:连不上 soshu 网关(已重试3次)\"); return; }\n  var c = T9_code(r);\n  if (c !== 0) { T9_T(jv, \"未登录,请先点「登录搜搜书」\"); return; }\n  var pv = function (k) { var m = r.match(new RegExp(\"\\\"\" + k + \"\\\"\\\\s*:\\\\s*([0-9]+|true|false)\")); return m ? String(m[1]) : \"0\"; };\n  var signed = r.indexOf(\"\\\"signedToday\\\":true\") >= 0 || r.indexOf(\"\\\"signedToday\\\": true\") >= 0;\n  var streak = pv(\"signStreak\"), mx = pv(\"maxSignStreak\");\n  var rem = pv(\"searchRemaining\"), smax = pv(\"searchMax\");\n  var lv = pv(\"level\"), title = \"\";\n  var tm = r.match(\/\"levelTitle\":\"([^\"]*)\"\/);\n  if (tm) title = T9_U(tm[1]);\n  var s1 = signed ? \"今日已签到\" : \"今日未签到\";\n  var s2 = \"连续签到 \" + streak + \" 天 | 最长 \" + mx + \" 天\";\n  var s3 = \"Lv\" + lv + (title ? \" \" + title : \"\");\n  var s4 = \"搜索额度 \" + rem + \"\/\" + smax;\n  T9_T(jv, s1 + \"\\n\" + s2 + \"\\n\" + s3 + \"\\n\" + s4);\n}\nfunction T9_SCOOKIE() {\n  var ck = \"\";\n  try { ck = String(java.getCookie(T9_SOSO)); } catch (e) { ck = \"\"; }\n  return ck;\n}\nfunction T9_login() {\n  var tel = \"\", pwd = \"\";\n  try { tel = String(java.get(\"tel\")); } catch (e) {}\n  try { pwd = String(java.get(\"pwd\")); } catch (e) {}\n  if (tel.indexOf(\"tel=\") >= 0 || tel.indexOf(\"{\") === 0) {\n    var mo = tel.match(\/tel=([^,}\\s]+)\/);\n    tel = mo ? mo[1] : \"\";\n  }\n  if (pwd.indexOf(\"pwd=\") >= 0 || pwd.indexOf(\"{\") === 0) {\n    var mp = pwd.match(\/pwd=([^,}\\s]+)\/);\n    pwd = mp ? mp[1] : \"\";\n  }\n  if (!tel || !pwd || tel == \"null\" || pwd == \"null\" || tel.indexOf(\"tel=\") >= 0 || pwd.indexOf(\"pwd=\") >= 0) {\n    T9_T(java, \"请先在登录界面的「手机号」「密码」框里填写,再点登录\"); return;\n  }\n  var cap = \"\";\n  try {\n    var t0 = Date.now();\n    var CK = T9_SCOOKIE();\n    var HD = { \"User-Agent\": T9_UA };\n    if (CK) HD[\"Cookie\"] = CK;\n    var hex = String(java.ajax(T9_SOSO + \"?action=captcha_api&t=\" + t0 + \",\" + JSON.stringify({ \"type\": \"hex\", \"headers\": HD })));\n    if (!\/^[0-9a-f]+$\/i.test(hex.substring(0, 16))) { T9_T(java, \"验证码图下载失败\"); return; }\n    var bytes = java.hexDecodeToByteArray(hex);\n    var b64 = String(Packages.android.util.Base64.encodeToString(bytes, 2));\n    var dataUri = \"data:image\/png;base64,\" + b64;\n    cap = String(java.getVerificationCode(dataUri));\n  } catch (e) { T9_T(java, \"获取验证码失败:\" + e); return; }\n  if (!cap || cap == \"null\" || cap.length < 3) { T9_T(java, \"未取到验证码,请重试\"); return; }\n  var CK2 = T9_SCOOKIE();\n  var HD2 = { \"User-Agent\": T9_UA, \"Content-Type\": \"application\/x-www-form-urlencoded\",\n              \"Referer\": T9_SOSO + \"?action=login\", \"X-Requested-With\": \"XMLHttpRequest\" };\n  if (CK2) HD2[\"Cookie\"] = CK2;\n  var opt = { method: \"POST\",\n    body: \"mobile=\" + java.encodeURI(tel) + \"&password=\" + java.encodeURI(pwd) + \"&captcha=\" + java.encodeURI(cap),\n    headers: HD2 };\n  var r = \"\", tries = 0;\n  while (tries < 3) {\n    tries++;\n    try { r = String(java.ajax(T9_SOSO + \"?action=user_api&act=login,\" + JSON.stringify(opt))); } catch (e) { r = \"\"; }\n    if (r.indexOf(\"code\") >= 0) break;\n    try { Packages.java.lang.Thread.sleep(1200); } catch (e2) {}\n  }\n  if (r.indexOf(\"code\") < 0) { T9_T(java, \"登录请求失败:连不上 soshu 网关(已重试3次)\"); return; }\n  java.log(\"login resp:\" + r.substring(0, 200));\n  var c = T9_code(r), msg = T9_msg(r);\n  if (c === 0) { T9_T(java, \"登录成功(搜索额度已恢复)\" + (msg ? \":\" + msg : \"\")); }\n  else if (c === -1) { T9_T(java, \"登录失败:\" + (msg || \"手机号或密码错误\") + \",若刚刷新过验证码请再试一次\"); }\n  else if (c !== null) { T9_T(java, \"登录失败(\" + c + \"):\" + (msg || r.substring(0, 60))); }\n  else { T9_T(java, \"登录失败:响应无法解析 \" + r.substring(0, 60)); }\n}\nfunction T9_check() {\n  var r = \"\";\n  try { var CKc=T9_SCOOKIE(); var HHc=CKc?{\"User-Agent\":T9_UA,\"Cookie\":CKc}:{\"User-Agent\":T9_UA}; r = String(java.ajax(T9_SOSO + \"?action=user_api&act=me,\" + JSON.stringify({headers:HHc}))); } catch (e) { T9_T(java, \"检查失败:网络错误\"); return; }\n  var c = T9_code(r);\n  if (c === 0 && r.indexOf(\"\\\"data\\\":null\") < 0) {\n    var nm = r.match(\/\"name\":\"([^\"]*)\"\/);\n    T9_T(java, \"已登录:\" + (nm ? T9_U(nm[1]) : \"账号\"));\n  } else if (c === 0) { T9_T(java, \"未登录,请点「登录搜搜书」\"); }\n  else { T9_T(java, \"检查失败(\" + (c === null ? \"?\" : c) + \")\"); }\n}\nfunction T9_quota() {\n  var r = \"\";\n  try { var CKq=T9_SCOOKIE(); var HHq=CKq?{\"User-Agent\":T9_UA,\"Cookie\":CKq}:{\"User-Agent\":T9_UA}; r = String(java.ajax(T9_SOSO + \"?s=x&web=m159txt,\" + JSON.stringify({headers:HHq}))); } catch (e) { T9_T(java, \"检查失败:网络错误\"); return; }\n  if (r.indexOf(\"今日搜索次数已用完\") >= 0 || T9_U(r).indexOf(\"已用完\") >= 0) { T9_T(java, \"今日搜索次数已用完(10次\/天)\"); return; }\n  var q = r.match(\/quota-remaining\">(\\d+)<\/);\n  if (q) T9_T(java, \"今日剩余搜索次数:\" + q[1]);\n  else T9_T(java, \"未获取到额度信息\");\n}",
    "lastUpdateTime": "1792310465185",
    "loginCheckJs": "(function(){var t=String(result);if(t.indexOf('search-blocked')>=0||t.indexOf('已用完')>=0){  throw new Error('今日搜索次数已用完(10次\/天)。搜索走 soshu 网关,额度每日重置;发现\/详情\/正文不受影响。');}try{  var ck=String(cookie.getCookie('https:\/\/www.sososhu.com\/'));  var sid=ck.match(\/PHPSESSID=([^;\\s]+)\/);  if(sid&&sid[1]){    var cur=String(cookie.getCookie('159txt小说'));    if(cur.indexOf(sid[1])<0){      var keep=cur;      var np=keep?keep+'; ':' ';      cookie.setCookie('159txt小说', np+'PHPSESSID='+sid[1]);      java.log('cookie 桶同步: PHPSESSID='+sid[1].substring(0,8)+'...');    }  }}catch(e){java.log('cookie 同步失败: '+e);}return result;})()",
    "loginUi": "[{\"name\": \"线路\", \"type\": \"select\", \"chars\": [\"m.159txt.com\", \"m.34kanshu.com\", \"m.43kanshu.com\"], \"default\": \"m.159txt.com\", \"action\": \"var _v=result['线路'];if(!_v||_v=='null')_v='m.159txt.com';T9_SET('server', _v);java.refreshExplore();T9_T(java,'已切到: '+_v)\", \"style\": {\"layout_flexGrow\": 1}}, {\"name\": \"tel\", \"type\": \"text\", \"default\": \"\", \"viewName\": \"'手机号'\", \"action\": \"java.put('tel', (result && result['tel']) ? result['tel'] : result)\", \"style\": {\"layout_flexGrow\": 1}}, {\"name\": \"pwd\", \"type\": \"password\", \"default\": \"\", \"viewName\": \"'密码'\", \"action\": \"java.put('pwd', (result && result['pwd']) ? result['pwd'] : result)\", \"style\": {\"layout_flexGrow\": 1}}, {\"name\": \"登录搜搜书\", \"type\": \"button\", \"action\": \"T9_login()\", \"style\": {\"layout_flexGrow\": 1}}, {\"name\": \"检查登录状态\", \"type\": \"button\", \"action\": \"T9_check()\", \"style\": {\"layout_flexGrow\": 1}}, {\"name\": \"查看搜索额度\", \"type\": \"button\", \"action\": \"T9_quota()\", \"style\": {\"layout_flexGrow\": 1}}, {\"name\": \"立即签到\", \"type\": \"button\", \"action\": \"T9_sign(java,source)\", \"style\": {\"layout_flexGrow\": 1}}, {\"name\": \"签到状态\", \"type\": \"button\", \"action\": \"T9_signinfo(java,source)\", \"style\": {\"layout_flexGrow\": 1}}, {\"name\": \"打开搜搜书\", \"type\": \"button\", \"action\": \"java.startBrowser('https:\/\/www.sososhu.com\/','搜搜书')\", \"style\": {\"layout_flexGrow\": 1}}]",
    "loginUrl": "var T9_UA = \"Mozilla\/5.0 (Linux; Android 14; Pixel 8) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/126.0.0.0 Mobile Safari\/537.36\";\nvar T9_HOSTS = [\"m.159txt.com\", \"m.34kanshu.com\", \"m.43kanshu.com\"];\nvar T9_DEFHOST = \"m.159txt.com\";\nvar T9_SOSO = \"https:\/\/www.sososhu.com\/\";\nvar T9_CATS = [[\"玄幻\",1],[\"奇幻\",2],[\"武侠\",3],[\"仙侠\",4],[\"都市\",5],[\"军事\",6],[\"历史\",7],[\"游戏\",8],[\"竞技\",9],[\"科幻\",10],[\"悬疑\",11],[\"灵异\",12],[\"其他\",13],[\"古代言情\",14],[\"仙侠奇缘\",15],[\"现代言情\",16],[\"浪漫青春\",17],[\"玄幻言情\",18],[\"悬疑灵异\",19],[\"科幻空间\",20],[\"游戏竞技\",21],[\"BL文\",22],[\"GL文\",23],[\"二次元\",24]];\nvar T9_QBC = [[\"完本·玄幻\",1],[\"完本·都市\",5],[\"完本·古代言情\",14]];\nvar T9_RANKS = [[\"总榜\",\"allvisit\"],[\"月榜\",\"monthvisit\"],[\"收藏榜\",\"goodnum\"],[\"周榜\",\"weekvisit\"]];\nfunction T9_T(jv, s) { try { jv.toast(String(s)); return 1; } catch (e) {} try { jv.longToast(String(s)); return 1; } catch (e2) {} return 0; }\nfunction T9_U(s) {\n  var t = String(s);\n  if (t.indexOf(String.fromCharCode(92) + \"u\") < 0) return t;\n  try {\n    var out = \"\", i = 0, BS = String.fromCharCode(92);\n    while (i < t.length) {\n      if (t.charAt(i) === BS && t.charAt(i + 1) === \"u\" && t.charAt(i + 2) >= \"0\" && t.charAt(i + 2) <= \"9\") {\n        var hx = t.substr(i + 2, 4), ok = 1;\n        for (var q = 0; q < 4; q++) {\n          var ch = hx.charAt(q);\n          var isH = (ch >= \"0\" && ch <= \"9\") || (ch >= \"a\" && ch <= \"f\") || (ch >= \"A\" && ch <= \"F\");\n          if (!isH) { ok = 0; break; }\n        }\n        if (ok) { out += String.fromCharCode(parseInt(hx, 16)); i += 6; continue; }\n      }\n      out += t.charAt(i); i++;\n    }\n    return out;\n  } catch (e) { return t; }\n}\nfunction T9_msg(t) {\n  var m = String(t).match(\/\"msg\":\"([^\"]*)\"\/);\n  if (!m) m = String(t).match(\/\"msg\":\\s*\"([^\"]*)\"\/);\n  if (!m) m = String(t).match(\/msg[\\s:]+\"([^\"]*)\"\/);\n  return m ? T9_U(m[1]) : \"\";\n}\nfunction T9_code(t) {\n  var m = String(t).match(\/\"(?:code|ret|status)\"\\s*:\\s*(-?[0-9]+)\/);\n  return m ? parseInt(m[1], 10) : null;\n}\nvar T9_DEF = 'm.159txt.com';\nfunction T9_SET(k, v) {\n  var java, source;\n  var ctx = this;\n  if (ctx && ctx.source) { source = ctx.source; java = ctx.java; }\n  else { source = (typeof source !== 'undefined') ? source : null; java = (typeof java !== 'undefined') ? java : null; }\n  var d = {};\n  try { d = JSON.parse(source.getVariable() || '{}'); } catch (e) { d = {}; }\n  d[k] = v;\n  try { source.putVariable(JSON.stringify(d)); } catch (e2) {}\n  return d;\n}\nfunction T9_GET(k) {\n  var ctx = this, source = (ctx && ctx.source) ? ctx.source : ((typeof source !== 'undefined') ? source : null);\n  var d = {};\n  try { d = JSON.parse(source.getVariable() || '{}'); } catch (e) { d = {}; }\n  return d[k] || '';\n}\nfunction T9_HOST() {\n  var h = '';\n  try { h = String(T9_GET.call(this, 'server')); } catch (e) { h = ''; }\n  if (!h || h == 'null' || h == 'undefined') h = '';\n  if (h) {\n    var bare = h.toLowerCase().replace(\/^https?:\\\/\\\/\/, '').replace(\/\\\/+$\/, '');\n    for (var i = 0; i < T9_HOSTS.length; i++) { if (T9_HOSTS[i] === bare) return bare; }\n  }\n  return T9_DEF;\n}\nfunction T9_host_UNUSED(jv) {\n  var h = \"\";\n  try { h = String(T9_var(jv).server || \"\"); } catch (e) { h = \"\"; }\n  if (!h || h == \"null\" || h == \"undefined\") h = \"\";\n  if (h) {\n    var bare = h.toLowerCase().replace(\/^https?:\\\/\\\/\/, \"\").replace(\/\\\/+$\/, \"\");\n    for (var i = 0; i < T9_HOSTS.length; i++) { if (T9_HOSTS[i] === bare) return bare; }\n  }\n  return T9_DEFHOST;\n}\nfunction T9_host_UNUSED(jv) {\n  var h = \"\";\n  try { h = String(T9_var(jv).server || \"\"); } catch (e) { h = \"\"; }\n  if (!h || h == \"null\" || h == \"undefined\") h = \"\";\n  if (h) {\n    var bare = h.toLowerCase().replace(\/^https?:\\\/\\\/\/, \"\").replace(\/\\\/+$\/, \"\");\n    for (var i = 0; i < T9_HOSTS.length; i++) { if (T9_HOSTS[i] === bare) return bare; }\n  }\n  return T9_DEFHOST;\n}\nfunction T9_base() { return \"https:\/\/\" + T9_HOST.call(this); }\nfunction T9_srv(u) {\n  var m = String(u || \"\").match(\/^(https?:\\\/\\\/[^\\\/]+)\/i);\n  var g = T9_HOST.call(this);\n  if (m) {\n    var dh = m[1].toLowerCase().replace(\/^https?:\\\/\\\/\/, \"\").replace(\/\\\/+$\/, \"\");\n    if (g && g === dh) return \"https:\/\/\" + g;\n    return m[1];\n  }\n  return \"https:\/\/\" + g;\n}\nfunction T9_abs(u) {\n  var s = String(u || \"\");\n  if (s.indexOf(\"http\") === 0) return s;\n  if (s.charAt(0) !== \"\/\") s = \"\/\" + s;\n  return T9_base();\n}\nfunction T9_fixToc(html) {\n  var s = html.indexOf(\"ul_all_chapters\");\n  if (s < 0) s = 0;\n  var re = \/href=\"([^\"]*\\\/(\\d+)\\\/(\\d+)\\\/(\\d+)[.]html)\">\/g;\n  var q = String.fromCharCode(34);\n  var arr = [], m;\n  re.lastIndex = s;\n  while ((m = re.exec(html))) {\n    var url = m[1];\n    var slash = url.lastIndexOf(\"\/\");\n    arr.push({ pfx: url.substring(0, slash + 1), id: parseInt(m[4], 10), pos: m.index, len: m[0].length });\n  }\n  if (!arr.length) return html;\n  var out = html.substring(0, arr[0].pos), prev = 0;\n  for (var i = 0; i < arr.length; i++) {\n    var fromHere = (i === 0) ? arr[0].pos : (arr[i - 1].pos + arr[i - 1].len);\n    out += html.substring(fromHere, arr[i].pos);\n    var cid = arr[i].id, keep = cid;\n    if (cid <= prev) {\n      var nxt = null;\n      for (var j = i + 1; j < arr.length; j++) { if (arr[j].id > cid) { nxt = arr[j].id; break; } }\n      var gap = (nxt === null) ? 2 : (nxt - cid);\n      var step = Math.floor(gap \/ 2);\n      if (step < 1) step = 1;\n      keep = cid + step;\n      if (keep <= prev) keep = prev + 1;\n      if (nxt !== null && keep >= nxt) keep = prev + 1;\n    }\n    out += \"href=\" + q + arr[i].pfx + keep + \".html\" + q + \">\";\n    prev = keep;\n  }\n  out += html.substring(arr[arr.length - 1].pos + arr[arr.length - 1].len);\n  return out;\n}\nfunction T9_nextPage(jv, sv, result, baseUrl) {\n  var s = (\"\" + result).indexOf(\"indexselect\");\n  if (s < 0) return \"\";\n  var e = (\"\" + result).indexOf(\"<\/select>\", s);\n  if (e < 0) return \"\";\n  var seg = (\"\" + result).substring(s, e);\n  var opts = seg.match(\/<option value=\"([^\"]+)\"([^>]*)>\/g) || [];\n  var cur = 0, vals = [];\n  for (var i = 0; i < opts.length; i++) {\n    var v = opts[i].match(\/value=\"([^\"]+)\"\/);\n    var sel = \/selected\/.test(opts[i]);\n    if (v) vals.push(v[1]);\n    if (sel) cur = i;\n  }\n  if (cur + 1 < vals.length) return vals[cur + 1];\n  return \"\";\n}\nfunction T9_search(jv, sv, result) {\n  var html = String(result || \"\");\n  if (html.length < 50) return [];\n  var m = html.match(\/var books = JSON[.]parse[(]d[(]\"([^\"]+)\"[)][)]\/);\n  if (!m) return [];\n  var txt;\n  try { txt = jv.base64Decode(m[1]); } catch (e) { return []; }\n  var arr;\n  try { arr = JSON.parse(txt); } catch (e) { return []; }\n  var out = [];\n  for (var i = 0; i < arr.length; i++) {\n    var b = arr[i];\n    var u = b.url || \"\";\n    if (!u) continue;\n    out.push(JSON.stringify({\n      name: b.name || \"\",\n      url: T9_abs(u),\n      author: b.author || \"\",\n      intro: b.intro || \"\",\n      kind: b.status || \"\",\n      lastChapter: b.chapter || \"\",\n      cover: b.cover || \"\"\n    }));\n  }\n  return out;\n}\nfunction T9_sign(jv, sv) {\n  var opt = { method: \"POST\",\n    headers: { \"User-Agent\": T9_UA, \"Content-Type\": \"application\/x-www-form-urlencoded\",\n               \"Referer\": T9_SOSO + \"?action=member\", \"X-Requested-With\": \"XMLHttpRequest\" } };\n  var r = \"\", tries = 0;\n  while (tries < 3) {\n    tries++;\n    try { var CKs=T9_SCOOKIE(); if(CKs) opt.headers[\"Cookie\"]=CKs; r = String(jv.ajax(T9_SOSO + \"?action=user_api&act=sign_in,\" + JSON.stringify(opt))); } catch (e) { r = \"\"; }\n    if (r.indexOf(\"code\") >= 0) break;\n    try { Packages.java.lang.Thread.sleep(1200); } catch (e2) {}\n  }\n  if (r.indexOf(\"code\") < 0) { T9_T(jv, \"签到请求失败:连不上 soshu 网关(已重试3次)\"); return; }\n  jv.log(\"sign resp:\" + r.substring(0, 200));\n  var c = T9_code(r), msg = T9_msg(r);\n  if (c === 0) { T9_T(jv, \"签到成功\" + (msg ? \":\" + msg : \"\")); }\n  else if (c === null) { T9_T(jv, \"签到失败:响应无法解析 \" + r.substring(0, 60)); }\n  else { T9_T(jv, \"签到失败(\" + c + \"):\" + (msg || \"可能今日已签到或未登录\")); }\n}\nfunction T9_signinfo(jv, sv) {\n  var r = \"\", tries = 0;\n  while (tries < 3) {\n    tries++;\n    try { var CKs=T9_SCOOKIE(); var HH=CKs?{\"User-Agent\":T9_UA,\"Cookie\":CKs}:{\"User-Agent\":T9_UA}; r = String(jv.ajax(T9_SOSO + \"?action=user_api&act=profile,\" + JSON.stringify({headers:HH}))); } catch (e) { r = \"\"; }\n    if (r.indexOf(\"code\") >= 0) break;\n    try { Packages.java.lang.Thread.sleep(1200); } catch (e2) {}\n  }\n  if (r.indexOf(\"code\") < 0) { T9_T(jv, \"查询失败:连不上 soshu 网关(已重试3次)\"); return; }\n  var c = T9_code(r);\n  if (c !== 0) { T9_T(jv, \"未登录,请先点「登录搜搜书」\"); return; }\n  var pv = function (k) { var m = r.match(new RegExp(\"\\\"\" + k + \"\\\"\\\\s*:\\\\s*([0-9]+|true|false)\")); return m ? String(m[1]) : \"0\"; };\n  var signed = r.indexOf(\"\\\"signedToday\\\":true\") >= 0 || r.indexOf(\"\\\"signedToday\\\": true\") >= 0;\n  var streak = pv(\"signStreak\"), mx = pv(\"maxSignStreak\");\n  var rem = pv(\"searchRemaining\"), smax = pv(\"searchMax\");\n  var lv = pv(\"level\"), title = \"\";\n  var tm = r.match(\/\"levelTitle\":\"([^\"]*)\"\/);\n  if (tm) title = T9_U(tm[1]);\n  var s1 = signed ? \"今日已签到\" : \"今日未签到\";\n  var s2 = \"连续签到 \" + streak + \" 天 | 最长 \" + mx + \" 天\";\n  var s3 = \"Lv\" + lv + (title ? \" \" + title : \"\");\n  var s4 = \"搜索额度 \" + rem + \"\/\" + smax;\n  T9_T(jv, s1 + \"\\n\" + s2 + \"\\n\" + s3 + \"\\n\" + s4);\n}\nfunction T9_SCOOKIE() {\n  var ck = \"\";\n  try { ck = String(java.getCookie(T9_SOSO)); } catch (e) { ck = \"\"; }\n  return ck;\n}\nfunction T9_login() {\n  var tel = \"\", pwd = \"\";\n  try { tel = String(java.get(\"tel\")); } catch (e) {}\n  try { pwd = String(java.get(\"pwd\")); } catch (e) {}\n  if (tel.indexOf(\"tel=\") >= 0 || tel.indexOf(\"{\") === 0) {\n    var mo = tel.match(\/tel=([^,}\\s]+)\/);\n    tel = mo ? mo[1] : \"\";\n  }\n  if (pwd.indexOf(\"pwd=\") >= 0 || pwd.indexOf(\"{\") === 0) {\n    var mp = pwd.match(\/pwd=([^,}\\s]+)\/);\n    pwd = mp ? mp[1] : \"\";\n  }\n  if (!tel || !pwd || tel == \"null\" || pwd == \"null\" || tel.indexOf(\"tel=\") >= 0 || pwd.indexOf(\"pwd=\") >= 0) {\n    T9_T(java, \"请先在登录界面的「手机号」「密码」框里填写,再点登录\"); return;\n  }\n  var cap = \"\";\n  try {\n    var t0 = Date.now();\n    var CK = T9_SCOOKIE();\n    var HD = { \"User-Agent\": T9_UA };\n    if (CK) HD[\"Cookie\"] = CK;\n    var hex = String(java.ajax(T9_SOSO + \"?action=captcha_api&t=\" + t0 + \",\" + JSON.stringify({ \"type\": \"hex\", \"headers\": HD })));\n    if (!\/^[0-9a-f]+$\/i.test(hex.substring(0, 16))) { T9_T(java, \"验证码图下载失败\"); return; }\n    var bytes = java.hexDecodeToByteArray(hex);\n    var b64 = String(Packages.android.util.Base64.encodeToString(bytes, 2));\n    var dataUri = \"data:image\/png;base64,\" + b64;\n    cap = String(java.getVerificationCode(dataUri));\n  } catch (e) { T9_T(java, \"获取验证码失败:\" + e); return; }\n  if (!cap || cap == \"null\" || cap.length < 3) { T9_T(java, \"未取到验证码,请重试\"); return; }\n  var CK2 = T9_SCOOKIE();\n  var HD2 = { \"User-Agent\": T9_UA, \"Content-Type\": \"application\/x-www-form-urlencoded\",\n              \"Referer\": T9_SOSO + \"?action=login\", \"X-Requested-With\": \"XMLHttpRequest\" };\n  if (CK2) HD2[\"Cookie\"] = CK2;\n  var opt = { method: \"POST\",\n    body: \"mobile=\" + java.encodeURI(tel) + \"&password=\" + java.encodeURI(pwd) + \"&captcha=\" + java.encodeURI(cap),\n    headers: HD2 };\n  var r = \"\", tries = 0;\n  while (tries < 3) {\n    tries++;\n    try { r = String(java.ajax(T9_SOSO + \"?action=user_api&act=login,\" + JSON.stringify(opt))); } catch (e) { r = \"\"; }\n    if (r.indexOf(\"code\") >= 0) break;\n    try { Packages.java.lang.Thread.sleep(1200); } catch (e2) {}\n  }\n  if (r.indexOf(\"code\") < 0) { T9_T(java, \"登录请求失败:连不上 soshu 网关(已重试3次)\"); return; }\n  java.log(\"login resp:\" + r.substring(0, 200));\n  var c = T9_code(r), msg = T9_msg(r);\n  if (c === 0) { T9_T(java, \"登录成功(搜索额度已恢复)\" + (msg ? \":\" + msg : \"\")); }\n  else if (c === -1) { T9_T(java, \"登录失败:\" + (msg || \"手机号或密码错误\") + \",若刚刷新过验证码请再试一次\"); }\n  else if (c !== null) { T9_T(java, \"登录失败(\" + c + \"):\" + (msg || r.substring(0, 60))); }\n  else { T9_T(java, \"登录失败:响应无法解析 \" + r.substring(0, 60)); }\n}\nfunction T9_check() {\n  var r = \"\";\n  try { var CKc=T9_SCOOKIE(); var HHc=CKc?{\"User-Agent\":T9_UA,\"Cookie\":CKc}:{\"User-Agent\":T9_UA}; r = String(java.ajax(T9_SOSO + \"?action=user_api&act=me,\" + JSON.stringify({headers:HHc}))); } catch (e) { T9_T(java, \"检查失败:网络错误\"); return; }\n  var c = T9_code(r);\n  if (c === 0 && r.indexOf(\"\\\"data\\\":null\") < 0) {\n    var nm = r.match(\/\"name\":\"([^\"]*)\"\/);\n    T9_T(java, \"已登录:\" + (nm ? T9_U(nm[1]) : \"账号\"));\n  } else if (c === 0) { T9_T(java, \"未登录,请点「登录搜搜书」\"); }\n  else { T9_T(java, \"检查失败(\" + (c === null ? \"?\" : c) + \")\"); }\n}\nfunction T9_quota() {\n  var r = \"\";\n  try { var CKq=T9_SCOOKIE(); var HHq=CKq?{\"User-Agent\":T9_UA,\"Cookie\":CKq}:{\"User-Agent\":T9_UA}; r = String(java.ajax(T9_SOSO + \"?s=x&web=m159txt,\" + JSON.stringify({headers:HHq}))); } catch (e) { T9_T(java, \"检查失败:网络错误\"); return; }\n  if (r.indexOf(\"今日搜索次数已用完\") >= 0 || T9_U(r).indexOf(\"已用完\") >= 0) { T9_T(java, \"今日搜索次数已用完(10次\/天)\"); return; }\n  var q = r.match(\/quota-remaining\">(\\d+)<\/);\n  if (q) T9_T(java, \"今日剩余搜索次数:\" + q[1]);\n  else T9_T(java, \"未获取到额度信息\");\n}\nfunction login(){ T9_login(); }",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "$.author",
        "coverUrl": "$.cover",
        "init": "@js:(function(){var h=String(result);var WB=h.indexOf('wanbenshenzhan')>=0||h.indexOf('chapter-list')>=0&&h.indexOf('ul_all_chapters')<0;var o={};if(WB){  var n=h.match(\/<h1>([\\s\\S]*?)<\\\/h1>\/);  var nm=n?n[1].replace(\/<button[\\s\\S]*\/,'').replace(\/<[^>]*>\/g,'').replace(\/\\s+\/g,' ').trim():'';  if(nm.indexOf(' ')>0)nm=nm.split(' ')[0];  o.name=nm;  var a=h.match(\/作者[::]\\s*([^<\\s]{1,20})\/);  o.author=a?a[1]:'';  var k=h.match(\/分类[::]\\s*([^<\\s]{1,10})\/);  o.kind=k?k[1]:'';  var it=h.match(\/<meta property=\"og:description\" content=\"([^\"]*)\"\/);  o.intro=it?it[1]:'';  var cv=h.match(\/<meta property=\"og:image\" content=\"([^\"]*)\"\/);  o.cover=cv?cv[1]:'';}else{  var n2=h.match(\/<h2>([\\s\\S]*?)<\\\/h2>\/);  o.name=n2?n2[1].replace(\/<[^>]*>\/g,'').trim():'';  var a2=h.match(\/作者:([^<\\s]{1,20})\/);  o.author=a2?a2[1]:'';  var k2=h.match(\/分类:([^<\\s]{1,10})\/);  o.kind=k2?k2[1]:'';  var im=h.match(\/<div class=\"intro str-over-dot\">([\\s\\S]*?)<\\\/div>\/);  var t=im?im[1].replace(\/<[^>]*>\/g,'').replace(\/\\s+\/g,' ').trim():'';  if(!t||t.indexOf('更新')<0){var d=h.match(\/<meta name=\"description\" content=\"([^\"]*)\"\/);if(d)t=d[1];}  o.intro=t;  var cv2=h.match(\/class=\"block_img2\"[^>]*>[\\s\\S]*?<img src=\"([^\"]*)\"\/);  o.cover=cv2?cv2[1]:'';}return JSON.stringify(o);})()",
        "intro": "$.intro",
        "kind": "$.kind",
        "lastChapter": "text.最新:@text##最新:",
        "name": "$.name"
    },
    "ruleContent": {
        "content": "<js>(function(){var q=String.fromCharCode(34), h=String(result);var LT=String.fromCharCode(60), GT=String.fromCharCode(62);var WB=h.indexOf('chapter-content')>=0;var ps=[];if(WB){  var i=h.indexOf('chapter-content');  var s=h.indexOf('>',i);  var e=h.indexOf('<\/div>',s);  var seg=h.substring(s+1,e);  ps=seg.split(LT+'p'+GT);}else{  var i2=h.indexOf('id='+q+'nr'+q);  if(i2<0)i2=h.indexOf('nr');  if(i2<0)return h;  var s2=h.indexOf('>',i2);  var e2=h.indexOf('<\/article>',s2);  var seg2=h.substring(s2+1,e2);  var tm=h.match(\/<div class=\"zhong\">([\\s\\S]*?)<\\\/div>\/);  var ttl=tm?tm[1].replace(\/<[^>]*>\/g,'').replace(\/\\s+\/g,' ').trim():'';  ps=seg2.split(LT+'p'+GT);  var tmp=[];  for(var k2=0;k2<ps.length;k2++){    var t2=ps[k2].split(LT+'\/p'+GT).join('');    var sq2=t2.replace(\/[\\s\\u3000]\/g,'');    if(ttl && sq2===ttl.replace(\/[\\s\\u3000]\/g,''))continue;    tmp.push(t2);  }  ps=tmp;}var out=[];for(var k=0;k<ps.length;k++){  var t=ps[k].split(LT+'\/p'+GT).join('');  t=t.split(LT+'br'+GT).join(String.fromCharCode(10));  var sq=t.replace(\/[\\s\\u3000]\/g,'');  var bad=0;  if(sq.indexOf('完本神站')>=0)bad=1;  if(sq.indexOf('神立占')>=0)bad=1;  if(t.indexOf('wanbentxt')>=0||h.indexOf('wanbentxt')>=0&&t.indexOf('wanben')>=0)bad=1;  if(sq.indexOf('一秒记住')>=0)bad=1;  if(sq.indexOf('永不丢失')>=0)bad=1;  if(sq.indexOf('章节文件读取失败')>=0)bad=1;  if(sq.indexOf('推荐地址')>=0)bad=1;  if(sq.indexOf('浏览器搜索')>=0&&sq.indexOf('快速找到')>=0)bad=1;  if(sq.indexOf('找不到书请留言')>=0)bad=1;  if(sq.indexOf('敬请投资')>=0||sq.indexOf('友友们')>=0)bad=1;  if(sq.indexOf('(本章完)')>=0)bad=1;  if(sq.indexOf('wanbenshenzhan')>=0)bad=1;  if(sq.length<1)continue;  if(bad)continue;  out.push(t);}return out.join(String.fromCharCode(10));})()<\/js>"
    },
    "ruleExplore": {
        "author": "span.1@text##作者:",
        "bookList": "ul.xbk",
        "bookUrl": "li.tjimg a@href||a@href",
        "coverUrl": "img@src",
        "intro": "span.-2@text",
        "kind": "tag.i@text",
        "name": ".xsm@text"
    },
    "ruleSearch": {
        "author": "$.author",
        "bookList": "@js:T9_search(java,source,result)",
        "bookUrl": "$.url",
        "coverUrl": "$.cover",
        "intro": "$.intro",
        "kind": "$.kind",
        "lastChapter": "$.lastChapter",
        "name": "$.name"
    },
    "ruleToc": {
        "chapterList": "<js>(function(){var h=String(result);var WB=h.indexOf('wanbenshenzhan')>=0||(h.indexOf('chapter-list')>=0&&h.indexOf('ul_all_chapters')<0);if(WB){  var s=h.indexOf('chapter-list');  var e=h.indexOf('chapter-pagination',s);  if(e<0)e=h.length;  return h.substring(s,e);}var h2=T9_fixToc(h);var s2=h2.indexOf('ul_all_chapters');var e2=h2.indexOf('<\/ul>',s2);return h2.substring(s2,e2);})()<\/js>div.chapter-list a||li a",
        "chapterName": "text",
        "chapterUrl": "href",
        "nextTocUrl": "@js:(function(){var h=String(result);var WB=h.indexOf('wanbenshenzhan')>=0||(h.indexOf('chapter-pagination')>=0&&h.indexOf('indexselect')<0);if(WB){  var m=h.match(\/class=\"next\"[^>]*href=\"([^\"]+)\"\/);  if(!m)m=h.match(\/href=\"([^\"]+)\"[^>]*class=\"next\"\/);  return m?m[1]:'';}return T9_nextPage(java,source,result,baseUrl);})()"
    },
    "searchUrl": "https:\/\/www.sososhu.com\/?s={{key}}&web=m159txt&page={{page}}&_t={{Date.now()}}",
    "weight": 0
}
广告