[
  {
    "bookSourceComment": "",
    "bookSourceGroup": "精选书源",
    "bookSourceName": "㊣✾ 书耽 #一程",
    "bookSourceType": 0,
    "bookSourceUrl": "http://m.shubl.com#♤yc",
    "bookUrlPattern": "",
    "customOrder": -6394,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "[{\"title\":\"签约\",\"url\":\"/index/filter_book_list?tag=%E7%AD%BE%E7%BA%A6&tag_module=signed&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"甜文\",\"url\":\"/index/filter_book_list?tag=%E7%94%9C%E6%96%87&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"爽文\",\"url\":\"/index/filter_book_list?tag=%E7%88%BD%E6%96%87&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"ＨＥ\",\"url\":\"/index/filter_book_list?tag=HE&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"ＢＥ\",\"url\":\"/index/filter_book_list?tag=BE&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"快穿\",\"url\":\"/index/filter_book_list?tag=%E5%BF%AB%E7%A9%BF&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"青春\",\"url\":\"/index/filter_book_list?tag=%E9%9D%92%E6%98%A5&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"校园\",\"url\":\"/index/filter_book_list?tag=%E6%A0%A1%E5%9B%AD&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"百合\",\"url\":\"/index/filter_book_list?tag=%E7%99%BE%E5%90%88&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"科幻\",\"url\":\"/index/filter_book_list?tag=%E7%A7%91%E5%B9%BB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"古代\",\"url\":\"/index/filter_book_list?tag=%E5%8F%A4%E4%BB%A3&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"民国\",\"url\":\"/index/filter_book_list?tag=%E6%B0%91%E5%9B%BD&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"现代\",\"url\":\"/index/filter_book_list?tag=%E7%8E%B0%E4%BB%A3&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"都市\",\"url\":\"/index/filter_book_list?tag=%E9%83%BD%E5%B8%82&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"武侠\",\"url\":\"/index/filter_book_list?tag=%E6%AD%A6%E4%BE%A0&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"仙侠\",\"url\":\"/index/filter_book_list?tag=%E4%BB%99%E4%BE%A0&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"玄幻\",\"url\":\"/index/filter_book_list?tag=%E7%8E%84%E5%B9%BB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"架空\",\"url\":\"/index/filter_book_list?tag=%E6%9E%B6%E7%A9%BA&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"穿越\",\"url\":\"/index/filter_book_list?tag=%E7%A9%BF%E8%B6%8A&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"重生\",\"url\":\"/index/filter_book_list?tag=%E9%87%8D%E7%94%9F&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"动漫\",\"url\":\"/index/filter_book_list?tag=%E5%8A%A8%E6%BC%AB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"网游\",\"url\":\"/index/filter_book_list?tag=%E7%BD%91%E6%B8%B8&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"悬疑\",\"url\":\"/index/filter_book_list?tag=%E6%82%AC%E7%96%91&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"灵异\",\"url\":\"/index/filter_book_list?tag=%E7%81%B5%E5%BC%82&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"完本\",\"url\":\"/index/filter_book_list?tag=%E5%AE%8C%E6%9C%AC&tag_module=ended&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.21}}]",
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Mobile Safari/537.36\"\n}",
    "lastUpdateTime": 1682225156532,
    "loginUrl": "https://m.shubl.com/signup/login",
    "respondTime": 4465,
    "ruleBookInfo": {
      "author": "class.author.0@text##\\s.*",
      "coverUrl": "class.thumb.0@img@data-original",
      "intro": ".info div.4@html&&.J_DescContent@html",
      "kind": "class.author.0@text&&class.pull-right.0@text##.*\\s|.*：",
      "name": ".name@text",
      "tocUrl": "class.container.1@a@href",
      "wordCount": ".numbers span.0@text"
    },
    "ruleContent": {
      "content": "#J_BookRead@html",
      "imageStyle": "0"
    },
    "ruleExplore": {
      "author": "",
      "bookList": "",
      "bookUrl": "",
      "coverUrl": "",
      "intro": "",
      "name": ""
    },
    "ruleSearch": {
      "author": "div.1@text",
      "bookList": ".book-list li",
      "bookUrl": "a@href",
      "coverUrl": "img@data-original",
      "intro": "div.2@text",
      "name": "span.1@text"
    },
    "ruleToc": {
      "chapterList": ".list li",
      "chapterName": "p.0@text",
      "chapterUrl": "a@href##$##,{\"webView\":true}",
      "isVip": "i@text##^##🔒",
      "updateTime": "p.1@text"
    },
    "searchUrl": "/index/search_book?key={{key}}",
    "weight": 0
  },
  {
    "bookSourceComment": "",
    "bookSourceGroup": "精选书源",
    "bookSourceName": "🔥 书耽",
    "bookSourceType": 0,
    "bookSourceUrl": "https://m.shubl.com",
    "bookUrlPattern": "",
    "customOrder": -6353,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "[{\"title\":\"签约\",\"url\":\"/index/filter_book_list?tag=%E7%AD%BE%E7%BA%A6&tag_module=signed&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"甜文\",\"url\":\"/index/filter_book_list?tag=%E7%94%9C%E6%96%87&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"爽文\",\"url\":\"/index/filter_book_list?tag=%E7%88%BD%E6%96%87&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"ＨＥ\",\"url\":\"/index/filter_book_list?tag=HE&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"ＢＥ\",\"url\":\"/index/filter_book_list?tag=BE&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"快穿\",\"url\":\"/index/filter_book_list?tag=%E5%BF%AB%E7%A9%BF&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"青春\",\"url\":\"/index/filter_book_list?tag=%E9%9D%92%E6%98%A5&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"校园\",\"url\":\"/index/filter_book_list?tag=%E6%A0%A1%E5%9B%AD&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"百合\",\"url\":\"/index/filter_book_list?tag=%E7%99%BE%E5%90%88&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"科幻\",\"url\":\"/index/filter_book_list?tag=%E7%A7%91%E5%B9%BB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"古代\",\"url\":\"/index/filter_book_list?tag=%E5%8F%A4%E4%BB%A3&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"民国\",\"url\":\"/index/filter_book_list?tag=%E6%B0%91%E5%9B%BD&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"现代\",\"url\":\"/index/filter_book_list?tag=%E7%8E%B0%E4%BB%A3&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"都市\",\"url\":\"/index/filter_book_list?tag=%E9%83%BD%E5%B8%82&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"武侠\",\"url\":\"/index/filter_book_list?tag=%E6%AD%A6%E4%BE%A0&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"仙侠\",\"url\":\"/index/filter_book_list?tag=%E4%BB%99%E4%BE%A0&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"玄幻\",\"url\":\"/index/filter_book_list?tag=%E7%8E%84%E5%B9%BB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"架空\",\"url\":\"/index/filter_book_list?tag=%E6%9E%B6%E7%A9%BA&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"穿越\",\"url\":\"/index/filter_book_list?tag=%E7%A9%BF%E8%B6%8A&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"重生\",\"url\":\"/index/filter_book_list?tag=%E9%87%8D%E7%94%9F&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"动漫\",\"url\":\"/index/filter_book_list?tag=%E5%8A%A8%E6%BC%AB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"网游\",\"url\":\"/index/filter_book_list?tag=%E7%BD%91%E6%B8%B8&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"悬疑\",\"url\":\"/index/filter_book_list?tag=%E6%82%AC%E7%96%91&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"灵异\",\"url\":\"/index/filter_book_list?tag=%E7%81%B5%E5%BC%82&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"完本\",\"url\":\"/index/filter_book_list?tag=%E5%AE%8C%E6%9C%AC&tag_module=ended&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.21}}]",
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Mobile Safari/537.36\"\n}",
    "lastUpdateTime": 1678675374009,
    "loginUrl": "https://m.shubl.com/signup/login",
    "respondTime": 4274,
    "ruleBookInfo": {
      "author": "class.author.0@text##\\s.*",
      "coverUrl": "class.thumb.0@img@data-original",
      "init": "",
      "intro": ".info div.4@html&&.J_DescContent@html",
      "kind": "class.author.0@text&&class.pull-right.0@text##.*\\s|.*：",
      "name": ".name@text",
      "tocUrl": "class.container.1@a@href",
      "wordCount": ".numbers span.0@text"
    },
    "ruleContent": {
      "content": "#J_BookRead@html",
      "imageStyle": "0"
    },
    "ruleExplore": {
      "author": "",
      "bookList": "",
      "bookUrl": "",
      "coverUrl": "",
      "intro": "",
      "name": ""
    },
    "ruleSearch": {
      "author": "div.1@text",
      "bookList": ".book-list li",
      "bookUrl": "a@href",
      "coverUrl": "img@data-original",
      "intro": "div.2@text",
      "name": "span.1@text"
    },
    "ruleToc": {
      "chapterList": ".list li",
      "chapterName": "p.0@text",
      "chapterUrl": "a@href##$##,{\"webView\":true}",
      "isVip": "i@text##^##🔒",
      "updateTime": "p.1@text"
    },
    "searchUrl": "/index/search_book?key={{key}},{\n\"charset\": \"utf8\"}",
    "weight": 0
  },
  {
    "bookSourceComment": "",
    "bookSourceGroup": "精选书源",
    "bookSourceName": "书耽中文",
    "bookSourceType": 0,
    "bookSourceUrl": "http://m.shubl.com#一程",
    "bookUrlPattern": "",
    "customOrder": -6177,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "签约::/index/filter_book_list?tag=%E7%AD%BE%E7%BA%A6&tag_module=signed&page={{page}}\n完本::/index/filter_book_list?tag=%E5%AE%8C%E6%9C%AC&tag_module=ended&page={{page}}\n甜文::/index/filter_book_list?tag=%E7%94%9C%E6%96%87&tag_module=&page={{page}}\n爽文::/index/filter_book_list?tag=%E7%88%BD%E6%96%87&tag_module=&page={{page}}\nＨＥ::/index/filter_book_list?tag=HE&tag_module=&page={{page}}\nＢＥ::/index/filter_book_list?tag=BE&tag_module=&page={{page}}\n快穿::/index/filter_book_list?tag=%E5%BF%AB%E7%A9%BF&tag_module=&page={{page}}\n青春::/index/filter_book_list?tag=%E9%9D%92%E6%98%A5&tag_module=&page={{page}}\n校园::/index/filter_book_list?tag=%E6%A0%A1%E5%9B%AD&tag_module=&page={{page}}\n百合::/index/filter_book_list?tag=%E7%99%BE%E5%90%88&tag_module=&page={{page}}\n科幻::/index/filter_book_list?tag=%E7%A7%91%E5%B9%BB&tag_module=&page={{page}}\n古代::/index/filter_book_list?tag=%E5%8F%A4%E4%BB%A3&tag_module=&page={{page}}\n民国::/index/filter_book_list?tag=%E6%B0%91%E5%9B%BD&tag_module=&page={{page}}\n现代::/index/filter_book_list?tag=%E7%8E%B0%E4%BB%A3&tag_module=&page={{page}}\n都市::/index/filter_book_list?tag=%E9%83%BD%E5%B8%82&tag_module=&page={{page}}\n武侠::/index/filter_book_list?tag=%E6%AD%A6%E4%BE%A0&tag_module=&page={{page}}\n仙侠::/index/filter_book_list?tag=%E4%BB%99%E4%BE%A0&tag_module=&page={{page}}\n玄幻::/index/filter_book_list?tag=%E7%8E%84%E5%B9%BB&tag_module=&page={{page}}\n架空::/index/filter_book_list?tag=%E6%9E%B6%E7%A9%BA&tag_module=&page={{page}}\n穿越::/index/filter_book_list?tag=%E7%A9%BF%E8%B6%8A&tag_module=&page={{page}}\n重生::/index/filter_book_list?tag=%E9%87%8D%E7%94%9F&tag_module=&page={{page}}\n动漫::/index/filter_book_list?tag=%E5%8A%A8%E6%BC%AB&tag_module=&page={{page}}\n网游::/index/filter_book_list?tag=%E7%BD%91%E6%B8%B8&tag_module=&page={{page}}\n悬疑::/index/filter_book_list?tag=%E6%82%AC%E7%96%91&tag_module=&page={{page}}\n灵异::/index/filter_book_list?tag=%E7%81%B5%E5%BC%82&tag_module=&page={{page}}",
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Mobile Safari/537.36\"\n}",
    "lastUpdateTime": 1702127775944,
    "loginUrl": "https://m.shubl.com/signup/login?redirect=https%3A%2F%2Fm.shubl.com%2Freader%2Fget_my_info",
    "respondTime": 3840,
    "ruleBookInfo": {
      "author": "class.author@tag.a.0@text##\\|.*",
      "coverUrl": "id.book_info@tag.img@data-original",
      "intro": "class.text-muted J_DescContent@text",
      "kind": "class.J_Tag btn btn-mini btn-outline-primary@text",
      "name": "class.info@tag.a.0@text",
      "tocUrl": "class.container.1@tag.a@href",
      "wordCount": "class.numbers@tag.span.0@text"
    },
    "ruleContent": {
      "content": "id.J_BookRead@html",
      "imageStyle": "0"
    },
    "ruleExplore": {
      "author": "",
      "bookList": "",
      "bookUrl": "",
      "coverUrl": "",
      "intro": "",
      "name": ""
    },
    "ruleReview": {},
    "ruleSearch": {
      "author": "class.author@text",
      "bookList": "class.book-list@tag.li",
      "bookUrl": "tag.a@href",
      "coverUrl": "class.lazyload@data-original",
      "intro": "class.summaries@text",
      "name": "class.title@text"
    },
    "ruleToc": {
      "chapterList": "class.list@tag.li",
      "chapterName": "tag.a@class.chapter-title@text",
      "chapterUrl": "tag.a@href##$##,{\"webView\":true}"
    },
    "searchUrl": "/index/search_book?key={{key}}",
    "weight": 0
  },
  {
    "bookSourceComment": "",
    "bookSourceGroup": "精选书源",
    "bookSourceName": "🌐 书耽网站",
    "bookSourceType": 0,
    "bookSourceUrl": "http://m.shubl.com",
    "bookUrlPattern": "",
    "customOrder": -6176,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "[{\"title\":\"签约\",\"url\":\"/index/filter_book_list?tag=%E7%AD%BE%E7%BA%A6&tag_module=signed&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"甜文\",\"url\":\"/index/filter_book_list?tag=%E7%94%9C%E6%96%87&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"爽文\",\"url\":\"/index/filter_book_list?tag=%E7%88%BD%E6%96%87&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"ＨＥ\",\"url\":\"/index/filter_book_list?tag=HE&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"ＢＥ\",\"url\":\"/index/filter_book_list?tag=BE&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"快穿\",\"url\":\"/index/filter_book_list?tag=%E5%BF%AB%E7%A9%BF&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"青春\",\"url\":\"/index/filter_book_list?tag=%E9%9D%92%E6%98%A5&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"校园\",\"url\":\"/index/filter_book_list?tag=%E6%A0%A1%E5%9B%AD&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"百合\",\"url\":\"/index/filter_book_list?tag=%E7%99%BE%E5%90%88&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"科幻\",\"url\":\"/index/filter_book_list?tag=%E7%A7%91%E5%B9%BB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"古代\",\"url\":\"/index/filter_book_list?tag=%E5%8F%A4%E4%BB%A3&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"民国\",\"url\":\"/index/filter_book_list?tag=%E6%B0%91%E5%9B%BD&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"现代\",\"url\":\"/index/filter_book_list?tag=%E7%8E%B0%E4%BB%A3&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"都市\",\"url\":\"/index/filter_book_list?tag=%E9%83%BD%E5%B8%82&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"武侠\",\"url\":\"/index/filter_book_list?tag=%E6%AD%A6%E4%BE%A0&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"仙侠\",\"url\":\"/index/filter_book_list?tag=%E4%BB%99%E4%BE%A0&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"玄幻\",\"url\":\"/index/filter_book_list?tag=%E7%8E%84%E5%B9%BB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"架空\",\"url\":\"/index/filter_book_list?tag=%E6%9E%B6%E7%A9%BA&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"穿越\",\"url\":\"/index/filter_book_list?tag=%E7%A9%BF%E8%B6%8A&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"重生\",\"url\":\"/index/filter_book_list?tag=%E9%87%8D%E7%94%9F&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"动漫\",\"url\":\"/index/filter_book_list?tag=%E5%8A%A8%E6%BC%AB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"网游\",\"url\":\"/index/filter_book_list?tag=%E7%BD%91%E6%B8%B8&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"悬疑\",\"url\":\"/index/filter_book_list?tag=%E6%82%AC%E7%96%91&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"灵异\",\"url\":\"/index/filter_book_list?tag=%E7%81%B5%E5%BC%82&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"完本\",\"url\":\"/index/filter_book_list?tag=%E5%AE%8C%E6%9C%AC&tag_module=ended&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.21}}]",
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Mobile Safari/537.36\"\n}",
    "lastUpdateTime": 1685784280655,
    "loginUrl": "https://m.shubl.com/signup/login",
    "respondTime": 4852,
    "ruleBookInfo": {
      "author": "class.author.0@text##\\s.*",
      "coverUrl": "class.thumb.0@img@data-original",
      "intro": ".info div.4@html&&.J_DescContent@html",
      "kind": "class.author.0@text&&class.pull-right.0@text##.*\\s|.*：",
      "name": ".name@text",
      "tocUrl": "class.container.1@a@href",
      "wordCount": ".numbers span.0@text"
    },
    "ruleContent": {
      "content": "#J_BookRead@html",
      "imageStyle": "0"
    },
    "ruleExplore": {
      "author": "",
      "bookList": "",
      "bookUrl": "",
      "coverUrl": "",
      "intro": "",
      "name": ""
    },
    "ruleReview": {},
    "ruleSearch": {
      "author": "div.1@text",
      "bookList": ".book-list li",
      "bookUrl": "a@href",
      "coverUrl": "img@data-original",
      "intro": "div.2@text",
      "name": "span.1@text"
    },
    "ruleToc": {
      "chapterList": ".list li",
      "chapterName": "p.0@text",
      "chapterUrl": "a@href##$##,{\"webView\":true}",
      "isVip": "i@text##^##🔒",
      "updateTime": "p.1@text"
    },
    "searchUrl": "/index/search_book?key={{key}}",
    "weight": 0
  },
  {
    "bookSourceComment": "",
    "bookSourceGroup": "",
    "bookSourceName": "💰 书耽[搜索]",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.shubl.com#",
    "bookUrlPattern": "",
    "customOrder": 2355,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "",
    "header": "",
    "lastUpdateTime": 1630860039883,
    "loginUrl": "http://m.shubl.com/signup/login",
    "respondTime": 3608,
    "ruleBookInfo": {
      "author": "",
      "coverUrl": "",
      "init": "",
      "intro": "",
      "kind": "",
      "lastChapter": "",
      "name": "",
      "tocUrl": "",
      "wordCount": ""
    },
    "ruleContent": {
      "content": "class.article-content@p@textNodes",
      "nextContentUrl": "",
      "sourceRegex": "",
      "webJs": ""
    },
    "ruleExplore": {
      "author": "",
      "bookList": "",
      "bookUrl": "",
      "coverUrl": "",
      "intro": "",
      "kind": "",
      "lastChapter": "",
      "name": "",
      "wordCount": ""
    },
    "ruleSearch": {
      "author": "author",
      "bookList": ".book-list li@js:\nresult.toArray().map(o =>{\n    var detail= String(o.select('.book-name').attr('href')).replace(/^\\//, baseUrl.match(/(.+\\/\\/.+?\\/)/)[1]);\n    var oText = s=>String(o.select(s).text().trim());\n    var J = org.jsoup.Jsoup.parse(java.ajax(detail));\n    var jText = s=>String(J.select(s).text().trim());\n    return {\n        name: oText('.book-name'),\n        author: oText('.smaller').replace(/\\s*作者：(\\S+).+/, '$1'),\n        tags: [String(J.select('.book-title .tag').toArray().map(tag =>tag.text()).join(' / '),J.select('.book-info > .row .tag').toArray().map(tag =>String(tag.text())).filter(v =>v.length < 5).slice(0, 2).join(','))].join(','),\n        num:jText('.book-info-numbers span:eq(0)').replace(/●|总字数：/g, '')+'字',\n        latest: oText('.smaller').replace(/.+\\D(\\d+-\\d+-\\d+).+\\/\\s*(.+)/, '$2（$1）').replace(/[\\(（【].*[求更谢乐发推].*[】）\\)]/,'').replace(/.*(第[^章]+章)/,'$1'),\n        intro: jText('.book-brief').replace(/\\s*简介：/, '').replace(/[\\s\\t]+/g, ''),\n        cover: o.select('.cover').attr('data-original'),\n        catalogUrl: detail\n    }\n}).filter(v =>v.name);",
      "bookUrl": "catalogUrl",
      "coverUrl": "cover",
      "intro": "intro",
      "kind": "tags",
      "lastChapter": "latest",
      "name": "name",
      "wordCount": "num"
    },
    "ruleToc": {
      "chapterList": ".chapter_item a",
      "chapterName": "a@text##.*(第[^章]+章)|[\\(（【].*[求更谢乐发推].*[】）\\)]##$1",
      "chapterUrl": "a@href##$##,{\"webView\":true}",
      "isVip": "@js:result.outerHtml().includes('lock')",
      "nextTocUrl": "",
      "updateTime": ""
    },
    "searchUrl": "/index/get_search_book_list/{{key}}/{{page}}",
    "weight": 0
  },
  {
    "bookSourceComment": "login_name：账号\npasswd：密码\nlogin_token：填写账号密码调试后获取\naccount：填写账号密码调试后获取\n请填写账号密码，调试后复制 login_token 和 account，粘贴到搜索里。如需发现，粘贴到发现列表相关位置。",
    "bookSourceGroup": "",
    "bookSourceName": "㊣♛书耽▪︎API #渊呀",
    "bookSourceType": 0,
    "bookSourceUrl": "https://app.shubl.com#yuan1107",
    "bookUrlPattern": "",
    "customOrder": 3095,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "全部纯爱::https://www.baidu.com/category_type=1&order=week_click&page={{page}}\n现纯::https://www.baidu.com/category_type=4&order=week_click&page={{page}}\n幻纯::https://www.baidu.com/category_type=5&order=week_click&page={{page}}\n古纯::https://www.baidu.com/category_type=6&order=week_click&page={{page}}\n百合::https://www.baidu.com/category_type=3&order=week_click&page={{page}}\n全部言情::https://www.baidu.com/category_type=20&order=week_click&page={{page}}\n现言::https://www.baidu.com/category_type=8&order=week_click&page={{page}}\n幻言::https://www.baidu.com/category_type=9&order=week_click&page={{page}}\n古言::https://www.baidu.com/category_type=10&order=week_click&page={{page}}\n无CP::https://www.baidu.com/category_type=21&order=week_click&page={{page}}\n付费&连载&更新时间::https://www.baidu.com/category_type=1&order=uptime&up_status=0&is_paid=1&page={{page}}\n付费&完本&更新时间::https://www.baidu.com/category_type=1&order=uptime&up_status=1&is_paid=1&page={{page}}\n每日签到::https://www.baidu.com/get_daily_task_bonus",
    "header": "",
    "lastUpdateTime": 1680414048005,
    "loginUrl": "",
    "respondTime": 5320,
    "ruleBookInfo": {
      "author": "$.author_name",
      "coverUrl": "$.cover",
      "init": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\ndecode(result)\n</js>\n$.data.book_info",
      "intro": "$.description",
      "kind": "$.tag",
      "lastChapter": "{{$.last_chapter_info.chapter_title}} / {{$.last_chapter_info.uptime}}",
      "name": "$.book_name",
      "tocUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\n\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"last_update_time\":\"0\",\"book_id\":{{$.book_id}},\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/chapter/get_chapter_list_group_by_division,\" + JSON.stringify(option)",
      "wordCount": "$.total_word_count"
    },
    "ruleContent": {
      "content": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\ndecode(result)\n</js>\n$.data.chapter_info.txt_content"
    },
    "ruleExplore": {
      "author": "$.author_name",
      "bookList": "<js>\njava.put('login_token','32940914bd5e10756142366b6b9c7cd6')\njava.put('account','萌友28482221176')\n</js>\n<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\nresponse=null\nif(!baseUrl.match(/get_daily_task_bonus/)){\ncategory_type=baseUrl.match(/category_type=(\\d+)/)?baseUrl.match(/category_type=(\\d+)/)[1]:\"\"\norder=baseUrl.match(/order=(.+?)&/)?baseUrl.match(/order=(.+?)&/)[1]:\"\"\nis_paid=baseUrl.match(/is_paid=(\\d)&/)?baseUrl.match(/is_paid=(\\d)&/)[1]:\"\"\nup_status=baseUrl.match(/up_status=(\\d)&/)?baseUrl.match(/up_status=(\\d)&/)[1]:\"\"\njsonObj={\"category_type\":category_type,\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"order\":order,\"count\":\"15\",\"is_paid\":is_paid,\"page\":String(baseUrl.match(/page=(\\d+)/)[1]-1),\"up_status\":up_status,\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\njava.log(JSON.stringify(jsonObj))\noption={\"method\":\"POST\",\"body\":\"secret_content=\"+encodeURIComponent(encode(JSON.stringify(jsonObj)))}\nurl=\"https://app.shubl.com/bookcity/get_filter_search_book_list,\"+JSON.stringify(option)\nresponse=decode(java.ajax(url))\n}else{\njsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"task_type\":\"1\",\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\noption={\"method\":\"POST\",\"body\":\"secret_content=\"+encodeURIComponent(encode(JSON.stringify(jsonObj)))}\nurl=\"https://app.shubl.com/reader/get_daily_task_bonus,\"+JSON.stringify(option)\nresponse=decode(java.ajax(url))\n}\n\n// 打印解密结果\njava.log(JSON.stringify(JSON.parse(response)))\nresponse\n</js>\n$.data.book_list||$.[*]",
      "bookUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\nif(!baseUrl.match(/get_daily_task_bonus/)){\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"book_id\":String(java.getString('$.book_id')),\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/book/get_info_by_id,\" + JSON.stringify(option)\n}else{\nbaseUrl\n}",
      "coverUrl": "$.cover",
      "intro": "$.description",
      "kind": "$.tag",
      "lastChapter": "{{$.last_chapter_info.chapter_title}} / {{$.last_chapter_info.uptime}}",
      "name": "$.book_name@put:{bid:book_id}||$",
      "wordCount": "$.total_word_count"
    },
    "ruleSearch": {
      "author": "$.author_name",
      "bookList": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\n\nresponse=decode(result)\n// 打印解密结果\njava.log(JSON.stringify(JSON.parse(response)))\nresponse\n</js>\n$.data.book_list",
      "bookUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\n\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"book_id\":{{$.book_id}},\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/book/get_info_by_id,\" + JSON.stringify(option)\n\n\n\n",
      "coverUrl": "$.cover",
      "intro": "$.description",
      "kind": "$.tag",
      "lastChapter": "{{$.last_chapter_info.chapter_title}} / {{$.last_chapter_info.uptime}}",
      "name": "$.book_name@put:{bid:book_id}",
      "wordCount": "$.total_word_count"
    },
    "ruleToc": {
      "chapterList": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\ndecode(result)\n</js>\n$.data.chapter_list_group[*].chapter_list[*]",
      "chapterName": "$.chapter_title",
      "chapterUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\n\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"chapter_id\":{{$.chapter_id}},\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\n\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/chapter/get_chapter_info,\" + JSON.stringify(option)\n\n\n",
      "isVip": "@js:!{{$.auth_access}}",
      "updateTime": "{{$.word_count}} 字 发布于 {{$.uptime}}"
    },
    "searchUrl": "@js:\n/**\n填写账号密码调试后获取 login_token 和 account，分别填入。\n**/\n\nlogin_name=\"\"\npasswd=\"\"\nlogin_token=\"\"\naccount=\"\"\n\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\n\nif (login_name && passwd && !login_token && !account) {\n    let jsonStr = {\n        \"login_name\": login_name,\n        \"passwd\": passwd,\n        \"app_signature_md5\": \"f73576612783f8ed8b68cdf73a56be94\",\n        \"app_version\": \"2.1.6\",\n        \"channel\": \"default\"\n    }\n    let body = \"secret_content=\" + encode(JSON.stringify(jsonStr));\n    let option = {\n        \"method\": \"POST\",\n        \"body\": String(body)\n    };\n    url = \"https://app.shubl.com/signup/login,\" + JSON.stringify(option)\n    resp = JSON.parse(decode(java.ajax(url)))\n    if (resp.code == \"100000\") {\n        java.log('❗️ 这是你的 login_token，请复制 ❗️：' + resp.data.login_token + '\\n' + '❗️ 这是你的 account，请复制 ❗️：' + resp.data.reader_info.account)\n    } else {\n        java.log('❗️ ' + resp.tip + ' ❗️')\n    }\n} else {\n    java.log('❗️ 如需看付费章节，请登录！ ❗️')\n}\n\njava.put('login_token',login_token!=\"\"?login_token:\"0f6bd1d063f202f71c3b84678027ce81\")\njava.put('account',account!=\"\"?account:\"萌友521068519938\")\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"order\":\"week_click\",\"count\":\"15\",\"category_type\":\"1\",\"page\":page-1,\"key\":key,\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/bookcity/get_filter_search_book_list,\" + JSON.stringify(option)",
    "weight": 0
  },
  {
    "bookSourceComment": "login_name：账号\npasswd：密码\nlogin_token：填写账号密码调试后获取\naccount：填写账号密码调试后获取\n请填写账号密码，调试后复制 login_token 和 account，粘贴到搜索里。如需发现，粘贴到发现列表相关位置。",
    "bookSourceGroup": "",
    "bookSourceName": "📚 书耽网站",
    "bookSourceType": 0,
    "bookSourceUrl": "https://app.shubl.com/",
    "bookUrlPattern": "",
    "customOrder": 3148,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "全部纯爱::category_type=1&order=week_click&page={{page}}\n现纯::category_type=4&order=week_click&page={{page}}\n幻纯::category_type=5&order=week_click&page={{page}}\n古纯::category_type=6&order=week_click&page={{page}}\n百合::category_type=3&order=week_click&page={{page}}\n全部言情::category_type=20&order=week_click&page={{page}}\n现言::category_type=8&order=week_click&page={{page}}\n幻言::category_type=9&order=week_click&page={{page}}\n古言::category_type=10&order=week_click&page={{page}}\n无CP::category_type=21&order=week_click&page={{page}}\n付费&连载&更新时间::category_type=1&order=uptime&up_status=0&is_paid=1&page={{page}}\n付费&完本&更新时间::category_type=1&order=uptime&up_status=1&is_paid=1&page={{page}}\n每日签到::get_daily_task_bonus",
    "header": "",
    "lastUpdateTime": 1676812604899,
    "loginUrl": "",
    "respondTime": 4782,
    "ruleBookInfo": {
      "author": "$.author_name",
      "coverUrl": "$.cover",
      "init": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\ndecode(result)\n</js>\n$.data.book_info",
      "intro": "$.description",
      "kind": "$.tag",
      "lastChapter": "{{$.last_chapter_info.chapter_title}} / {{$.last_chapter_info.uptime}}",
      "name": "$.book_name",
      "tocUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\n\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"last_update_time\":\"0\",\"book_id\":{{$.book_id}},\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/chapter/get_chapter_list_group_by_division,\" + JSON.stringify(option)",
      "wordCount": "$.total_word_count"
    },
    "ruleContent": {
      "content": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\ndecode(result)\n</js>\n$.data.chapter_info.txt_content"
    },
    "ruleExplore": {
      "author": "$.author_name",
      "bookList": "<js>\njava.put('login_token','32940914bd5e10756142366b6b9c7cd6')\njava.put('account','萌友28482221176')\n</js>\n<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\nresponse=null\nif(!baseUrl.match(/get_daily_task_bonus/)){\ncategory_type=baseUrl.match(/category_type=(\\d+)/)?baseUrl.match(/category_type=(\\d+)/)[1]:\"\"\norder=baseUrl.match(/order=(.+?)&/)?baseUrl.match(/order=(.+?)&/)[1]:\"\"\nis_paid=baseUrl.match(/is_paid=(\\d)&/)?baseUrl.match(/is_paid=(\\d)&/)[1]:\"\"\nup_status=baseUrl.match(/up_status=(\\d)&/)?baseUrl.match(/up_status=(\\d)&/)[1]:\"\"\njsonObj={\"category_type\":category_type,\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"order\":order,\"count\":\"15\",\"is_paid\":is_paid,\"page\":String(baseUrl.match(/page=(\\d+)/)[1]-1),\"up_status\":up_status,\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\njava.log(JSON.stringify(jsonObj))\noption={\"method\":\"POST\",\"body\":\"secret_content=\"+encodeURIComponent(encode(JSON.stringify(jsonObj)))}\nurl=\"https://app.shubl.com/bookcity/get_filter_search_book_list,\"+JSON.stringify(option)\nresponse=decode(java.ajax(url))\n}else{\njsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"task_type\":\"1\",\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\noption={\"method\":\"POST\",\"body\":\"secret_content=\"+encodeURIComponent(encode(JSON.stringify(jsonObj)))}\nurl=\"https://app.shubl.com/reader/get_daily_task_bonus,\"+JSON.stringify(option)\nresponse=decode(java.ajax(url))\n}\n\n// 打印解密结果\njava.log(JSON.stringify(JSON.parse(response)))\nresponse\n</js>\n$.data.book_list||$.[*]",
      "bookUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\nif(!baseUrl.match(/get_daily_task_bonus/)){\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"book_id\":String(java.getString('$.book_id')),\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/book/get_info_by_id,\" + JSON.stringify(option)\n}else{\nbaseUrl\n}",
      "coverUrl": "$.cover",
      "intro": "$.description",
      "kind": "$.tag",
      "lastChapter": "{{$.last_chapter_info.chapter_title}} / {{$.last_chapter_info.uptime}}",
      "name": "$.book_name@put:{bid:book_id}||$",
      "wordCount": "$.total_word_count"
    },
    "ruleSearch": {
      "author": "$.author_name",
      "bookList": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\n\nresponse=decode(result)\n// 打印解密结果\njava.log(JSON.stringify(JSON.parse(response)))\nresponse\n</js>\n$.data.book_list",
      "bookUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\n\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"book_id\":{{$.book_id}},\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/book/get_info_by_id,\" + JSON.stringify(option)\n\n\n\n",
      "coverUrl": "$.cover",
      "intro": "$.description",
      "kind": "$.tag",
      "lastChapter": "{{$.last_chapter_info.chapter_title}} / {{$.last_chapter_info.uptime}}",
      "name": "$.book_name@put:{bid:book_id}",
      "wordCount": "$.total_word_count"
    },
    "ruleToc": {
      "chapterList": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\ndecode(result)\n</js>\n$.data.chapter_list_group[*].chapter_list[*]",
      "chapterName": "$.chapter_title",
      "chapterUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\n\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"chapter_id\":{{$.chapter_id}},\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\n\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/chapter/get_chapter_info,\" + JSON.stringify(option)\n\n\n",
      "isVip": "@js:!{{$.auth_access}}",
      "updateTime": "{{$.word_count}} 字 发布于 {{$.uptime}}"
    },
    "searchUrl": "@js:\n/**\n填写账号密码调试后获取 login_token 和 account，分别填入。\n**/\n\nlogin_name=\"\"\npasswd=\"\"\nlogin_token=\"\"\naccount=\"\"\n\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\n\nif (login_name && passwd && !login_token && !account) {\n    let jsonStr = {\n        \"login_name\": login_name,\n        \"passwd\": passwd,\n        \"app_signature_md5\": \"f73576612783f8ed8b68cdf73a56be94\",\n        \"app_version\": \"2.1.6\",\n        \"channel\": \"default\"\n    }\n    let body = \"secret_content=\" + encode(JSON.stringify(jsonStr));\n    let option = {\n        \"method\": \"POST\",\n        \"body\": String(body)\n    };\n    url = \"https://app.shubl.com/signup/login,\" + JSON.stringify(option)\n    resp = JSON.parse(decode(java.ajax(url)))\n    if (resp.code == \"100000\") {\n        java.log('❗️ 这是你的 login_token，请复制 ❗️：' + resp.data.login_token + '\\n' + '❗️ 这是你的 account，请复制 ❗️：' + resp.data.reader_info.account)\n    } else {\n        java.log('❗️ ' + resp.tip + ' ❗️')\n    }\n} else {\n    java.log('❗️ 如需看付费章节，请登录！ ❗️')\n}\n\njava.put('login_token',login_token!=\"\"?login_token:\"0f6bd1d063f202f71c3b84678027ce81\")\njava.put('account',account!=\"\"?account:\"萌友521068519938\")\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"order\":\"week_click\",\"count\":\"15\",\"category_type\":\"1\",\"page\":page-1,\"key\":key,\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/bookcity/get_filter_search_book_list,\" + JSON.stringify(option)",
    "weight": 0
  },
  {
    "bookSourceComment": "",
    "bookSourceGroup": "",
    "bookSourceName": "💰 书耽[搜索]",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.shubl.com",
    "bookUrlPattern": "",
    "customOrder": 3672,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "",
    "header": "",
    "lastUpdateTime": 1699553427567,
    "loginUrl": "http://m.shubl.com/signup/login",
    "respondTime": 2941,
    "ruleBookInfo": {
      "author": "",
      "coverUrl": "",
      "init": "",
      "intro": "",
      "kind": "",
      "lastChapter": "",
      "name": "",
      "tocUrl": "",
      "wordCount": ""
    },
    "ruleContent": {
      "content": "class.article-content@p@textNodes",
      "nextContentUrl": "",
      "sourceRegex": "",
      "webJs": ""
    },
    "ruleExplore": {
      "author": "",
      "bookList": "",
      "bookUrl": "",
      "coverUrl": "",
      "intro": "",
      "kind": "",
      "lastChapter": "",
      "name": "",
      "wordCount": ""
    },
    "ruleSearch": {
      "author": "author",
      "bookList": ".book-list li@js:\nresult.toArray().map(o =>{\n    var detail= String(o.select('.book-name').attr('href')).replace(/^\\//, baseUrl.match(/(.+\\/\\/.+?\\/)/)[1]);\n    var oText = s=>String(o.select(s).text().trim());\n    var J = org.jsoup.Jsoup.parse(java.ajax(detail));\n    var jText = s=>String(J.select(s).text().trim());\n    return {\n        name: oText('.book-name'),\n        author: oText('.smaller').replace(/\\s*作者：(\\S+).+/, '$1'),\n        tags: [String(J.select('.book-title .tag').toArray().map(tag =>tag.text()).join(' / '),J.select('.book-info > .row .tag').toArray().map(tag =>String(tag.text())).filter(v =>v.length < 5).slice(0, 2).join(','))].join(','),\n        num:jText('.book-info-numbers span:eq(0)').replace(/●|总字数：/g, '')+'字',\n        latest: oText('.smaller').replace(/.+\\D(\\d+-\\d+-\\d+).+\\/\\s*(.+)/, '$2（$1）').replace(/[\\(（【].*[求更谢乐发推].*[】）\\)]/,'').replace(/.*(第[^章]+章)/,'$1'),\n        intro: jText('.book-brief').replace(/\\s*简介：/, '').replace(/[\\s\\t]+/g, ''),\n        cover: o.select('.cover').attr('data-original'),\n        catalogUrl: detail\n    }\n}).filter(v =>v.name);",
      "bookUrl": "catalogUrl",
      "coverUrl": "cover",
      "intro": "intro",
      "kind": "tags",
      "lastChapter": "latest",
      "name": "name",
      "wordCount": "num"
    },
    "ruleToc": {
      "chapterList": ".chapter_item a",
      "chapterName": "a@text##.*(第[^章]+章)|[\\(（【].*[求更谢乐发推].*[】）\\)]##$1",
      "chapterUrl": "a@href##$##,{\"webView\":true}",
      "isVip": "@js:result.outerHtml().includes('lock')",
      "nextTocUrl": "",
      "updateTime": ""
    },
    "searchUrl": "/index/get_search_book_list/{{key}}/{{page}}",
    "weight": 0
  },
  {
    "bookSourceComment": "",
    "bookSourceGroup": "",
    "bookSourceName": "㊣ 书耽 🔥 #一程1101",
    "bookSourceType": 0,
    "bookSourceUrl": "http://m.shubl.com#yc1101",
    "bookUrlPattern": "",
    "customOrder": 3902,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "[{\"title\":\"签约\",\"url\":\"/index/filter_book_list?tag=%E7%AD%BE%E7%BA%A6&tag_module=signed&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"甜文\",\"url\":\"/index/filter_book_list?tag=%E7%94%9C%E6%96%87&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"爽文\",\"url\":\"/index/filter_book_list?tag=%E7%88%BD%E6%96%87&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"ＨＥ\",\"url\":\"/index/filter_book_list?tag=HE&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"ＢＥ\",\"url\":\"/index/filter_book_list?tag=BE&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"快穿\",\"url\":\"/index/filter_book_list?tag=%E5%BF%AB%E7%A9%BF&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"青春\",\"url\":\"/index/filter_book_list?tag=%E9%9D%92%E6%98%A5&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"校园\",\"url\":\"/index/filter_book_list?tag=%E6%A0%A1%E5%9B%AD&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"百合\",\"url\":\"/index/filter_book_list?tag=%E7%99%BE%E5%90%88&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"科幻\",\"url\":\"/index/filter_book_list?tag=%E7%A7%91%E5%B9%BB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"古代\",\"url\":\"/index/filter_book_list?tag=%E5%8F%A4%E4%BB%A3&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"民国\",\"url\":\"/index/filter_book_list?tag=%E6%B0%91%E5%9B%BD&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"现代\",\"url\":\"/index/filter_book_list?tag=%E7%8E%B0%E4%BB%A3&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"都市\",\"url\":\"/index/filter_book_list?tag=%E9%83%BD%E5%B8%82&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"武侠\",\"url\":\"/index/filter_book_list?tag=%E6%AD%A6%E4%BE%A0&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"仙侠\",\"url\":\"/index/filter_book_list?tag=%E4%BB%99%E4%BE%A0&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"玄幻\",\"url\":\"/index/filter_book_list?tag=%E7%8E%84%E5%B9%BB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"架空\",\"url\":\"/index/filter_book_list?tag=%E6%9E%B6%E7%A9%BA&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"穿越\",\"url\":\"/index/filter_book_list?tag=%E7%A9%BF%E8%B6%8A&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"重生\",\"url\":\"/index/filter_book_list?tag=%E9%87%8D%E7%94%9F&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"动漫\",\"url\":\"/index/filter_book_list?tag=%E5%8A%A8%E6%BC%AB&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"网游\",\"url\":\"/index/filter_book_list?tag=%E7%BD%91%E6%B8%B8&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"悬疑\",\"url\":\"/index/filter_book_list?tag=%E6%82%AC%E7%96%91&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"灵异\",\"url\":\"/index/filter_book_list?tag=%E7%81%B5%E5%BC%82&tag_module=&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.2,\"layout_flexGrow\":1}},\n{\"title\":\"完本\",\"url\":\"/index/filter_book_list?tag=%E5%AE%8C%E6%9C%AC&tag_module=ended&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.21}}]",
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Mobile Safari/537.36\"\n}",
    "lastUpdateTime": 1680413897790,
    "loginUrl": "https://m.shubl.com/signup/login",
    "respondTime": 3815,
    "ruleBookInfo": {
      "author": "class.author.0@text##\\s.*",
      "coverUrl": "class.thumb.0@img@data-original",
      "intro": ".info div.4@html&&.J_DescContent@html",
      "kind": "class.author.0@text&&class.pull-right.0@text##.*\\s|.*：",
      "name": ".name@text",
      "tocUrl": "class.container.1@a@href",
      "wordCount": ".numbers span.0@text"
    },
    "ruleContent": {
      "content": "#J_BookRead@html",
      "imageStyle": "0"
    },
    "ruleExplore": {
      "author": "",
      "bookList": "",
      "bookUrl": "",
      "coverUrl": "",
      "intro": "",
      "name": ""
    },
    "ruleSearch": {
      "author": "div.1@text",
      "bookList": ".book-list li",
      "bookUrl": "a@href",
      "coverUrl": "img@data-original",
      "intro": "div.2@text",
      "name": "span.1@text"
    },
    "ruleToc": {
      "chapterList": ".list li",
      "chapterName": "p.0@text",
      "chapterUrl": "a@href##$##,{\"webView\":true}",
      "isVip": "i@text##^##🔒",
      "updateTime": "p.1@text"
    },
    "searchUrl": "/index/search_book?key={{key}}",
    "weight": 0
  },
  {
    "bookSourceComment": "login_name：账号\npasswd：密码\nlogin_token：填写账号密码调试后获取\naccount：填写账号密码调试后获取\n请填写账号密码，调试后复制 login_token 和 account，粘贴到搜索里。如需发现，粘贴到发现列表相关位置。",
    "bookSourceGroup": "",
    "bookSourceName": "💵 书耽API",
    "bookSourceType": 0,
    "bookSourceUrl": "https://app.shubl.com",
    "bookUrlPattern": "",
    "customOrder": 4224,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "enabledReview": false,
    "exploreUrl": "全部纯爱::https://www.baidu.com/category_type=1&order=week_click&page={{page}}\n现纯::https://www.baidu.com/category_type=4&order=week_click&page={{page}}\n幻纯::https://www.baidu.com/category_type=5&order=week_click&page={{page}}\n古纯::https://www.baidu.com/category_type=6&order=week_click&page={{page}}\n百合::https://www.baidu.com/category_type=3&order=week_click&page={{page}}\n全部言情::https://www.baidu.com/category_type=20&order=week_click&page={{page}}\n现言::https://www.baidu.com/category_type=8&order=week_click&page={{page}}\n幻言::https://www.baidu.com/category_type=9&order=week_click&page={{page}}\n古言::https://www.baidu.com/category_type=10&order=week_click&page={{page}}\n无CP::https://www.baidu.com/category_type=21&order=week_click&page={{page}}\n付费&连载&更新时间::https://www.baidu.com/category_type=1&order=uptime&up_status=0&is_paid=1&page={{page}}\n付费&完本&更新时间::https://www.baidu.com/category_type=1&order=uptime&up_status=1&is_paid=1&page={{page}}\n每日签到::https://www.baidu.com/get_daily_task_bonus",
    "header": "",
    "lastUpdateTime": 1681032482951,
    "loginUrl": "",
    "respondTime": 4410,
    "ruleBookInfo": {
      "author": "$.author_name",
      "coverUrl": "$.cover",
      "init": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\ndecode(result)\n</js>\n$.data.book_info",
      "intro": "$.description",
      "kind": "$.tag",
      "lastChapter": "{{$.last_chapter_info.chapter_title}} / {{$.last_chapter_info.uptime}}",
      "name": "$.book_name",
      "tocUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\n\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"last_update_time\":\"0\",\"book_id\":{{$.book_id}},\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/chapter/get_chapter_list_group_by_division,\" + JSON.stringify(option)",
      "wordCount": "$.total_word_count"
    },
    "ruleContent": {
      "content": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\ndecode(result)\n</js>\n$.data.chapter_info.txt_content"
    },
    "ruleExplore": {
      "author": "$.author_name",
      "bookList": "<js>\njava.put('login_token','32940914bd5e10756142366b6b9c7cd6')\njava.put('account','萌友28482221176')\n</js>\n<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\nresponse=null\nif(!baseUrl.match(/get_daily_task_bonus/)){\ncategory_type=baseUrl.match(/category_type=(\\d+)/)?baseUrl.match(/category_type=(\\d+)/)[1]:\"\"\norder=baseUrl.match(/order=(.+?)&/)?baseUrl.match(/order=(.+?)&/)[1]:\"\"\nis_paid=baseUrl.match(/is_paid=(\\d)&/)?baseUrl.match(/is_paid=(\\d)&/)[1]:\"\"\nup_status=baseUrl.match(/up_status=(\\d)&/)?baseUrl.match(/up_status=(\\d)&/)[1]:\"\"\njsonObj={\"category_type\":category_type,\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"order\":order,\"count\":\"15\",\"is_paid\":is_paid,\"page\":String(baseUrl.match(/page=(\\d+)/)[1]-1),\"up_status\":up_status,\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\njava.log(JSON.stringify(jsonObj))\noption={\"method\":\"POST\",\"body\":\"secret_content=\"+encodeURIComponent(encode(JSON.stringify(jsonObj)))}\nurl=\"https://app.shubl.com/bookcity/get_filter_search_book_list,\"+JSON.stringify(option)\nresponse=decode(java.ajax(url))\n}else{\njsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"task_type\":\"1\",\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\noption={\"method\":\"POST\",\"body\":\"secret_content=\"+encodeURIComponent(encode(JSON.stringify(jsonObj)))}\nurl=\"https://app.shubl.com/reader/get_daily_task_bonus,\"+JSON.stringify(option)\nresponse=decode(java.ajax(url))\n}\n\n// 打印解密结果\n//java.log(JSON.stringify(JSON.parse(response)))\nresponse\n</js>\n$.data.book_list||$.[*]",
      "bookUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\nif(!baseUrl.match(/get_daily_task_bonus/)){\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"book_id\":String(java.getString('$.book_id')),\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/book/get_info_by_id,\" + JSON.stringify(option)\n}else{\nbaseUrl\n}",
      "coverUrl": "$.cover",
      "intro": "$.description",
      "kind": "$.tag",
      "lastChapter": "{{$.last_chapter_info.chapter_title}} / {{$.last_chapter_info.uptime}}",
      "name": "$.book_name@put:{bid:book_id}||$",
      "wordCount": "$.total_word_count"
    },
    "ruleReview": {},
    "ruleSearch": {
      "author": "$.author_name",
      "bookList": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\n\nresponse=decode(result)\n// 打印解密结果\njava.log(JSON.stringify(JSON.parse(response)))\nresponse\n</js>\n$.data.book_list",
      "bookUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\n\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"book_id\":{{$.book_id}},\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/book/get_info_by_id,\" + JSON.stringify(option)",
      "coverUrl": "$.cover",
      "intro": "$.description",
      "kind": "$.tag",
      "lastChapter": "{{$.last_chapter_info.chapter_title}} / {{$.last_chapter_info.uptime}}",
      "name": "$.book_name@put:{bid:book_id}",
      "wordCount": "$.total_word_count"
    },
    "ruleToc": {
      "chapterList": "<js>\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\ndecode(result)\n</js>\n$.data.chapter_list_group[*].chapter_list[*]",
      "chapterName": "$.chapter_title",
      "chapterUrl": "@js:\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n}\n\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"chapter_id\":{{$.chapter_id}},\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\n\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/chapter/get_chapter_info,\" + JSON.stringify(option)\n\n\n",
      "isVip": "@js:!{{$.auth_access}}",
      "updateTime": "{{$.word_count}} 字 发布于 {{$.uptime}}"
    },
    "searchUrl": "@js:\n/**\n填写账号密码调试后获取 login_token 和 account，分别填入。\n**/\n\nlogin_name=\"\"\npasswd=\"\"\nlogin_token=\"\"\naccount=\"\"\n\nvar javaImport = new JavaImporter();\njavaImport.importPackage(\n    Packages.java.lang,\n    Packages.javax.crypto.spec,\n    Packages.javax.crypto,\n    Packages.android.util\n);\n\nwith(javaImport){\n  function encode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      chipher.init(1,key,iv);\n      return java.encodeURI(Base64.encodeToString(chipher.doFinal(String(word).getBytes()),Base64.NO_WRAP));\n    }\n  function decode(word){\n      let key=SecretKeySpec(java.base64DecodeToByteArray(\"nvlrM3RT6n0iYj4I/zbGqisUGGMpy3UT84cNphYONC8=\"),\"AES\");\n      let iv=IvParameterSpec(java.base64DecodeToByteArray(\"AAAAAAAAAAAAAAAAAAAAAA==\"));\n      let chipher=Cipher.getInstance(\"AES/CBC/PKCS5Padding\");\n      let bytes=Base64.decode(String(word).getBytes(),2);\n      chipher.init(2,key,iv);\n      return String(chipher.doFinal(bytes));\n    }\n}\n\nif (login_name && passwd && !login_token && !account) {\n    let jsonStr = {\n        \"login_name\": login_name,\n        \"passwd\": passwd,\n        \"app_signature_md5\": \"f73576612783f8ed8b68cdf73a56be94\",\n        \"app_version\": \"2.1.6\",\n        \"channel\": \"default\"\n    }\n    let body = \"secret_content=\" + encode(JSON.stringify(jsonStr));\n    let option = {\n        \"method\": \"POST\",\n        \"body\": String(body)\n    };\n    url = \"https://app.shubl.com/signup/login,\" + JSON.stringify(option)\n    resp = JSON.parse(decode(java.ajax(url)))\n    if (resp.code == \"100000\") {\n        java.log('❗️ 这是你的 login_token，请复制 ❗️：' + resp.data.login_token + '\\n' + '❗️ 这是你的 account，请复制 ❗️：' + resp.data.reader_info.account)\n    } else {\n        java.log('❗️ ' + resp.tip + ' ❗️')\n    }\n} else {\n    java.log('❗️ 如需看付费章节，请登录！ ❗️')\n}\n\njava.put('login_token',login_token!=\"\"?login_token:\"0f6bd1d063f202f71c3b84678027ce81\")\njava.put('account',account!=\"\"?account:\"萌友521068519938\")\nlet jsonObj={\"app_signature_md5\":\"f73576612783f8ed8b68cdf73a56be94\",\"app_version\":\"2.1.6\",\"channel\":\"default\",\"order\":\"week_click\",\"count\":\"15\",\"category_type\":\"1\",\"page\":page-1,\"key\":key,\"login_token\":String(java.get('login_token')),\"account\":String(java.get('account'))}\nlet body = \"secret_content=\"+encode(JSON.stringify(jsonObj));\nlet option = {\"method\": \"POST\",\"body\": String(body)};\n\"https://app.shubl.com/bookcity/get_filter_search_book_list,\" + JSON.stringify(option)",
    "weight": 0
  }
]