[{"bookSourceComment":"V0.20\n\n1、添加网址：把书籍的目录网址（或 结尾递增 的正文网址）输入阅读APP书架上的添加网址。\n\n2、设置章数：获取目录，出现没图片的 验证码 输入时：\n（1）网址为 结尾递增 的正文网址，则输入 总章数（大于9）。\n（2）不输入内容，正则匹配获取目录。\n（3）输入6，获取所有a链接。7，webView。8，webView且获取所有a。\n\n3、如果一直加载目录或章节不存在，可以试试：\n（1）在订阅里新建 单URL 的订阅源，源URL为之前添加的地址。\n（2）从订阅源进入网址，把网址上需要 确认 的点一下。\n\n#、懂正则的可以自己修改正则来适配。\n#、替换净化推荐：开头[\\s\\S]{1,300}结尾\n#、替换的 特定范围 保留最后的网站名+书源，可以只在这个网站生效，比如：苦读书;添加-目录网址","bookSourceName":"添加-目录网址","bookSourceType":0,"bookSourceUrl":"添加-目录网址","bookUrlPattern":"https?:\/\/.+","customButton":false,"customOrder":0,"enabled":true,"enabledCookieJar":true,"enabledExplore":false,"eventListener":false,"lastUpdateTime":"1791519759381","respondTime":180000,"ruleBookInfo":{"name":"title@text"},"ruleContent":{"content":"html\n<js>\nvar html = org.jsoup.Jsoup.parse(result.replaceAll(\/[^一-龟]\/g,'').length < 650 ? java.ajax(baseUrl+',{\"webView\":true}') : result);\nconst hrefs = [];\nfunction isSameOrigin(url1, url2) {\n\tvar urlreg = \/^(?:https?:)\\\/\\\/([^\\\/:]+)(?:[\\\/:])?\/,\n \t javaUrl1 = url1.match(urlreg),\n \t javaUrl2 = url2.match(urlreg);\n  return !javaUrl2 || javaUrl1[1] == javaUrl2[1];\n}\nfor (var a of html.select(\"a\")) {\n    var href = a.attr('href');\n    if (href && href != baseUrl && isSameOrigin(baseUrl, href)) {\n    var text = a.text();\n    \tif(text && \/下[—一]?页|^\\s*Next\/.test(text)){\n    \t\tjava.put(\"下一页3\", href);\n    \t}else if(\/\\d_\\d\/.test(href)){\n    \t  hrefs.push(href);\n    \t}\n    }\n}\njava.put(\"下一页2\", hrefs);\nhtml.select(\"br,p\").before(\"\\n\");\nfor (var el of html.select(\":not(div,p)\")) {\n    if (!el.select(\"div, p\").isEmpty()) continue;\n    el.remove();\n}\nconst btext = html.body().wholeText();\njava.put(\"文本\", btext);\nbtext;\n<\/js>","nextContentUrl":"a:contains(下一页)@href\n<js>\nvar nowpage = Number(java.get(\"正文页\"))||1;\nif(nowpage<33){\njava.put(\"正文页\", nowpage+1);\nvar next = java.get(\"下一页3\") || result;\nif(!next || !next.length() || next == baseUrl){\nvar nexts = java.get(\"下一页2\").split(\",\"),\n num = baseUrl.match(\/\\d_(\\d+)\/);\nif(num){\n  num = '_' + (Number(num[1]) + 1);\n  for (var target of nexts) {\n   \tif(target.indexOf(num) != -1){\n  \t\tnext = target;\n  \t\tbreak;\n\t\t}\n  }\n}else if(nexts[0].length){\n\tnext = nexts[0];\n}\nnext = next && next.length() && next != baseUrl ? next : null;\nif(!next){\nvar page = java.get(\"文本\").match(\/第[^\\n\\d]{0,5}(\\d+)\\\/(\\d+)[^\\n\\d]{0,5}页\/);\nif(page){\n\tvar npage = Number(page[1])+1,\n\t mpage = Number(page[2]);\n\tif(npage <= mpage){\n\t\tnext = baseUrl.replace(\/(_\\d+)?(\\.html|\\\/)?$\/, \"_\"+npage+\"$2\");\n\t}\n}\n}\n}\nnext;\n}\n<\/js>","replaceRegex":"<js>\nconst FILTER_RULES = [\n  \/[^一-龟\\n]+function\\(\\)\\{[^一-龟]+\/g,\n]\nfor(let reg of FILTER_RULES){\n\tresult = result.replace(reg, \"\");\n}\nresult;\n<\/js>"},"ruleExplore":[],"ruleSearch":[],"ruleToc":{"chapterList":"a\n<js>\nvar num=Number(java.get(\"目录类\"))||-1;\nif(num==-1){try{num=Number(java.getVerificationCode(''))}catch(err){num=1}java.put(\"目录类\",num)}\nconst bls=[],als=[],all=num>6&&num<9?org.jsoup.Jsoup.parse(java.ajax(baseUrl+',{\"webView\":true}')).select('a'):result,cls=[],reg=\/([^\\d])(\\d+)(\\.html|\\\/)?$\/;\nif(num>9&&baseUrl.match(reg)){\n var mat=baseUrl.match(reg),ua=baseUrl.replace(reg,\"$1\"),ub=Number(mat[2]),uc=mat[3]||\"\";\n for(var i=0;i<num;i++)bls.push({href:ua+(ub+i)+uc,text:\"第\"+(i+1)+\"章\"})\n}else{\n function sam(ua,ub){var rgx=\/^(?:https?:)\\\/\\\/([^\\\/:]+)(?:[\\\/:])?\/,\n mta=ua.match(rgx),mtb=ub.match(rgx);return!mtb||mta[1]==mtb[1]}\n const rgz=\/^[\\d一二三四五六七八九十零百千万]+$|前言|后记|番外|(?:序|终|[\\d一二三四五六七八九十零百千万])(?:[章节回])|[【】]\/;\n for(var ele of all){var hrf=ele.attr('href'),txt=ele.text();if(hrf&&sam(baseUrl,hrf)){cls.push(ele);if(txt){rgz.test(txt)&&als.push(ele);\n \/下[—一]?页|^\\s*Next\/.test(txt)&&java.put(\"下一页\",hrf)}}}\n}\nbls.length?bls:(als.length&&num!=6&&num!=8?als:cls);\n<\/js>","chapterName":"text","chapterUrl":"href","nextTocUrl":"a:contains(下一页)@href\n<js>\njava.get(\"下一页\") || result;\n<\/js>"},"weight":0}]