[
  {
    "bookSourceComment": "酷安 @吉王义昊\nGitHub：https://github.com/jiwangyihao/source-j-legado\n\n# 关于许可的额外声明（在线版本参见 GitHub，以在线版本为准）\n\n- 当许可证与本声明冲突时，以本声明为准；\n- 对于本仓库中的任意代码片段：按照 `MPL 2.0` 中有关约定执行；\n- 对于本仓库中的某一完整书源的转载或二次开发，需满足以下全部条件：\n  - 在[本仓库](https://github.com/jiwangyihao/source-j-legado)的 `issue` 中提出请求并具体说明转载地址、二次开发后的书源开源地址以及其他必要信息；\n  - 等待原作者（即本仓库的初始所有者和初始代码贡献者 [@jiwangyihao](https://github.com/jiwangyihao)）查看并通过 `issue` 或依据原作者要求更改转载方式或补充更详细的信息。\n  - 考虑到本项目弃坑的可能，新 `issue` 开启后超过 20 个工作日原作者没有回复或者原作者回复要求更改的 `issue` 在更改后超过 20 个工作日原作者没有回复即视为原作者通过该 `issue`：\n    - 此处的 `issue` 仅包括在[本仓库](https://github.com/jiwangyihao/source-j-legado)开启的，处于「开启状态」的 issue。（也就是说，请不要在已经关闭的 issue 中回复）。\n    - 对于此种方式通过的 issue，转载/二次开发者仍应当遵守本声明中已经写明的相关约定。\n  - 不得上传至源仓库或整理至`非轻小说专用`的书源合集中并应当避免其他人将转载/二次开发版本上传至源仓库或整理至`非轻小说专用`的书源合集中：\n    - 关于轻小说的定义的额外说明：不包括国内的原创网络文学作品（如 `SF 轻小说` 中的原创轻小说以及`起点中文网`中标签包含轻小说的作品）。\n    - 轻小说专用的定义：有且仅有想看轻小说的人可能会添加。\n  - 必须在转载/二次开发地址的明显位置完整包含本声明的全部内容。\n  - 必须保留源注释中原有的更改记录。\n\n搜索时只会搜索合集，加载目录失败很可能是这个合集是空的，无法处理[流汗滑稽]\n\n小说简介和正文都添加了评论，不想看的话可以把书源规则里相关代码删了\n\n默认图片样式是TEXT，这是为了方便看评论里的表情包（\n\n想看漫画的话可以自行更改为FULL\n\n漫画长时间处于加载中或者加载失败很可能是因为原帖中用的图床挂了或者被墙了，无法处理[流汗滑稽]\n\n发现没做一是因为里面各种类型的帖子混在一起，太复杂，二是因为我用不着[受虐滑稽]\n\n！！非常重要：\n使用前需要先登录，登录界面是电脑版网页，可能需要找一下登录按钮在哪[流汗滑稽]\n（不确定现在是不是还有）账号需要通过勇者测试\n点登录没反应可能是ip被ban了或者访问频率过高，着急的话可以换下ip\n\n2024.4.8\n酷安@吉王义昊\n使用JSON格式重写了部分规则\n处理了3.24.040501中无法使用的问题",
    "bookSourceGroup": "轻小说,需要登录",
    "bookSourceName": "lk轻之国度",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.lightnovel.fun/",
    "customOrder": 0,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "exploreUrl": "@js:\nvar result = [];\nvar BaseUrl = \"https://www.lightnovel.fun\";\nvar baseBody = {\n    \"is_encrypted\": 0,\n    \"platform\": \"pc\",\n    \"client\": \"web\",\n    \"sign\": \"\",\n    \"gz\": 0,\n    \"d\": {\n        \"parent_gid\": 3,\n        \"security_key\": JSON.parse(decodeURIComponent(cookie.getKey(BaseUrl, \"token\"))).security_key\n    }\n};\nvar headers = {\n\t   \"User-Agent\": \"Mozilla/5.0 (Android 11; Mobile; rv:142.0) Gecko/142.0 Firefox/142.0\",\n    \"Content-Type\": \"application/json\",\n    \"Cookie\": cookie.getCookie(BaseUrl)\n};\n[\n    [\"轻小说\", 3],\n    [\"漫画\", 33]\n].forEach(([tag, id]) => {\n    result.push({\n        title: tag,\n        url: null,\n        style: {\n            layout_flexGrow: 1,\n            layout_flexBasisPercent: 1\n        }\n    });\n    baseBody.d.parent_gid = id;\n    let sorts = java.post(BaseUrl + \"/proxy/api/category/get-categories\", JSON.stringify(baseBody), headers).body();\n    JSON.parse(sorts).data.forEach(sort => {\n        let url = BaseUrl + \"/proxy/api/category/get-article-by-cate,\";\n        baseBody.d.gid = sort.gid;\n        baseBody.d.page = \"{{page === 1 ? 1 : source.getVariable()}}\";\n        url += JSON.stringify({\n            \"body\": JSON.stringify(baseBody),\n            \"headers\": headers,\n            \"method\": \"POST\"\n        });\n        result.push({\n            title: sort.name,\n            url: url,\n            style: {\n                layout_flexGrow: 1,\n                layout_flexBasisPercent: tag === \"漫画\" ? 0.2 : 0.25\n            }\n        });\n    })\n});\nJSON.stringify(result);",
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Android 11; Mobile; rv:142.0) Gecko/142.0 Firefox/142.0\",\n  \"Referer\": \"https://www.lightnovel.fun/\"\n}",
    "lastUpdateTime": 1774326690541,
    "loginCheckJs": "if (/category/.test(result.url())) {\n    const originUrl = java.ruleUrl;\n    const filterID = [5];\n    let nextPage = page === 1 ? 2 : +source.getVariable() + 1;\n    let Data = JSON.parse(result.body());\n    let maxPage = Math.ceil(Data.data.page_info.count / 20);\n    let bookList = [];\n    if (Data && Data.data && Data.data.list) {\n        bookList = Data.data.list.filter(item => !filterID.includes(item.sid)) || [];\n    }\n    /*\n     *过滤后数据为空时，翻页请求获取新数据\n     *限制单次翻页，避免陷入死循环\n     */\n    let retryCount = 0;\n    let currentUrl = originUrl;\n    while (bookList.length === 0 && retryCount < 5 && nextPage <= maxPage) {\n        currentUrl = String(currentUrl).replace(/\\\\\"page\\\\\":\\\\\"(\\d+)\\\\\"/g, (match, pageNum) => {\n            return `\\\\\"page\\\\\":\\\\\"${+pageNum + 1}\\\\\"`;\n        });\n        const resp = JSON.parse(java.ajax(currentUrl));\n        bookList = (resp && resp.data && resp.data.list) ? resp.data.list.filter(item => !filterID.includes(item.sid)) : [];\n        retryCount++;\n        nextPage++;\n        if (bookList.length > 0) {\n            break;\n        }\n    }\n    //java.log(nextPage);\n    // 利用源变量代替page变量作为页码\n    source.setVariable(nextPage);\n    result = Packages.io.legado.app.help.http.StrResponse(result.url(), JSON.stringify(bookList));\n}\nresult;",
    "loginUrl": "https://www.lightnovel.fun/",
    "respondTime": 180000,
    "ruleBookInfo": {
      "author": "$.series.author",
      "coverUrl": "$.series.cover",
      "init": "<js>\njsContent=src.match(/<script>window.__NUXT__.+?<.script>/gi)[0].replace(/<.?script>/gi,'')\nwindow={}\neval(jsContent)\nJSON.stringify(window.__NUXT__.data)\n</js>\n$[0]",
      "intro": "@js:\nif (result.series) {\n    res = result.series.intro;\n    res += \"\\n上传者：\\n\";\n    result.series.editors.forEach(i => {\n        res += `- 昵称：${i.nickname}|签名：${i.sign}|等级：${i.level.level}|${i.level.name}\\n`;\n    });\n} else {\n    res = result.article.summary;\n}\nif (result.comments) {\n  res+=\"\\n评论：\\n\"\n  result.comments.forEach(i=>{\n    res+=`- ${i.time}|${i.rate}星|${i.user_info.nickname}|${i.user_info.level.name}|${i.text}\\n`\n  })\n}\nres",
      "kind": "@js:\nres = [];\nif (result.series) {\n    res = [\"评分: \" + result.series.score];\n    result.series.editors.forEach(i => res.push(i.nickname));\n    if (result.series.name.match(/\\[.+?\\]/gi)) {\n        result.series.name.match(/\\[.+?\\]/gi).forEach(i => res.push(i.replace(/[\\[\\]]/gi, '')));\n    }\n} else {\n    res.push(result.article.author.nickname);\n}\nres;",
      "lastChapter": "$.series.articles[-1].title",
      "name": "$.series.name##\\[.+?\\]##"
    },
    "ruleContent": {
      "content": "@js:\njsContent=src.match(/<script>window.__NUXT__.+?<.script>/gi)[0].replace(/<.?script>/gi,'')\nwindow={}\neval(jsContent)\nres=window.__NUXT__.data[0].article.content\nif (comments=window.__NUXT__.data[0].comments) {\n  res+=\"\\n【评论】\\n\"\n  comments.list.forEach(i=>{\n    res+=`- ${i.content}\\n`\n  })\n}\nres",
      "imageStyle": "TEXT"
    },
    "ruleExplore": {
      "author": "$.author",
      "bookList": "$[*]",
      "bookUrl": "@js:\n({{$.sid}} != 0) ? \"https://www.lightnovel.fun/cn/series/{{$.sid}}\" : \"https://www.lightnovel.fun/cn/detail/{{$.aid}}\"",
      "coverUrl": "$.cover",
      "kind": "$.last_time",
      "name": "$.title"
    },
    "ruleSearch": {
      "author": "$.author",
      "bookList": "$.data['collections', 'articles'][*]",
      "bookUrl": "@js:\n({{$.sid}} != 0) ? \"https://www.lightnovel.fun/cn/series/{{$.sid}}\" : \"https://www.lightnovel.fun/cn/detail/{{$.aid}}\"",
      "checkKeyWord": "最弱的驯养师开启的捡垃圾的旅途",
      "coverUrl": "$.cover",
      "intro": "@js:\nres = \"\\n上传者：\\n\";\nif (result.editors) {\n    result.editors.forEach(i => {\n        res += `- 昵称：${i.nickname}|签名：${i.sign}|等级：${i.level.level}|${i.level.name}\\n`;\n    });\n} else {\n    res += result.author;\n}\nres;",
      "kind": "@js:\nres = [result.group_name];\nif (result.name.match(/\\[.+?\\]/gi)) {\n    result.name.match(/\\[.+?\\]/gi).forEach(i => res.push(i.replace(/[\\[\\]]/gi, '')));\n}\nif (result.editors) {\n    result.editors.forEach(i => res.push(i.nickname));\n} else {\n    res.push(result.author);\n}\nres;",
      "name": "@js:\n({{$.sid}}!=0) ? '{{$.name}}' : '{{$.title}}' "
    },
    "ruleToc": {
      "chapterList": "@js:\nres = []\njsContent=src.match(/<script>window.__NUXT__.+?<.script>/gi)[0].replace(/<.?script>/gi,'')\nwindow={}\neval(jsContent)\nif(window.__NUXT__.routePath.includes('detail')){\n  res = [JSON.stringify(window.__NUXT__.data[0].article)]\n} else {\n  res = window.__NUXT__.data[0].series.articles.map(i=>JSON.stringify(i))\n}\nres",
      "chapterName": "$.title",
      "chapterUrl": "https://www.lightnovel.fun/cn/detail/{{$.aid}}",
      "updateTime": "$.time"
    },
    "searchUrl": "@js:\nurl = \"https://www.lightnovel.fun/proxy/api/search/search-result\";\nbody = {\n  is_encrypted: 0,\n  platform: \"pc\",\n  client: \"web\",\n  sign: \"\",\n  gz: 0,\n  d: {\n    q: \"{{key}}\",\n    page: page,\n    type: 0,\n    security_key: JSON.parse(decodeURIComponent(cookie.getKey(\"https://www.lightnovel.fun/\", \"token\"))).security_key,\n  },\n};\noption = { method: \"POST\", body: JSON.stringify(body) };\noption.headers = { \"Content-Type\": \"application/json; charset=UTF-8\" };\njava.put(\"url\", String(url + \",\" + JSON.stringify(option)));",
    "weight": 0
  }
]