so-novel Agent Skills & AI Rules

GitHub

Java cli & content-export repository by @freeok. Model Context Protocol (MCP) server & tools with 7.1k stars.

RAW Rules
1 Discovered Rules • ~2,784 Estimated Tokens
Loading skill content...

Rules Skill

bundle/rules/cloudflare.json anthropic-skill ~2,784 tokens
Raw
[
  {
    "url": "https://www.wxsy.net/",
    "name": "顶点小说",
    "comment": "搜索有cf,搜索、详情、章节限流。目录乱序、正文段落被base64编码",
    "search": {
      "url": "https://www.wxsy.net/search.html",
      "method": "post",
      "data": "{s: %s}",
      "result": "body > div.container > div:nth-child(1) > div > ul > li",
      "bookName": "span.s2 > a",
      "author": "span.s3 > a",
      "category": "span.s1",
      "latestChapter": "span.s4 > a",
      "lastUpdateTime": "span.s5"
    },
    "book": {
      "url": "https://www.wxsy.net/novel/(.*?)/",
      "coverUrl": ".imgbox > img"
    },
    "toc": {
      "url": "https://www.wxsy.net/novel/%s/chapter_1.html",
      "list": "/html@js:const childRegex=/\\.section-list\\.ycxsid>li:nth-child\\(\\d+\\){display:none}/g;const lastChildRegex=/\\.section-list\\.ycxsid>li:nth-last-child\\(\\d+\\){display:none}/g;const preHiddenCount=[...r.matchAll(childRegex)].length;const afterHiddenCount=[...r.matchAll(lastChildRegex)].length;r=r.replace(/<ul[^>]*class=\"[^\"]*\\bsection-list\\b[^\"]*\\bycxsid\\b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/ul>/g,(match,liContent)=>{const lis=liContent.match(/<li[\\s\\S]*?<\\/li>/g)||[];const newLis=lis.slice(preHiddenCount,lis.length-afterHiddenCount);return match.replace(liContent,newLis.join(''))});",
      "item": ".biqunaicc > div:nth-child(2) > div > ul > li > a",
      "nextPage": ".biqunaicc > div:nth-child(2) > div > div:nth-child(2) > select > option"
    },
    "chapter": {
      "title": "h3",
      "content": ".row-detail > div > div@js:r=r.replace(/<script>\\s*document\\.writeln\\(qsbs\\.bb\\('([^']+)'\\)\\);\\s*<\\/script>/g,function(a,b){return b});@java:base64.decode()",
      "paragraphTagClosed": true,
      "filterTxt": "请勿开启浏览器阅读模式,否则将导致章节内容缺失及无法阅读下一章。|\\(本章完\\)",
      "filterTag": "h3, div, p[style=font-size:12px;]",
      "nextPage": ".row.row-detail > div > div > div:nth-child(2) > a:nth-child(4)"
    }
  },
  {
    "url": "http://www.xhytd.com/",
    "name": "黄易天地",
    "comment": "非大陆IP可能速度较慢",
    "search": {
      "disabled": true,
      "url": "http://www.xhytd.com/search.html?name=%s",
      "method": "get",
      "result": "#main > div.novelslist2 > ul > li",
      "bookName": "span.s2.wid > a",
      "author": "span.s4.wid > a",
      "latestChapter": "span.s3.wid3 > a",
      "lastUpdateTime": "span.s6.wid6"
    },
    "book": {},
    "toc": {
      "item": "#list > dl > dt:nth-of-type(2) ~ dd > a"
    },
    "chapter": {
      "title": "h1",
      "content": "#content",
      "paragraphTagClosed": false,
      "paragraphTag": "<br>+",
      "filterTxt": "",
      "filterTag": "p, div"
    }
  },
  {
    "url": "https://www.96dushu.com/",
    "name": "96读书",
    "comment": "章节JS加密",
    "search": {
      "disabled": true,
      "url": "https://www.96dushu.com/modules/article/search.php",
      "method": "post",
      "data": "{searchkey: %s}",
      "result": "#nr",
      "bookName": "dd:nth-child(2) > h3 > a",
      "author": "dd:nth-child(3) > span:nth-child(1)",
      "category": "dt > span",
      "latestChapter": "dd:nth-child(5) > a",
      "lastUpdateTime": "dd:nth-child(2) > h3 > span",
      "status": "dd:nth-child(3) > span:nth-child(2)",
      "nextPage": "#pagelink > a:not(.first):not(.last)"
    },
    "book": {
      "url": "https://www.96dushu.com/book/(.*?)/"
    },
    "toc": {
      "item": "#chapterList > li > a"
    },
    "chapter": {
      "title": "#mlfy_main_text > h1",
      "content": "#content@js:r=r.replace(/<script>\\s*document\\.writeln\\(qsbs\\.bb\\('([^']+)'\\)\\);\\s*<\\/script>/g,function(a,b){return b});@java:base64.decode()",
      "paragraphTagClosed": true,
      "filterTxt": "\\((继续下一页|本章完)\\)|最⊥新⊥小⊥说⊥在⊥六⊥9⊥⊥书⊥⊥吧⊥⊥首⊥发!",
      "filterTag": "",
      "nextPage": "#readbg > div.mlfy_page > a:nth-child(4)",
      "nextPageInJs": "//*[@id=\"readbg\"]/script[4]@js:r=r.match(/nextpage = \"(.*?)\"/)[1];"
    }
  },
  {
    "url": "http://www.dongtanxs.com/",
    "name": "东滩小说",
    "comment": "",
    "search": {
      "url": "http://www.dongtanxs.com/s.php?ie=utf-8&q=%s",
      "method": "get",
      "result": ".bookinfo",
      "bookName": "h4 > a",
      "author": "div.author",
      "category": "div.cat",
      "latestChapter": "div.update > a"
    },
    "book": {},
    "toc": {
      "item": "dl > dt:nth-of-type(2) ~ dd > a"
    },
    "chapter": {
      "title": ".content > h1",
      "content": "#content",
      "paragraphTagClosed": false,
      "paragraphTag": "<br>+",
      "filterTxt": "http://www\\.dongtanxs\\.com/dongtan\\d+/\\d+\\.html\\s*|请记住本书首发域名:www\\.dongtanxs\\.com。东滩小说手机版阅读网址:m\\.dongtanxs\\.com"
    }
  },
  {
    "url": "http://127.0.0.1:8000/",
    "name": "和图书",
    "comment": "本地新增:Cloudflare 托管挑战。规则把所有 URL 改写成本地 cf-bypass 服务(http://127.0.0.1:8000/html?url=…),因此官方二进制也能用;需先启动 cf-bypass",
    "search": {
      "url": "http://127.0.0.1:8000/html?url=%s@js:r='http://127.0.0.1:8000/html?url='+encodeURIComponent('https://www.hetushu.com/search/?keyword='+r);",
      "method": "get",
      "baseUri": "https://www.hetushu.com/",
      "timeout": 120,
      "result": "dl#body > dd@js:r=r.replace(/href=\"(\\/book\\/\\d+\\/index\\.html)\"/g,function(m,h){return 'href=\"http://127.0.0.1:8000/html?url='+encodeURIComponent('https://www.hetushu.com'+h)+'\"';});",
      "bookName": "h4 > a",
      "author": "h4 > span@js:r=r.replace(/[\\/\\s]/g,'')",
      "intro": ".intro p"
    },
    "book": {
      "baseUri": "https://www.hetushu.com/",
      "timeout": 120,
      "bookName": ".book_info > h2",
      "author": ".book_info > div:nth-child(3) > a",
      "intro": ".book_info .intro",
      "category": ".book_info > div:nth-of-type(2)@js:r=r.replace(/[^:]*:/,'')",
      "coverUrl": ".book_info > img@src"
    },
    "toc": {
      "baseUri": "https://www.hetushu.com/",
      "timeout": 120,
      "list": "html@js:r=r.replace(/href=\"(\\/book\\/\\d+\\/\\d+\\.html)\"/g,function(m,h){return 'href=\"http://127.0.0.1:8000/html?url='+encodeURIComponent('https://www.hetushu.com'+h)+'\"';});",
      "item": "dl#dir > dd > a"
    },
    "chapter": {
      "baseUri": "https://www.hetushu.com/",
      "timeout": 120,
      "title": "h2.h2",
      "content": "#content",
      "paragraphTagClosed": true,
      "filterTxt": "和图书|hetushu\\.com|\\(本章完\\)",
      "filterTag": ""
    },
    "crawl": {
      "concurrency": 2,
      "minInterval": 200,
      "maxInterval": 600,
      "maxAttempts": 3,
      "retryMinInterval": 1500,
      "retryMaxInterval": 3000
    }
  },
  {
    "url": "https://www.linovelib.com/",
    "name": "哔哩轻小说",
    "comment": "本地新增:Cloudflare 站点(403 页标题为 Attention Required! | Cloudflare,程序自带 cf-bypass 检测能命中);搜索为 POST /S6/(searchkey),详情用 og:novel meta,目录 /novel/{id}/catalog,正文 #mlfy_main_text,章节单页",
    "search": {
      "url": "https://www.linovelib.com/S6/",
      "method": "post",
      "data": "{searchkey: %s}",
      "timeout": 60,
      "result": "div.search-result-list",
      "bookName": "h2.tit > a",
      "author": ".bookinfo a"
    },
    "book": {
      "url": "https://www.linovelib.com/novel/(\\d+)\\.html",
      "timeout": 60
    },
    "toc": {
      "url": "https://www.linovelib.com/novel/%s/catalog",
      "timeout": 90,
      "item": "ul.chapter-list > li > a"
    },
    "chapter": {
      "timeout": 90,
      "title": "h1",
      "content": "#mlfy_main_text",
      "paragraphTagClosed": true,
      "filterTxt": "请勿开启浏览器阅读模式|\\(本章完\\)|哔哩轻小说|和图书",
      "filterTag": "script"
    },
    "crawl": {
      "concurrency": 2,
      "minInterval": 400,
      "maxInterval": 1000,
      "maxAttempts": 3,
      "retryMinInterval": 1500,
      "retryMaxInterval": 3000
    }
  }
]