霹雳书屋

https://www.pilibook.net/

alicecoco (8651)08/01 03:10

 - 2026.07.31
登录和发现用了select控件,请使用有select的阅读
有cf盾,一直过不了可以尝试切换网络,或过段时间再试,如果一直跳转到内部浏览器,可以尝试等待自动退出或点击右上角✔
发现、正文加载没东西请再试几次
当前网站失效可以在登录页切换站点
二维码导入
{
    "bookSourceComment": " - 2026.07.31\n登录和发现用了select控件,请使用有select的阅读\n有cf盾,一直过不了可以尝试切换网络,或过段时间再试,如果一直跳转到内部浏览器,可以尝试等待自动退出或点击右上角✔\n发现、正文加载没东西请再试几次\n当前网站失效可以在登录页切换站点",
    "bookSourceName": "霹雳书屋",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/www.pilibook.net\/",
    "customButton": false,
    "customOrder": 1,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "@js:\nconst currentUrl = getCurrentUrl();\nconst topListRoute = 'top\/list';\n\nconst combineUrl = (cateIndex, dataIndex) => {\n    if (cateIndex == 0 && dataIndex == 0) {\n        return ``;\n    } else {\n        const cateId = cateIndex == 7 ? 8 : cateIndex;\n        return `${currentUrl}${topListRoute}\/${cateId}\/${dataIndex}\/{{page}}.html`;\n    }\n};\n\nconst combineLable = (cateLable, dataLable) => {\n    if (cateLable == \"不选择\" && dataLable == \"不选择\") {\n        return \"请至少选择一项\";\n    } else {\n        let lable = cateLable + \"·\" + dataLable;\n        return lable.replace(\/·?不选择·?\/g, \"\");\n    }\n}\n\nlet currentCateIndex = String(source.get(\"cateRankIndex\")) || 0;\nlet currentDataIndex = String(source.get(\"dataRankIndex\")) || 1;\nconst currentCateLabel = ranks.category[currentCateIndex];\nconst currentDataLabel = ranks.data[currentDataIndex];\nconst fullLabel = combineLable(currentCateLabel, currentDataLabel)\nconst fullUrl = combineUrl(currentCateIndex, currentDataIndex);\n\nlet ui = [{\n        title: '分类榜',\n        type: 'select',\n        action: 'onSelectorChanged(String(infoMap[\"分类榜\"]),\"category\")',\n        chars: ranks.category,\n        default: ranks.category[currentCateIndex],\n        style: {\n            \"layout_flexGrow\": 0,\n            \"layout_flexShrink\": 1,\n            \"layout_alignSelf\": \"auto\",\n            \"layout_flexBasisPercent\": 0.45,\n            \"layout_wrapBefore\": false\n        }\n    },\n    {\n        title: '数据榜',\n        type: 'select',\n        action: 'onSelectorChanged(String(infoMap[\"数据榜\"]),\"data\")',\n        chars: ranks.data,\n        default: ranks.data[currentDataIndex],\n        style: {\n            \"layout_flexGrow\": 0,\n            \"layout_flexShrink\": 1,\n            \"layout_alignSelf\": \"auto\",\n            \"layout_flexBasisPercent\": 0.45,\n            \"layout_wrapBefore\": false\n        }\n    },\n    {\n        title: fullLabel,\n        url: fullUrl,\n        style: {\n            \"layout_flexGrow\": 0,\n            \"layout_flexShrink\": 1,\n            \"layout_alignSelf\": \"auto\",\n            \"layout_flexBasisPercent\": 1,\n            \"layout_wrapBefore\": false\n        }\n    }\n];\nJSON.stringify(ui);",
    "header": "{\n    \"User-Agent\": \"Mozilla\/5.0 (Linux; Android 14; V2243A Build\/TP1A.220905.001) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/125.0.0.0 Mobile Safari\/537.36\"\n}",
    "jsLib": "const bookSites = {\n    '主域名': 'https:\/\/www.pilishuwu.com\/',\n    '镜像线路1': 'https:\/\/www.pilibook.net\/',\n    '镜像线路2': 'https:\/\/www.pili45.com\/'\n};\n\nconst ranks = {\n    data: [\n        '不选择', '最新入库', '全部点击', '本年点击', '本月点击', '本周点击', '本日点击',\n        '全部收藏', '本年收藏', '本月收藏', '本周收藏', '本日收藏',\n        '全部推荐', '本年推荐', '本月推荐', '本周推荐', '本日推荐',\n        '评论数量', '点赞数量', '讨厌数量', '评分分数', '全本字数', '章节数量'\n    ],\n    category: [\n        '不选择',\n        '男频小说', '女频小说', '电子图书', '无cp小说',\n        '纯爱小说', '百合小说', '轻小说'\n    ]\n};\n\nconst urlToName = Object.fromEntries(\n    Object.entries(bookSites).map(([name, url]) => [url, name])\n);\n\nfunction getUrlByName(name) {\n    return bookSites[name] || null;\n}\n\nfunction getNameByUrl(url) {\n    return urlToName[url] || null;\n}\n\nfunction getCurrentUrl() {\n    const { source } = this;\n    return String(source.get(\"url\")) || bookSites['镜像线路1'];\n}\n\nfunction onSelectorChanged(selectedLabel, type) {\n    const { source, java } = this;\n    \n    const list = type === \"data\" ? ranks.data : ranks.category;\n    const saveKey = type === \"data\" ? \"dataRankIndex\" : \"cateRankIndex\";\n    const selectedIndex = list.indexOf(selectedLabel);\n    source.put(saveKey, selectedIndex);\n\n    java.refreshExplore();\n}",
    "lastUpdateTime": "1785525036771",
    "loginUi": "@js:\nconst siteNames = Object.keys(bookSites);\nconst currentUrl = getCurrentUrl();\nconst currentSiteName = getNameByUrl(String(currentUrl));\n\nconst mainUI = [{\n        name: '当前站点',\n        type: 'select',\n        chars: siteNames,\n        action: 'setCurrentUrl()',\n        default: currentSiteName,\n        style: {\n            layout_flexBasisPercent: 1\n        }\n    },\n    {\n        name: '网站',\n        type: 'button',\n        action: 'toSite()',\n        style: {\n            layout_flexBasisPercent: 0.45\n        }\n    },\n    {\n        name: '公告',\n        type: 'button',\n        action: 'toNotice()',\n        style: {\n            layout_flexBasisPercent: 0.45\n        }\n    }\n];\n\nJSON.stringify(mainUI);",
    "loginUrl": "function login() {}\n\nfunction setCurrentUrl() {\n    let currentSiteName = result.get(\"当前站点\");\n    const targetUrl = bookSites[currentSiteName];\n    source.put(\"url\", targetUrl);\n}\n\nfunction toSite() {\n    const currentUrl = getCurrentUrl();\n    java.startBrowser(currentUrl,\"霹雳书屋\");\n}\n\nfunction toNotice() {\n  java.startBrowser(\"https:\/\/www.pilixiaoshuo.com\/\", \"公告\");\n}",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": ".x-detail__book--info@p.1@text##作者:",
        "coverUrl": "img.0@src",
        "intro": " \n🕐 {{@@.x-catalog__update@text}}\n{{'\\nㅤ\\n'}}\n❤️ {{@@.x-detail__ticket--item.0@text}}    ✖️ {{@@.x-detail__ticket--item.1@text}}    📕{{@@.x-detail__book--info@p.3@text}}\n{{'\\nㅤ\\n'}}\n{{@@.x-detail__ticket--box@span@html || .x-detail__intro--content@html}}",
        "kind": ".x-detail__book--info@p.2@text&&.x-detail__book--info@p.4@text&&.x-detail__intro--tags@a@text##分类:|进程:",
        "lastChapter": ".x-catalog__new@text## .*",
        "name": ".x-detail__book--info@p.0@text",
        "tocUrl": ".x-detail__operator--item@a@href"
    },
    "ruleContent": {
        "content": "<js>\nlet\t header = {\n\t\t\t\t\"User-Agent\": \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/130.0.0.0 Safari\/537.36\",\n    \"Accept\": \"text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9\"\n}\n\nlet url = baseUrl + \",\" + JSON.stringify({\"headers\":header});\njava.ajax(url);\n<\/js>\n.read-content@html",
        "nextContentUrl": ".read-load-next@a.-1@href"
    },
    "ruleExplore": {
        "author": ".x-info__author@span@text",
        "bookList": "<js>\nif(result.match(\/Just a moment...|�\/)){\n\tjava.startBrowserAwait(baseUrl,\"验证\");\n\tresult=java.ajax(baseUrl);\n}result;\n<\/js>\n.rank-list-wrap@class.rank-ul@li ||.x-book",
        "bookUrl": "a@href",
        "coverUrl": "img@data-src",
        "intro": ".x-info__intro@text",
        "kind": ".x-info__author@text## .*",
        "name": "a@text || class.x-info__name@text"
    },
    "ruleSearch": {
        "author": ".book-status@text",
        "bookList": "<js>\nif(result.match(\/Just a moment...|�\/)){\n\tjava.startBrowserAwait(baseUrl,\"验证\");\n\tresult=java.ajax(baseUrl);\n}result;\n<\/js>\n.x-book",
        "bookUrl": "a@href",
        "coverUrl": "img@src",
        "intro": ".x-book__intro@text",
        "kind": ".book-fenlei@text",
        "name": ".x-book__info--name@text"
    },
    "ruleToc": {
        "chapterList": "ol@li!0",
        "chapterName": "span@text",
        "chapterUrl": "a@href"
    },
    "searchUrl": "{{getCurrentUrl()}}search\/0\/{{key}}\/{{page}}.html",
    "weight": 0
}
广告