🍅大灰狼融合2.0(vip)

https://api.langge.cf https://20.langge.tk http://v2.dahuilang.cf

大灰狼 (3463)02/15 15:57


 

 

 

 

 

 

二维码导入
{
    "bookSourceComment": "250101新增番茄来源\n250203新增七猫来源\n250204新增得间来源\n250204新增QQ来源(仅支持免费小说)\n250204新增熊猫看书\n250210更新日志:\n1.采用全新验证方式,之后未填写密钥,可以在阅读页登陆后刷新阅读页面即可!\n2.搜索默认改为全局搜索,目前仅支持番茄,七猫,QQ,得间,熊猫,后面的按钮是预设,后期会添加相关来源\n3.新增大灰狼书架功能,在登陆里面点击书架查看\n\n下个版本预计更新内容:\n1.预计发现页新增阅读记录和大灰狼书架栏目\n2.预计新增阅读记录,阅读过的书籍可在大灰狼书架-阅读历史中查看\n3.预计新增塔读小说,米读小说,小米阅读,猫眼看书,部分起点\n\n250213更新日志:\n新增塔读,69书吧,笔趣阁,喜马拉雅\n新增大灰狼书架同步功能(书籍详情页刷新同步)",
    "bookSourceName": "🍅大灰狼融合2.0(vip)",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/api.langge.cf\nhttps:\/\/20.langge.tk\nhttp:\/\/v2.dahuilang.cf",
    "customOrder": 0,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "exploreUrl": "<js>\nfunction setArgument(key, value) {\n    let open_argument = source.getVariable();\n    open_argument = getArguments(open_argument,'',String(source.bookSourceUrl));\n    open_argument[key] = value;\n    open_argument = JSON.stringify(open_argument);\n    source.setVariable(open_argument);\n    return open_argument;\n}\n\n\nlet open_argument = source.getVariable();\nlet base_url = getArguments(open_argument,'server',String(source.bookSourceUrl));\nlet ms = getArguments(open_argument,'tone_id',String(source.bookSourceUrl));\n\nlet sdtoken;\n\ntry {\n    sdtoken= String(source.getLoginInfoMap()['手动填写番茄token(可不填)']);\n     } catch (e) {\n    sdtoken= '';\n  }\n\nlet fqsjurl = (String(cookie.getCookie('fanqienovel.com')) || String(java.getCookie('fanqienovel.com')) || sdtoken).replace(\/=\/g, '%3D');\n\/\/let fqsjurl = ''\nif (!fqsjurl) {\njava.toast('您还未登陆番茄账号,无法同步数据哦!');\n}\nfqsjurl = base_url + \"\/bookshelf?page={{page}}&cookie=\" + fqsjurl;\n\nlet data = {\n    \"男\": {\n        \"玄幻\": 7,\n        \"都市\": 1,\n        \"洪荒\": 66,\n        \"无敌\": 384,\n        \"末世\": 68,\n        \"诸天万界\": 71,\n        \"科幻\": 8,\n        \"星际\": 77,\n        \"重生\": 36,\n        \"系统\": 19,\n        \"神豪\": 20,\n        \"鉴宝\": 17,\n        \"三国\": 67,\n        \"二次元\": 39,\n        \"历史\": 12,\n        \"美食\": 78,\n        \"奶爸\": 42,\n        \"娱乐圈\": 43,\n        \"大唐\": 73,\n        \"外卖\": 75,\n        \"宠物\": 74,\n        \"学霸\": 82,\n        \"游戏动漫\": 57,\n        \"体育\": 15,\n        \"直播\": 69,\n        \"年代\": 79,\n        \"文化历史\": 62,\n        \"海岛\": 40,\n        \"神医\": 26,\n        \"明朝\": 126,\n        \"武侠\": 16,\n        \"灵异\": 100,\n        \"穿越\": 37,\n        \"剑道\": 80,\n        \"都市修真\": 124,\n        \"赘婿\": 25,\n        \"盗墓\": 81,\n        \"推理\": 61,\n        \"无限流\": 70,\n        \"种田\": 23,\n        \"战争\": 97,\n        \"天才\": 90,\n        \"职场\": 127,\n        \"悬疑\": 10,\n        \"成功励志\": 56,\n        \"空间\": 44,\n        \"腹黑\": 92,\n        \"诗歌散文\": 46,\n        \"家庭\": 125,\n        \"影视小说\": 45,\n        \"生活\": 48,\n        \"都市生活\": 2,\n        \"扮猪吃虎\": 93,\n        \"大秦\": 377,\n        \"漫威\": 374,\n        \"火影\": 368,\n        \"西游\": 373,\n        \"龙珠\": 376,\n        \"聊天群\": 381,\n        \"海贼\": 370,\n        \"奥特同人\": 367,\n        \"特种兵\": 375,\n        \"反派\": 369,\n        \"校花\": 385,\n        \"女帝\": 378,\n        \"单女主\": 389,\n        \"神奇宝贝\": 371,\n        \"九叔\": 383,\n        \"求生\": 379,\n        \"无女主\": 391,\n        \"武魂\": 386,\n        \"网游\": 372,\n        \"战神\": 27,\n        \"都市脑洞\": 262,\n        \"都市种田\": 263,\n        \"都市日常\": 261,\n        \"历史脑洞\": 272,\n        \"玄幻脑洞\": 257,\n        \"奇幻仙侠\": 259,\n        \"都市青春\": 396,\n        \"传统玄幻\": 258,\n        \"历史古代\": 273\n    },\n    \"女\": {\n        \"幻想言情\": 32,\n        \"现代言情\": 3,\n        \"现言甜宠\": 395,\n        \"现言脑洞\": 267,\n        \"先婚后爱\": 265,\n        \"都市日常\": 261,\n        \"古言脑洞\": 253,\n        \"古言萌宝\": 249,\n        \"古言甜宠\": 394,\n        \"现言日常\": 269,\n        \"现言复仇\": 268,\n        \"玄幻言情\": 248,\n        \"医术\": 247,\n        \"无敌\": 384,\n        \"种田\": 23,\n        \"萌宝\": 28,\n        \"美食\": 78,\n        \"游戏动漫\": 57,\n        \"娱乐圈\": 43,\n        \"直播\": 69,\n        \"女扮男装\": 388,\n        \"二次元\": 39,\n        \"团宠\": 94,\n        \"无cp\": 392,\n        \"青梅竹马\": 387,\n        \"病娇\": 380,\n        \"科幻\": 8,\n        \"武侠\": 16,\n        \"年代\": 79,\n        \"重生\": 36,\n        \"灵异\": 100,\n        \"公主\": 83,\n        \"甜宠\": 96,\n        \"盗墓\": 81,\n        \"系统\": 19,\n        \"女强\": 86,\n        \"皇后\": 84,\n        \"推理\": 61,\n        \"文化历史\": 62,\n        \"生活\": 48,\n        \"反派\": 369,\n        \"末世\": 68,\n        \"悬疑\": 10,\n        \"穿越\": 37,\n        \"学霸\": 82,\n        \"扮猪吃虎\": 93,\n        \"清穿\": 76,\n        \"穿书\": 382,\n        \"快穿\": 24,\n        \"皇叔\": 87,\n        \"空间\": 44,\n        \"宠妻\": 30,\n        \"豪门总裁\": 29,\n        \"影视小说\": 45,\n        \"成功励志\": 56,\n        \"职场\": 127,\n        \"民国\": 390,\n        \"都市生活\": 2,\n        \"腹黑\": 92,\n        \"星际\": 77,\n        \"天才\": 90,\n        \"古代言情\": 5,\n        \"家庭\": 125,\n        \"兽世\": 72,\n        \"校园\": 4,\n        \"诗歌散文\": 46,\n        \"虐文\": 95,\n        \"嫡女\": 88,\n        \"王妃\": 85,\n        \"精灵\": 89,\n        \"马甲\": 266\n    }\n};\n\nconst groupDatas = [];\nlet infoData = [];\nfunction deviceType() {\n  try {\n    return!!java.androidId();\n  } catch (e) {\n    return false;\n  }\n}\nlet device = deviceType()? 'android' : 'ios';\nif (device == 'android' && (String(cookie.getCookie('fanqienovel.com') || java.getCookie('fanqienovel.com')))) {\n    function groupQuery() {\n        const url = base_url + \"\/group_name?cookie={{String(cookie.getCookie('fanqienovel.com') || java.getCookie('fanqienovel.com'))}}\";\n        const res = java.ajax(url);\n        const data = JSON.parse(res).data;\n\n        data.forEach(group => {\n            let key;\n            for (key in group) {\n                groupDatas.push({\n                    \"title\": key,\n                    \"url\": base_url +\"\/bookshelf2?page={{page}}&book_ids=\" + group[key].join(\",\"),\n                    \"style\": {\n                        \"layout_flexGrow\": 1,\n                        \"layout_flexBasisPercent\": 0.45\n                    }\n                });\n            }\n        });\n\n        if (groupDatas.length % 2 !== 0) {\n            groupDatas.push({\n                \"title\": \"--\",\n                \"url\": \"\",\n                \"style\": {\n                    \"layout_flexGrow\": 1,\n                    \"layout_flexBasisPercent\": 0.45\n                }\n            });\n        }\n    }\n\n    try {\n    \tjava.longToast(\"请稍等,正在更新分组数据!\");\n    \/\/ 用户信息\n    const userUrl = base_url + '\/fquser?sessionid={{String(cookie.getKey(\"fanqienovel.com\", \"sessionid\"))}}';\n    const userRes = java.ajax(userUrl);\n    const userInfo = JSON.parse(userRes).data.name;\n\n    infoData = [\n        {\n            \"title\": `${userInfo}个人中心`,\n            \"url\": \"\",\n            \"style\": {\n                \"layout_flexGrow\": 1,\n                \"layout_flexBasisPercent\": 1\n            }\n        }\n    ];\n    groupQuery();\n    } catch (e) {\n    java.longToast(\"网络错误或登录失效或阅读版本过低,请重新登录番茄重试!\");\n    }\n\n}\n\n\/\/ 合并数据\nlet datas1 = [\n    {\n        \"title\": \"番茄官方书架\",\n        \"url\": fqsjurl,\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.45\n        }\n    },{\n        \"title\": \"大灰狼书架\",\n        \"url\": base_url + '\/get_user_bookshelf?is_bookshelf=1',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.45\n        }\n    }];\n\nconst datas2 = [{\n        \"title\": \"书籍排行榜 ٩( ˃̶͈̀௰˂̶͈́ )و\",\n        \"url\": \"\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    },\n    {\n        \"title\": \"推荐榜单\",\n        \"url\": base_url + '\/discover?page={{page}}&side_type=10',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.27\n        }\n    },\n    {\n        \"title\": \"完结榜单\",\n        \"url\": base_url +'\/discover?page={{page}}&side_type=11',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.27\n        }\n    },\n    {\n        \"title\": \"热搜榜单\",\n        \"url\": base_url +'\/discover?page={{page}}&side_type=12',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.27\n        }\n    },\n    {\n        \"title\": \"黑马榜单\",\n        \"url\": base_url +'\/discover?page={{page}}&side_type=13',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.27\n        }\n    },\n    {\n        \"title\": \"爆更榜单\",\n        \"url\": base_url + '\/discover?page={{page}}&side_type=15',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.27\n        }\n    },\n    {\n        \"title\": \"巅峰榜单\",\n        \"url\": base_url +'\/discover?page={{page}}&type=0',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.27\n        }\n    },\n    {\n        \"title\": \"男频精选\",\n        \"url\": base_url + '\/discover?page={{page}}&type=2',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.27\n        }\n    },\n    {\n        \"title\": \"女频精选\",\n        \"url\":base_url + '\/discover?page={{page}}&type=3',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.27\n        }\n    },\n    {\n        \"title\": \"每周推荐\",\n        \"url\": base_url +'\/discover?page={{page}}&type=1',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.27\n        }\n    }];\nconst datas = datas1.concat(infoData, groupDatas, datas2);\n\n\nfunction generateUrl(k, k1, sort, status) {\n    return `${base_url}\/discover?offset={{(page - 1) * 10}}&limit=10&tags=${data[k][k1]}&status=${status}&sort=${sort}`;\n}\n\nfor (let k in data) {\n    datas.push({\n        \"title\": \"❦ \" + k + \"生频道 ❧\",\n        \"url\": \"\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    });\n    for (let k1 in data[k]) {\n        datas.push({\n            \"title\": '༺༴ '+k1+' ༴༻',\n            \"url\": '',\n            \"style\": {\n                \"layout_flexGrow\": 1,\n                \"layout_flexBasisPercent\": 1\n            }\n        });\n        datas.push({\n            \"title\": \"推荐排行\",\n            \"url\": generateUrl(k, k1, 0, 'ALL'),\n            \"style\": {\n                \"layout_flexGrow\": 1,\n                \"layout_flexBasisPercent\": 0.27\n            }\n        });\n        \n        datas.push({\n            \"title\": \"评分排行\",\n            \"url\": generateUrl(k, k1, 1, 'ALL'),\n            \"style\": {\n                \"layout_flexGrow\": 1,\n                \"layout_flexBasisPercent\": 0.27\n            }\n        });\n        \n        datas.push({\n            \"title\": \"热门排行\",\n            \"url\": generateUrl(k, k1, 2, 'ALL'),\n            \"style\": {\n                \"layout_flexGrow\": 1,\n                \"layout_flexBasisPercent\": 0.27\n            }\n        });\n            }\n}\n\n\n\nJSON.stringify(datas);\n<\/js>",
    "jsLib": "function getArguments(open_argument,key,servers) {\n    try {\n        open_argument = JSON.parse(open_argument);\n    } catch (e) {\n        const serverList = servers.split('\\n');\n        open_argument = {\n            \"media\": \"小说\",\n            \"tone_id\": \"默认音色\",\n            \"server\": serverList[0],\n            \"source\":\"全部\"\n        };\n    }\n    if (key) {return open_argument[key];} else {return open_argument}\n}",
    "lastUpdateTime": "1739606227109",
    "loginUi": "[ {\n        \"name\":  \"♥♥ 登录大灰狼账号♥♥\",\n        \"type\": \"button\",\n        \"action\":\"loginqt()\"\n      },{\n        \"name\":  \"📚大灰狼书架\",\n        \"type\": \"button\",\n        \"action\": \"qtsj()\"\n      },{\n        \"name\":  \"🍅🍅🍅番茄登录🍅🍅🍅\",\n        \"type\": \"button\",\n        \"action\": \"fq_login()\"\n      },{\n        \"name\":  \"  退出登录  \",\n        \"type\": \"button\",\n        \"action\": \"logout()\"\n      },{\n        \"name\": \"全部\",\n        \"type\": \"button\",\n        \"action\": \"set_source('全部')\"\n      },{\n        \"name\": \"番茄\",\n        \"type\": \"button\",\n        \"action\": \"set_source('番茄')\"\n      },{\n        \"name\": \"七猫\",\n        \"type\": \"button\",\n        \"action\": \"set_source('七猫')\"\n      },{\n        \"name\": \"得间\",\n        \"type\": \"button\",\n        \"action\": \"set_source('得间')\"\n      },{\n        \"name\": \"QQ\",\n        \"type\": \"button\",\n        \"action\": \"set_source('QQ')\"\n      },{\n        \"name\": \"熊猫\",\n        \"type\": \"button\",\n        \"action\": \"set_source('熊猫')\"\n      },{\n        \"name\": \"塔读\",\n        \"type\": \"button\",\n        \"action\": \"set_source('塔读')\"\n      },{\n        \"name\": \"猫眼\",\n        \"type\": \"button\",\n        \"action\": \"set_source('猫眼')\"\n      },{\n        \"name\": \"米读\",\n        \"type\": \"button\",\n        \"action\": \"set_source('米读')\"\n      },{\n        \"name\": \"小米\",\n        \"type\": \"button\",\n        \"action\": \"set_source('小米')\"\n      },{\n        \"name\": \"百度\",\n        \"type\": \"button\",\n        \"action\": \"set_source('百度')\"\n      },{\n        \"name\": \"起点(部分)\",\n        \"type\": \"button\",\n        \"action\": \"set_source('起点')\"\n      },{\n        \"name\": \"喜马拉雅\",\n        \"type\": \"button\",\n        \"action\": \"set_source('喜马拉雅')\"\n      },{\n        \"name\": \"↑↑上方可切换自己想要的来源进行搜索↑↑\",\n        \"type\": \"button\",\n        \"action\": \"\"\n      },{\n        \"name\":  \"☕解除下载限制\",\n        \"type\": \"button\",\n        \"action\": \"vip()\"\n      },{\n        \"name\":  \"♻️检测服务器可用性\",\n        \"type\": \"button\",\n        \"action\": \"api()\"\n      },{\n        \"name\":  \"    🎚切换服务器    \",\n        \"type\": \"button\",\n        \"action\": \"set_server(server)\"\n      },{\n        \"name\":  \"    🖱当前服务器    \",\n        \"type\": \"button\",\n        \"action\": \"get_server()\"\n      },{\n        \"name\":  \"                                🗂当前模式                                \",\n        \"type\": \"button\",\n        \"action\": \"get_media()\"\n      },{\n        \"name\": \"      📖小说模式      \",\n        \"type\": \"button\",\n        \"action\": \"set_media('小说')\"\n      },{\n        \"name\": \"      🔊听书模式      \",\n        \"type\": \"button\",\n        \"action\": \"set_media('听书')\"\n      },{\n        \"name\": \"      🏞漫画模式      \",\n        \"type\": \"button\",\n        \"action\": \"set_media('漫画')\"\n      },{\n        \"name\": \"      🖲短剧模式      \",\n        \"type\": \"button\",\n        \"action\": \"set_media('短剧')\"\n      },{\n        \"name\": \"听书Ai音色填写后点击右上角✔\",\n        \"type\": \"text\"\n      },{\n        \"name\":  \"自定义服务器(可不填)\",\n        \"type\": \"text\"\n        }, {\n        \"name\":  \"手动填写番茄token(可不填)\",\n        \"type\": \"text\"\n      }\n\n\n      ]",
    "loginUrl": "function login() {\n    let zdyserver;\n    try {\n        zdyserver = String(source.getLoginInfoMap()['自定义服务器(可不填)']);\n        if (zdyserver.includes('http')) {\n            setArgument('server', zdyserver);\n            java.toast(`\\n\\n当前服务器为自定义服务器\\n${zdyserver}\\n\\n切换服务器请先清空服务器地址中的数据`);\n        } \n            } catch (error) {\n    }\n    let zdytone_id;\n    try {\n        zdytone_id = String(source.getLoginInfoMap()['听书Ai音色填写后点击右上角✔']);\n        if (zdytone_id) {\n            setArgument('tone_id', zdytone_id);\n        } else {\n            setArgument('tone_id', '默认音色');\n        }\n    } catch (error) {\n    }\n}\nfunction qtsj() {\n\tjava.startBrowserAwait(getArgument('server') + '\/online_bookshelf','大灰狼书架');\n\t}\n\n\/\/ 填写密钥\nfunction loginqt() {\n        java.startBrowserAwait(getArgument('server') + '\/login', '登录大灰狼小说书源');\n    }\n\n\/\/登录番茄\nfunction fq_login() {\n    var cookies = cookie.getCookie('fanqienovel.com') || java.getCookie('fanqienovel.com')\n    java.log(cookies);\n    if (cookies && cookies != \"\") {\n        java.toast(\"请不要重复登录,请先退出登录!\")\n        return false\n    }\n    try {\n        java.startBrowserAwait(\"https:\/\/fanqienovel.com\/\", \"登录\")\n    } catch (e) {\n        java.toast(e)\n    }\n    try {\n        cookie.removeCookie(\"snssdk.com\")\n    } catch (e) {\n    }\n    var cookies = cookie.getCookie(\"fanqienovel.com\")\n    if (!cookies || cookies == \"\") {\n        java.toast(\"登录失败!\")\n        return false\n    }\n    java.toast(\"登录成功!\")\n    return true\n}\n\n\/\/退出登录\nfunction logout() {\n    cookie.removeCookie(\"fanqienovel.com\");\n    cookie.removeCookie(\"snssdk.com\");\n    \n    var servers = String(source.bookSourceUrl);\n    const serverList = servers.split('\\n');\n    for (let server of serverList) {\n    cookie.removeCookie(server);\n    }\n    java.toast(\"退出登录成功\");\n}\n\n\/\/获取参数\nfunction getArgument(key) {\n    let open_argument = source.getVariable();\n    open_argument = getArguments(open_argument, '',String(source.bookSourceUrl));\n    return open_argument[key];\n}\n\n\/\/设置参数\nfunction setArgument(key, value) {\n    let open_argument = source.getVariable();\n    open_argument = getArguments(open_argument, '',String(source.bookSourceUrl));\n    open_argument[key] = value;\n    open_argument = JSON.stringify(open_argument);\n    source.setVariable(open_argument);\n    return open_argument;\n}\n\n\/\/首页\nfunction api() { java.startBrowserAwait('https:\/\/dashabi.tk', \"首页\");\n}\n\n\/\/打赏\nfunction vip() {\n    java.startBrowserAwait(getArgument('server') + '\/coffee', \"喝咖啡\");\n}\n\n\/\/获取密钥\nfunction hqmy() {\n    java.startBrowserAwait(getArgument('server') + '\/key', \"获取密钥\");\n}\n\nvar server = getArgument('server');\n\n\/\/设置搜索媒体\nfunction set_media(media) {\n\t    let device;\n\t    let device_type;\n\t    let source = getArgument('source');\n\t   try {\n    device = java.androidId();\n    device_type='安卓';\n} catch (e) {\n\t  device_type='苹果';\n\t  }\n\t  if (device_type == '安卓' && media == '短剧') {\n\t  \tjava.toast(\"\\n\\n抱歉!短剧模式仅支持苹果源阅!\");\n\t  \t} else {\n\t \t  \t\tif (source!='番茄'){\n\t \t  \t\t\tif (source=='喜马拉雅') {\n\t \t  \t\t\t\tsetArgument('media', '听书');\n          java.toast(\"\\n\\n目前\"+source+\":仅支持听书模式!\");\n\t \t  \t\t\t\t}else if (source=='七猫' && media == '听书') {\n\t \t  \t\t\t\t\tsetArgument('media', '听书');\n            java.toast(\"\\n\\n已切换至:听书\\n请重新搜索书籍!\");\n\t \t  \t\t\t\t\t} else {\n\t \t  \t\t\t\t\t\tsetArgument('media', '小说');\n\t \t  \t\t\t\t\t\tif (media=='小说') {\n\t \t  \t\t\t\t\t\t\tjava.toast(\"\\n\\n已切换至:\" + media + '\\n请重新搜索书籍!');\n\t \t  \t\t\t\t\t\t\t} else {\n\t \t  \t\t\t\t\t\t\t\tjava.toast(\"\\n\\n目前\"+source+\":不支持\"+media+\"模式!\");\n\t \t  \t\t\t\t\t\t\t\t}\n\t \t  \t\t\t\t\t\t}\n\t  \t\t\t\t  \t\t\t} else {\n\t  \t\t\t\tsetArgument('media', media);\n         java.toast(\"\\n\\n已切换至:\" + media + '\\n请重新搜索书籍!');\n\t  \t\t\t\t}\n    }}\n\n\/\/获取搜索媒体\nfunction get_media() {\n    let media = getArgument('media');\n    if (media == '') {\n        media = '全部';\n    }\n    java.toast(\"\\n\\n当前搜索范围是:\" + media);\n\n}\n\n\/\/获取服务器\nfunction get_server() {\n    var server = getArgument('server');\n    var tishi = '\\n\\n当前服务器:' + server\n    java.toast(tishi);\n    return server\n}\n\n\n\/\/设置服务器\nfunction set_server() {\n    let zdyserver;\n    try {\n        zdyserver = String(source.getLoginInfoMap()['自定义服务器(可不填)']);\n        if (zdyserver.includes('http')) {\n            setArgument('server', zdyserver);\n            java.toast(`\\n\\n当前服务器为自定义服务器\\n${zdyserver}\\n\\n切换服务器请先清空服务器地址中的数据`);\n        } else {\n            zdyserver = '';\n        }\n    } catch (error) {\n        zdyserver = '';\n    }\n    if (!zdyserver) {\n        const servers = String(source.bookSourceUrl).split('\\n').map(s => s.trim()).filter(s => s && !s.includes('提示'));\n        const currentServer = getArgument('server') || '';\n        const currentIndex = servers.indexOf(currentServer);\n\n        const nextIndex = currentIndex >= 0 ? (currentIndex + 1) % servers.length : 0;\n        const nextServer = servers[nextIndex];\n\n        setArgument('server', nextServer);\n        java.toast(`\\n\\n当前服务器${nextIndex+1}:${nextServer}\\n\\n注意:切换服务器后需要在详情页刷新目录才能生效`);\n    }\n}\n\n\/\/获取音色\nvar tone_id = getArgument('tone_id');\n\nfunction get_tone_id(arg) {\n    var datadist = {\n        \"0\": \"默认音色\",\n        \"-1\": \"阅读模式\",\n        \"-2\": \"漫画模式\",\n        \"51\": \"多人发音\",\n        \"1\": \"甜美少女\",\n        \"2\": \"清亮青叔\",\n        \"5\": \"开朗青年\",\n        \"6\": \"温柔淑女\",\n        \"4\": \"成熟大叔\",\n        \"74\": \"大叔升级\",\n        \"30\": \"优雅御姐\"\n    };\n    var tone_id = datadist[arg] || arg;\n    var tishi = '\\n\\n当前音色:' + tone_id;\n    java.toast(tishi);\n}\n\n\/\/设置音色\nfunction set_tone_id(mode, name) {\n    let zdytone_id;\n    try {\n        zdytone_id = String(source.getLoginInfoMap()['其他音色填写后点击右上角✔']);\n        if (zdytone_id) {\n            setArgument('tone_id', zdytone_id);\n            java.toast(`\\n\\n当前音色为自定义音色\\n${zdytone_id}\\n\\n切换音色请先清空音色输入框中的数据`);\n        } else {\n            zdytone_id = '';\n        }\n    } catch (error) {\n        zdytone_id = '';\n    }\n    if (!zdytone_id) {\n        let toast = \"\\n\\n已切换至:\" + name + '\\n\\n切换后需要刷新详情页';\n        setArgument('tone_id', mode);\n        java.toast(toast);\n    }\n}\n\n\/\/设置来源\nfunction set_source(source) {\n\t          setArgument('source', source);\n\t          set_media('小说');\n            java.toast(`\\n\\n当前来源已切换为:\\n${source}\\n\\n切换后请重新搜索`);\n       }",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "$.author",
        "coverUrl": "$.book_detail.thumb_url",
        "init": "$.book_detail",
        "intro": "<js>\njava.put('book_detail',JSON.stringify(result));\nlet info;\nlet base_url = getArguments(source.getVariable(),'server',String(source.bookSourceUrl));\nlet key;\nlet qtcookie = cookie.getCookie(base_url) || cookie.getCookie(base_url);\nif (qtcookie != ''){key = '✅️已登录';} else {key = '‼️⛔️您还未登录大灰狼账号哦,可以点击右上角登录♨️';}\ninfo = `&nbsp;&nbsp;🎚当前服务器:${base_url}\n🪄大灰狼账号:${key}\n🎴当前来源:{{$.source}}\n🗂当前模式:{{getArguments(source.getVariable(),'media',String(source.bookSourceUrl));}}\n{{if (getArguments(source.getVariable(),'media',String(source.bookSourceUrl)) =='听书'){\t'🔊当前音色:'+ getArguments(source.getVariable(),'tone_id',String(source.bookSourceUrl));}\n}}\n&lrm;\n{{$.book_tts}}\n&lrm;\n`\nif (`{{$.tags}}`) {info = info +  `🕹分类:{{$.tags}}\\n`};\nif (`{{$.role}}`) {info = info +  `🎗书籍主角:{{$.role}}\\n`};\nif (`{{$.last_chapter_title}}`) {info = info +  `🎯最新章节:{{$.last_chapter_title}}\\n`};\nif (`{{$.last_chapter_update_time}}`) {info = info +  `⏳更新时间:{{$.last_chapter_update_time}}\\n`};\nif (`{{$.word_number}}`) {info = info +  `📝书籍字数:{{$.word_number}}\\n`};\nif (`{{$.status}}`) {info = info +  `💥书籍状态:{{$.status}}\\n`};\nif (`{{$.score}}`) {info = info +  `✨书籍评分:{{$.score}}\\n`};\nif (`{{$.media}}`) {info = info +  `📌出版媒体:{{$.media}}\\n`};\nif (`{{$.abstract}}`) {info = info +  `&lrm;\n📚书籍简介:\n{{$.abstract}}\\n`};\nif (`{{$.book_review}}`) {info = info +  `&lrm;\\n{{$.book_review}}\\n`};\nif (`{{$.copyright_info}}`) {info = info +  `📍{{$.copyright_info}}`};\n<\/js>",
        "kind": "",
        "lastChapter": "$.last_chapter_title",
        "name": "$.book_name",
        "tocUrl": "<js>\nlet base_url = getArguments(source.getVariable(),'server',String(source.bookSourceUrl));\n`${base_url}\/catalog?book_id={{$.book_id}}&source={{$.source}}&tab={{$.tab}}`\n<\/js>",
        "wordCount": "$.word_number"
    },
    "ruleContent": {
        "content": "$.content"
    },
    "ruleExplore": {
        "author": "author",
        "bookList": "$.books&&$.data.data\n@js:\nif (baseUrl.includes('cookie'))\n{\n\tvar cookie = (String(cookie.getCookie('fanqienovel.com')) || String(java.getCookie('fanqienovel.com')) || String(source.getLoginInfoMap()['手动填写番茄token(可不填)'])).replace(\/=\/g, '%3D');\n\nif (!cookie || cookie == \"\") {\n        java.toast(\"未登录,请先前往登录!\");\njava.startBrowserAwait(\"https:\/\/fanqienovel.com\", \"登录\");\n    } \n\t}\n\nresult;",
        "bookUrl": "<js>\nlet base_url = getArguments(source.getVariable(),'server',String(source.bookSourceUrl));\n`${base_url}\/detail?book_id={{$.book_id}}&source={{$.source}}&tab={{$.tab}}`\n<\/js>",
        "coverUrl": "thumb_url",
        "intro": "{{$.source}}\n{{$.abstract}}",
        "kind": "{{$.category}}\n{{$.score}}\n{{$.status}}\n{{$.source}}\n{{$.tags}}",
        "lastChapter": "{{$.last_chapter_title}} • {{$.last_update_time}}",
        "name": "book_name",
        "wordCount": "word_number"
    },
    "ruleSearch": {
        "author": "$.author",
        "bookList": "$.books",
        "bookUrl": "<js>\nlet base_url = getArguments(source.getVariable(),'server',String(source.bookSourceUrl));\n`${base_url}\/detail?book_id={{$.book_id}}&source={{$.source}}&tab={{$.tab}}`\n<\/js>",
        "checkKeyWord": "我的",
        "coverUrl": "$.thumb_url",
        "intro": "$.abstract",
        "kind": "{{$.status}},{{$.score}},{{$.tags}},{{$.last_chapter_update_time}}",
        "lastChapter": "<js>\nfunction fq_last() {\n\tlet url = `https:\/\/api5-normal-sinfonlineb.fqnovel.com\/reading\/bookapi\/multi-detail\/v\/?aid=1967&iid=1&version_code=999&book_id={{$.book_id}}`;\n        let last =JSON.parse(java.ajax(url)).data[0]; \n        return last[\"last_chapter_title\"]+\" · \"+java.timeFormat(last[\"last_chapter_update_time\"]*1000);\n\t\n\t}\n\n\t\nfunction qm_last() {\n\tlet headers={'app-version':'51110','platform':'android','reg':'0','AUTHORIZATION':'','application-id':'com.****.reader','net-env':'1','channel':'unknown','qm-params':''}\n\tsign_key='d3dGiJc651gSQ8w1'\n\nparams={'id':{{$.book_id}}, 'imei_ip':'2937357107','teeny_mode':0}\n\nvar urlEncode = function (param, key, encode) {  \n  if(param==null) return '';  \n  var paramStr = '';  \n  var t = typeof (param);  \n  if (t == 'string' || t == 'number' || t == 'boolean') {  \n    paramStr += '&' + key + '=' + ((encode==null||encode) ? encodeURIComponent(param) : param);  \n  } else {  \n    for (var i in param) {  \n      var k = key == null ? i : key + (param instanceof Array ? '[' + i + ']' : '.' + i);  \n      paramStr += urlEncode(param[i], k, encode);  \n    }  \n  }  \n  return paramStr;  \n};\nparamSign=String(java.md5Encode(Object.keys(params).sort().reduce((pre,n)=>pre+n+'='+params[n],'')+sign_key));\nheaderSign=String(java.md5Encode(Object.keys(headers).sort().reduce((pre,n)=>pre+n+'='+headers[n],'')+sign_key))\nparams['sign']=paramSign;\nheaders['sign']=headerSign;\nlet url = \"https:\/\/api-bc.wtzw.com\/api\/v4\/book\/detail?\"+urlEncode(params);\noption = {'headers':headers};\nlet last =JSON.parse(java.ajax(url+','+JSON.stringify(option)))[\"data\"][\"book\"];\nlet last2 =  `${last[\"latest_chapter_title\"]} · ${java.timeFormat(last['update_time']*1000)} `\n\treturn last2\n\t}\n\t\nif ('{{$.source}}'=='番茄'){\n\t'番茄:'+fq_last();\n\t} else if ('{{$.source}}'=='七猫'){\n\t'七猫:'+qm_last();\n\t} else {\n\t\t'{{$.source}}'\n\t\t}\n\n<\/js>",
        "name": "$.book_name",
        "wordCount": "$.word_number"
    },
    "ruleToc": {
        "chapterList": "$.chapter_list\n<js>\ntry {\nlet book_detail = JSON.parse(java.get('book_detail'));\nlet base_url = getArguments(source.getVariable(),'server',String(source.bookSourceUrl));\nlet url = `${base_url}\/get_user_bookshelf?book_id=${book_detail.book_id}&source=${book_detail.source}`\n\/\/java.toast(url);\nlet getbook =JSON.parse(java.ajax(url)).books;\nlet is_bookshelf;\nlet data = [];\nif (book.order < 0 && !getbook.length) {\n\t\/\/ 在阅读书架,不在大灰狼书架,同步到大灰狼书架\n    book_detail.is_bookshelf = true;\n    book_detail.last_chapter_title = '未开始';\n    book_detail.last_chapter_update_time = '未开始';\n    data.push(book_detail);\n} else if ( book.order < 0 && getbook.length) {\n\t\/\/ 在阅读书架,在大灰狼书架\n\t  var books=getbook[0];\n    books.is_bookshelf = true;\n    data.push(books);\n} else if (book.order >= 0 && !getbook.length) {\n\t\/\/ 不在阅读书架,不在大灰狼书架,留下浏览记录\n\t   book_detail.is_bookshelf = false;\n    book_detail.last_chapter_title = '未开始';\n    book_detail.last_chapter_update_time = '未开始';\n    data.push(book_detail);\n\t} else if (book.order >= 0 && getbook.length) {\n\t\/\/ 不在阅读书架,在大灰狼书架,大灰狼书架下架\n\t   var books=getbook[0];\n    books.is_bookshelf = false;\n    \/\/data.push(books);\n\t}\nif (data.length) {\n\tvar option = {\n\"method\": \"POST\",\n\"body\": JSON.stringify(data),\n};\n    java.ajax(`${base_url}\/push_user_bookshelf,`+JSON.stringify(option));\n    }\n\t} catch (e) {}\n\tresult;\n<\/js>",
        "chapterName": "$.title",
        "chapterUrl": "<js>\nlet device,device_type;\ntry {\n    device = java.androidId();\n    device_type='安卓';\n} catch (e) {\n    try{\ndevice = java.deviceID();\ndevice_type='苹果';\n}catch (e) {device = 'k3dJ9l@wRpY2$T0mKvA1oNqs+XqL5uWgZ8V'\ndevice_type='安卓';\n}\n}\nlet base_url = getArguments(source.getVariable(),'server',String(source.bookSourceUrl));\nlet key = '';\ntry {key = java.getCookie(base_url,'secretKey2');} catch (e) {}\n\nlet media = getArguments(source.getVariable(),'media',String(source.bookSourceUrl));\nlet tone_id = getArguments(source.getVariable(),'tone_id',String(source.bookSourceUrl));\nif (media=='小说') {\n\tif (device_type === '安卓') {\n    book.type = 8;} else {\n    \tbook.type = 0;\n    \t}\n `${base_url}\/content?item_id={{$.item_id}}&device=${device}&source={{$.source}}&tab={{$.tab}}&key=${key}`\n } \n else if (media=='听书') {\n \tif (device_type === '安卓') {\n    book.type = 32;} else {\n    \tbook.type = 1;\n    \t}\n \t`${base_url}\/audio?item_id={{$.item_id}}&device=${device}&tone_id=${tone_id}&source={{$.source}}&tab={{$.tab}}&key=${key}`\n \t} else if (media=='漫画') {\n \t\tif (device_type === '安卓') {\n    book.type = 64;} else {\n    \tbook.type = 2;\n    \t}\n \t\t`${base_url}\/pic?item_id={{$.item_id}}&device=${device}&source={{$.source}}&tab={{$.tab}}&key=${key}`\n \t\t} else if (media=='短剧') {\n \t\t\tif (device_type === '安卓') {\n    book.type = 8;} else {\n    \tbook.type = 3;\n    \t}\n \t\t\t`${base_url}\/video?item_id={{$.item_id}}&device=${device}&source={{$.source}}tab={{$.tab}}&key=${key}`\n \t\t\t}\n<\/js>",
        "preUpdateJs": "",
        "updateTime": "$.volume_name"
    },
    "searchUrl": "<js>\nlet base_url = getArguments(source.getVariable(),'server',String(source.bookSourceUrl));\nlet media = getArguments(source.getVariable(),'media',String(source.bookSourceUrl));\nlet sources = getArguments(source.getVariable(),'source',String(source.bookSourceUrl));\n`${base_url}\/search?title={{key}}&tab=${media}&source=${sources}`\n<\/js>",
    "weight": 60
}
广告