[{"bookSourceGroup":"漫画","bookSourceName":"奇漫屋（qimanwu）","bookSourceType":2,"bookSourceUrl":"https:\/\/m.qimanwu.app","customButton":false,"customOrder":82,"enabled":true,"enabledCookieJar":true,"enabledExplore":true,"eventListener":false,"exploreUrl":"@js:\nfunction qimanwu() {\n   let disc = [];\nlet tagHtml = java.ajax(`${source.key}\/custom\/search`);\n  let doc = org.jsoup.Jsoup.parse(tagHtml);\n  let tags = doc.select(\".groupList li a\");\n  Array.from(tags).forEach(a => {\n    disc.push({\n      title: a.text(),\n      url: a.attr(\"href\") +\"\/page\/{{page}}\",\n      style: {\n        layout_flexGrow: 1,\n        layout_flexBasisPercent: 0.45\n      }\n    });\n  });\n  \n  disc.push({\n    title: \"精品漫画\",\n    url: \"\/custom\/boutique\",\n    style: {layout_flexBasisPercent: 1, layout_flexGrow: 0.45}\n  });\n  \n  disc.push({\n    title: \"最近更新\",\n    url: \"\/custom\/update\",\n    style: {layout_flexBasisPercent: 1, layout_flexGrow: 0.45}\n  });\n  \n  disc.push({\n    title: \"热门推荐\",\n    url: \"\/custom\/recom\",\n    style: {layout_flexBasisPercent: 1, layout_flexGrow: 0.45}\n  });\n\n   return JSON.stringify(disc);\n}\n\nconst getDate = (time) => \n  new Date(time).toLocaleDateString();\n\nconst getTime = (dateStr) => {\n  let d;\n  try {\n    d = new Date(dateStr);\n    if (isNaN(d.getTime())) throw new Error('Invalid Date');\n  } catch (e) {\n    return 0;\n  }\n  return d.getTime()\n}\n\nlet discovery;\n\ntry {\n  let raw = String(source.getVariable()).trim();\n  let cache = null;\n  if (raw) { try { cache = JSON.parse(raw); } catch (e) {} }\n\n  let now = Date.now();\n  let sevenDays = 7 * 24 * 60 * 60 * 1000;\n\n  let isValid = cache\n               && cache.date\n               && cache.fx !== undefined\n               && (now -  getTime(cache.date)) < sevenDays;\n\n  if (isValid) {\n    discovery = cache.fx;\n  } else {\n    discovery = qimanwu();\n    let dateStr = getDate(now);\n    source.setVariable(JSON.stringify({ date: dateStr, fx: discovery }));\n  }\n} catch (e) {\n  discovery = qimanwu();\n  source.setVariable(JSON.stringify({\n    date: getDate(now),\n    fx: discovery\n  }));\n}\n\ndiscovery;","header":"{\n  \"User-Agent\": \"{{java.getWebViewUA()}}\",\n  \"Referer\": \"{{baseUrl}}\",\n  \"cookie\": \"{{cookie.getCookie(baseUrl)}}\"\n}","homepageModules":"","lastUpdateTime":"1788080456512","respondTime":180000,"ruleBookInfo":{"author":"p.1@text","canReName":"1","coverUrl":"img.cover@src@js:\nvar hh = JSON.stringify({\"headers\": {\n  \"User-Agent\": java.getWebViewUA(),\n  \"Referer\": baseUrl,\n  \"cookie\": cookie.getCookie(baseUrl)\n}});\nresult + \",\" + hh","init":"@js:\nif(\/很遗憾，该漫画不存在\/.test(result)){\n  result = \"<nocomic>很遗憾，该漫画不存在或章节已被删除<\/nocomic>\"\n}\nresult","intro":"p.5@text||nocomic@text","kind":"p.2@a@text","lastChapter":"p.3@text##更新至：","name":"p.0@text||nocomic@text"},"ruleContent":{"content":"@js:\n(() => {\n  var match = result.match(\/params\\s*=\\s*['\"]([^'\"]+)['\"]\/);\n  if (!match) return \"\";\n  var params = match[1];\n  \n  var allBytes = java.base64DecodeToByteArray(params);\n  var ivBytes = allBytes.slice(0, 16);\n  var ctBytes = allBytes.slice(16);\n  var key = \"9S8$vJnU2ANeSRoF\";\n  key = java.strToBytes(key);\n  var cipher = java.createSymmetricCrypto(\"AES\/CBC\/PKCS5Padding\", key, ivBytes);\n  var jsonStr = cipher.decryptStr(ctBytes);\n  var {images} = JSON.parse(jsonStr);\n  \n  var hh = JSON.stringify({\"headers\": {\n    \"User-Agent\": java.getWebViewUA(),\n    \"Referer\": baseUrl,\n    \"cookie\": cookie.getCookie(baseUrl)\n  }});\n\n  return images.map(x=>`<img src=\"${x+','+hh}\">`).join(\"\");\n})();","imageStyle":"FULL"},"ruleExplore":[],"ruleSearch":{"author":"p.2@text","bookList":".rankList@li","bookUrl":"a@href","coverUrl":"img.0@src@js:\nvar hh = JSON.stringify({\"headers\": {\n  \"User-Agent\": java.getWebViewUA(),\n  \"Referer\": baseUrl,\n  \"cookie\": cookie.getCookie(baseUrl)\n}});\nresult + \",\" + hh","lastChapter":"p.1@text","name":"p.0@text"},"ruleToc":{"chapterList":".chapterList li a","chapterName":"text","chapterUrl":"href"},"searchUrl":"\/search\/{{encodeURIComponent(key)}}\/{{page}}","weight":0}]