[{"bookSourceComment":"建议登录\n整理修改缝合：酷安 Wolken\n灰色章节修复目录部分By叶落岚起+关耳\/乃星改2021.8.3\n补丁 : 神秘人\n修复搜索问题\n修复发现榜单没图的问题\n修复章节内图片问题\n新補丁: 神秘人\n抓取源码中的关键字替换\n更新补丁\n更新补丁17\/9\n2023.9.27\n新补丁：酷安 @吉王义昊\n重新抓取源码中的关键字替换\n2023.9.27\n新补丁2nd：酷安 @吉王义昊\n修复插图不能正常加载的问题\n2023.9.30\n酷安 @吉王义昊\n添加登录URL\n清理了无用代码\n使用更易读的变量名\n2023.10.1\n酷安 @吉王义昊\n重新抓取源码中的关键字替换\n2023.10.1\n酷安 @吉王义昊\n在获取正文时自动拉取源码并解密进行关键字替换，一劳永逸（大概）解决问题\n注意：此版本会使网络请求次数增加一倍，并一定程度上减慢加载速度\n2023.10.1\n酷安 @吉王义昊\n增加登录URL和登录UI\n启用CookieJar\n去除章节名下方的URL\n修正了下一页获取导致的正文加载错误\n补全发现中的文库\n修正部分小说目录获取错误的问题","bookSourceGroup":"轻小说","bookSourceName":"哔哩轻小说","bookSourceType":0,"bookSourceUrl":"https:\/\/w.linovelib.com","bookUrlPattern":"","coverDecodeJs":"","customOrder":188,"enabled":true,"enabledCookieJar":true,"enabledExplore":true,"exploreUrl":"[{'title':'全部榜单','url':'','style':{layout_flexGrow:1,layout_flexBasisPercent:1}},\n{'title':'点击总榜','url':'\/wenku\/allvisit_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'点击月榜','url':'\/wenku\/monthvisit_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'点击周榜','url':'\/wenku\/weekvisit_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'推荐总榜','url':'\/wenku\/allvote_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'推荐月榜','url':'\/wenku\/monthvote_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'推荐周榜','url':'\/wenku\/weekvote_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'完结总点','url':'\/wenku\/allvisit_0_0_0_0_0_0_5_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'完结月点','url':'\/wenku\/monthvisit_0_0_0_0_0_0_5_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'完结周点','url':'\/wenku\/weekvisit_0_0_0_0_0_0_5_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'完结总推','url':'\/wenku\/allvote_0_0_0_0_0_0_5_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'完结月推','url':'\/wenku\/monthvote_0_0_0_0_0_0_5_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'完结周推','url':'\/wenku\/weekvote_0_0_0_0_0_0_5_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'收藏榜单','url':'\/wenku\/goodnum_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'字数榜单','url':'\/wenku\/words_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'新书榜单','url':'\/wenku\/postdate_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'更新榜单','url':'\/wenku\/lastupdate_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'编辑推荐','url':'\/wenku\/toptime_0_0_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'','url':'','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'全部文库','url':'','style':{layout_flexGrow:1,layout_flexBasisPercent:1}},\n{'title':'电击文库','url':'\/wenku\/lastupdate_0_1_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'富士见文库','url':'\/wenku\/lastupdate_0_2_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'角川文库','url':'\/wenku\/lastupdate_0_3_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'MF文库J','url':'\/wenku\/lastupdate_0_4_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'Fami通文库','url':'\/wenku\/lastupdate_0_5_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'GA文库','url':'\/wenku\/lastupdate_0_6_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'HJ文库','url':'\/wenku\/lastupdate_0_7_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'一迅社','url':'\/wenku\/lastupdate_0_8_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'集英社','url':'\/wenku\/lastupdate_0_9_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'小学馆','url':'\/wenku\/lastupdate_0_10_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'讲谈社','url':'\/wenku\/lastupdate_0_11_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'少女文库','url':'\/wenku\/lastupdate_0_12_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'其他文库','url':'\/wenku\/lastupdate_0_13_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'华文轻小说','url':'\/wenku\/lastupdate_0_14_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'Web轻小说','url':'\/wenku\/lastupdate_0_15_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'轻改漫画','url':'\/wenku\/lastupdate_0_16_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}},\n{'title':'韩国轻小说','url':'\/wenku\/lastupdate_0_17_0_0_0_0_0_{{page}}_0.html','style':{layout_flexGrow:1,layout_flexBasisPercent:0.25}}]","header":"{\"User-Agent\": \"Mobile\", \n\"Referer\":\"https:\/\/w.linovelib.com\/login.php\"\n}","lastUpdateTime":1696128481876,"loginUi":"[\n  {\n    \"name\": \"账号\",\n    \"type\": \"text\"\n  },\n  {\n    \"name\": \"密码\",\n    \"type\": \"password\"\n  }\n]","loginUrl":"@js:\nfunction login() {\n  let une = source.getLoginInfoMap().get(\"账号\")\n  let pwd = source.getLoginInfoMap().get(\"密码\")\n  if (une && pwd) {\n    let body = String('username=' + une + '&password=' + pwd + '&usecookie=315360000&action=login')\n    let url = source.bookSourceUrl + '\/login.php'\n    let ck = java.post(url, body, { \"Content-Type\": \"application\/x-www-form-urlencoded\" }).cookies()\n    let header = JSON.stringify({\n      \"Cookie\": String(ck).match(\/\\{(.*?)\\}\/)[1].replace(\/,\/g, ';')\n    })\n    source.putLoginHeader(header)\n  }\n}","respondTime":180000,"ruleBookInfo":{"author":"[property=\"og:novel:author\"]@content","coverUrl":"[property=\"og:image\"]@content","intro":"id.bookSummary@tag.content@textNodes\n@js:\nresult=\"  \"+result;","kind":"class.book-cell@tag.p.1@ownText&&class.tag-small red@text\n##.*万字|·.*","lastChapter":"class.gray ell@text##(\\d+-\\d+-\\d+\\s\\d+:\\d+)·(.*)##$2 • $1","name":"[property=\"og:novel:book_name\"]@content","tocUrl":"class.btn-normal red@href","wordCount":"class.book-cell@tag.p.1@ownText##连载|完结"},"ruleContent":{"content":"<js>\n!(\/google.cn\/).test(baseUrl) ? h = java.getString(\"id.acontent@html\") : h = decodeURIComponent(baseUrl.replace(\/^.*?text=\/, ''))\nh = h.replace(\"&nbsp;&nbsp;\", \"&emsp;\")\njsLink = java.getString(\"tag.script@src\").match(new RegExp(\"https.+readtool.+\", \"gi\"))[0]\njsContent = java.ajax(jsLink).match(new RegExp(\".+jsjiami.+jsjiami.+\", \"gi\"))[0].replace(new RegExp(\"jsjiami(\\.com)?\", \"gi\"), \"sojson\");\nif (jsContent.indexOf(['sojson.v4']) == -1) {\n    java.log(\"Given code is not encoded as Sojson v4.\");\n}\njsDecoded = \"\"\ntry {\n    head = \"(['sojson.v4']+[])[\\\"constructor\\\"]['fromCharCode']['apply']\",\n        foot = \"\\\"['split'](\/[a-zA-Z]{1,}\/))\";\n    jsContent = decodeURIComponent(jsContent.replace(new RegExp(\"\\\\\\\\x\", \"gi\"), '%'));\n    jsDecoded = eval(jsContent.substring(jsContent.indexOf(head), jsContent.indexOf(foot) + foot.length));\n} catch (e) {\n    java.log(\"抱歉，解密失败了:\" + e.message);\n}\noriArr = jsDecoded.match(new RegExp(`RegExp\\\\(['\"].['\"],`, \"gi\"))\nrepArr = jsDecoded.match(new RegExp(`\\\\),\\\\s?['\"].['\"]\\\\)`, \"gi\"))\noriArr.forEach((ori, index) => {\n    ori = ori.replace(new RegExp(`(RegExp\\\\(['\"])|(['\"],)`, \"gi\"), \"\")\n    rep = repArr[index].replace(new RegExp(`(\\\\),\\\\s?['\"])|(['\"]\\\\))`, \"gi\"), \"\")\n    h = String(h).replace(new RegExp(`\\\\${ori}`,\"gi\"),rep)\n})\nh\n<\/js>","imageDecode":"","imageStyle":"FULL","nextContentUrl":"##url_next:'([^']*)'##$1###\n@js:\n\/\/121_2.html这样的是下一页，纯数字则是下一章\n\/\/带有catalog是详情页\nvar isNew=\/(\\\/(\\d+).html)|catalog\/.test(result);\nvar out=isNew?'':result;\nout","replaceRegex":"<js>\njava.log(666)\njava.log(result)\n<\/js>\n##((?<=[\\u4e00-\\u9fa5“‘「（，])\\s+)?<!--\\s*\\（继续下一页\\）\\s*-->\\s*|((?<=[\\u4e00-\\u9fa5“‘「（，])\\s+)?\\（本章未完\\）\\s*|"},"ruleExplore":{"author":"class.book-author@ownText","bookList":"class.book-ol book-ol-normal jsBooks@tag.li","bookUrl":"a@href","coverUrl":"img@data-src","intro":"class.book-desc@text","kind":"class.tag-small-group origin-right@tag.em.0@text&&\nclass.tag-small-group origin-right@tag.em.1@text","name":"class.book-title@text","wordCount":"class.tag-small blue@text"},"ruleReview":[],"ruleSearch":{"author":"class.book-author@textNodes","bookList":"@js:\npath = 'class.book-ol book-ol-normal@tag.li';\nc=java.getElement(path);\nif( !c.length && result.includes('no-js')){\n  res = java.startBrowserAwait(baseUrl,'等待至跳转，然后重搜');\n  java.setContent(res.body());\n  c=java.getElement(path);\n}\nc","bookUrl":"tag.a.0@href","checkKeyWord":"我的青春恋爱喜剧","coverUrl":"a@href@js:\nvar id = result.match(\/\\\/(\\d+)\\.html\/)[1];\n'https:\/\/www.linovelib.com\/files\/article\/image\/'+parseInt(id\/1000)+'\/'+id+'\/'+id+'s.jpg';","intro":"class.book-desc@text","kind":"class.tag-small-group origin-right@tag.em@text","name":"class.book-title-x@class.book-title@text"},"ruleToc":{"chapterList":"id.volumes @tag.li\n@js:\n    \/\/现实debug(尝试修复正文链接问题，和目录不全)\n    \/\/<<好友角色的我怎么可能大受欢迎>>第三卷12\n    \/\/<<我的青春恋爱喜剧>>\n    \/\/2022-8-19\n    \/\/原来的代码在源注释（已移除）\n    \/\/2022-8-20修复https:\/\/w.linovelib.com\/novel\/2765.html目录加载失败\n    \/\/2023-9-30使用易于理解的变量命名\n\nres = result\n\nfor (i = 0; i < res.length; i++) {\n    java.setContent(res[i])\n    if (java.getString(\"tag.a@href\") == \"javascript:cid(0)\") {\n        if (i == res.length - 1) {\n            java.setContent(res[i - 1])\n            prevLink = java.getString(\"tag.a@href\")\n            if (prevLink == \"\") {\n                java.setContent(res[i - 2])\n                prevLink = java.getString(\"tag.a@href\")\n            }\n            prev = java.ajax(\"https:\/\/w.linovelib.com\" + prevLink)\n            java.setContent(prev)\n            foot = java.getElements(\"id.footlink\")\n\n            while (foot.indexOf(\"下一页\") != -1) {\n                str = d1.match(\/<script type\\=\\\"text\\\/javascript\\\">var ReadParams.*\/)\n                path = String(str).match(\/url_next\\:'.*?html\/)[0].replace(\"url_next:'\", \"\")\n                content = java.ajax(\"https:\/\/w.linovelib.com\" + path)\n                java.setContent(content)\n                foot = java.getElements(\"id.footlink\")\n            }\n\n            str = next.match(\/<script type\\=\\\"text\\\/javascript\\\">var ReadParams.*\/)\n            path = String(str).match(\/url_next\\:'.*?html\/)[0].replace(\"url_next:'\", \"\")\n            java.log(path)\n            res[i] = String(res[i]).replace('javascript:cid(0)', path)\n        } else {\n            java.setContent(res[i + 1])\n            nextLink = java.getString(\"tag.a@href\")\n            if (nextLink == \"\") {\n                java.setContent(res[i + 2])\n                nextLink = java.getString(\"tag.a@href\")\n            }\n            next = java.ajax(\"https:\/\/w.linovelib.com\" + nextLink)\n            str = next.match(\/<script type\\=\\\"text\\\/javascript\\\">var ReadParams.*\/)\n            path = String(str).match(\/url_previous\\:'.*?html\/)[0].replace(\"url_previous:'\", \"\")\n            java.log(path)\n\n            res[i] = String(res[i]).replace('javascript:cid(0)', path)\n        }\n    }\n}\nres","chapterName":"text","chapterUrl":"tag.a@href","isVolume":"@js:\njava.getString(\"tag.a@href\")==\"\"","updateTime":""},"searchUrl":"<js>\n\npage==1?\n'\/search.html?searchkey={{key}}&searchtype=all'\n:\n\n'\/search\/{{key}}_{{page}}.html'\n<\/js>","weight":0}]