[{"bookSourceComment":"YX源仓库：http:\/\/yx.ccute.xyz\/\n无需登录，可看最新章节@tlyanyu","bookSourceGroup":"女频，BL","bookSourceName":"耽免时光|小说@tlyanyu","bookSourceType":0,"bookSourceUrl":"https:\/\/bltime.cc\/pages\/novel\/novel","customOrder":1,"enabled":true,"enabledCookieJar":false,"enabledExplore":true,"exploreUrl":"[\n{\"title\":\"人气排行\",\"url\":\"view_count\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"最近更新\",\"url\":\"publish_date\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}}\n]","header":"{\n\"User-Agent\":\n\"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\"\n}","jsLib":"{\"crypto\": \"https:\/\/cdn.bootcss.com\/crypto-js\/3.1.9-1\/crypto-js.min.js\"}","lastUpdateTime":"1760770852279","loginUrl":"https:\/\/bltime.cc","respondTime":180000,"ruleBookInfo":{"author":"creator_name","coverUrl":"cover_url","init":"<js>\nfunction createSign(params) {\n\tvar str = '';\n\tObject.keys(params).sort().forEach((key) => {\n\t\tif (params[key]) {\n\t\t\tstr += `&${key}=${params[key]}`;\n\t\t}\n\t});\n\treturn CryptoJS.HmacMD5(str.slice(1), 'c17DTXDNhSc0ea9AQMdUUQ==').toString();\n}\n\nconst timestamp = Date.now();\nlet url = \"https:\/\/api.next.bspapp.com\/client\";\nlet body = {\n\t\"method\": \"serverless.auth.user.anonymousAuthorize\",\n\t\"params\": \"{}\",\n\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\"timestamp\": timestamp\n};\n\nlet sign = createSign(body);\n\nlet headers = {\n\t\"Content-Type\": \"application\/json\",\n\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\"x-serverless-sign\": sign\n};\n\nlet response = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body),headers).body());\n\nif(response.success){\n\tconst accessToken = response.data.accessToken;\n\tconst idValue = baseUrl.match(\/id=([^&]+)\/)[1];\n\n\tconst timestamp1 = Date.now();\n\tconst params = JSON.stringify({\n\t\t\"functionTarget\": \"DCloud-clientDB\",\n\t\t\"functionArgs\": {\n\t\t\t\"command\": {\n\t\t\t\t\"$db\": [\n\t\t\t\t\t{ \"$method\": \"collection\", \"$param\": [\"bl-time-novel\"] },\n\t\t\t\t\t{ \"$method\": \"where\", \"$param\": [`_id=='${idValue}'`] },\n\t\t\t\t\t{ \"$method\": \"field\", \"$param\": [\"_id,cover_url,title,tags,word_number,view_count,excerpt,introduction,creator_id,creator_name,creator_avatar,is_completed,novel_status,contributor\"] },\n\t\t\t\t\t{ \"$method\": \"skip\", \"$param\": [0] },\n\t\t\t\t\t{ \"$method\": \"limit\", \"$param\": [20] },\n\t\t\t\t\t{ \"$method\": \"get\", \"$param\": [{}] }\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t});\n\tlet body1 = {\n\t\t\"method\": \"serverless.function.runtime.invoke\",\n\t\t\"params\": params,\n\t\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\t\"timestamp\": timestamp1,\n\t\t\"token\": accessToken\n\t};\n\tlet sign1 = createSign(body1);\n\tlet headers1 = {\n\t\t\"Content-Type\": \"application\/json\",\n\t\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\t\"x-basement-token\": accessToken,\n\t\t\"x-serverless-sign\": sign1\n\t};\n\tlet response1 = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body1),headers1).body());\n\t\n\tconst timestamp2 = Date.now();\n\tconst params2 = JSON.stringify({\n\t  \"functionTarget\": \"DCloud-clientDB\",\n\t  \"functionArgs\": {\n\t\t\"command\": {\n\t\t  \"$db\": [\n\t\t\t{ \"$method\": \"collection\", \"$param\": [\"bl-time-chapter\"] },\n\t\t\t{ \"$method\": \"where\", \"$param\": [\"novel_id=='\" + idValue + \"'&&chapter_status==1\"] },\n\t\t\t{ \"$method\": \"field\", \"$param\": [\"_id,chapter_title,last_modify_date\"] },\n\t\t\t{ \"$method\": \"orderBy\", \"$param\": [\"chapter_index asc\"] },\n\t\t\t{ \"$method\": \"skip\", \"$param\": [0] },\n\t\t\t{ \"$method\": \"limit\", \"$param\": [500] },\n\t\t\t{ \"$method\": \"get\", \"$param\": [{}] }\n\t\t  ]\n\t\t}\n\t  }\n\t});\n\tlet body2 = {\n\t\t\"method\": \"serverless.function.runtime.invoke\",\n\t\t\"params\": params2,\n\t\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\t\"timestamp\": timestamp2,\n\t\t\"token\": accessToken\n\t};\n\tlet sign2 = createSign(body2);\n\tlet headers2 = {\n\t\t\"Content-Type\": \"application\/json\",\n\t\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\t\"x-basement-token\": accessToken,\n\t\t\"x-serverless-sign\": sign2\n\t};\n\tlet response2 = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body2),headers2).body());\n\n        response1.data.data[0].latestChapter = response2.data.data[response2.data.data.length - 1].chapter_title;\n\tresult = response1;\n}result;\n<\/js>\n$.data.data[0]","intro":"introduction","kind":"tags","lastChapter":"latestChapter","name":"title","wordCount":"word_number"},"ruleContent":{"content":"<js>\nfunction createSign(params) {\n\tvar str = '';\n\tObject.keys(params).sort().forEach((key) => {\n\t\tif (params[key]) {\n\t\t\tstr += `&${key}=${params[key]}`;\n\t\t}\n\t});\n\treturn CryptoJS.HmacMD5(str.slice(1), 'c17DTXDNhSc0ea9AQMdUUQ==').toString();\n}\nconst timestamp = Date.now();\nlet body = {\n\t\"method\": \"serverless.auth.user.anonymousAuthorize\",\n\t\"params\": \"{}\",\n\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\"timestamp\": timestamp\n};\n\nlet sign = createSign(body);\n\nlet headers = {\n\t\"Content-Type\": \"application\/json\",\n\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\"x-serverless-sign\": sign\n};\n\nlet response = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body),headers).body());\n\nif(response.success){\n\tconst accessToken = response.data.accessToken;\n\tconst idValue = baseUrl.match(\/id=([^&]+)\/)[1];\n\n\tconst timestamp2 = Date.now();\n\tconst params2 = JSON.stringify({\n\t  \"functionTarget\": \"DCloud-clientDB\",\n\t  \"functionArgs\": {\n\t\t\"command\": {\n\t\t  \"$db\": [\n\t\t\t{\"$method\": \"collection\", \"$param\": [\"bl-time-chapter\"]},\n\t\t\t{\"$method\": \"where\", \"$param\": [{\"_id\": idValue}]},\n\t\t\t{\"$method\": \"get\", \"$param\": []}\n\t\t  ]\n\t\t}\n\t  }\n\t});\n\tlet body2 = {\n\t\t\"method\": \"serverless.function.runtime.invoke\",\n\t\t\"params\": params2,\n\t\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\t\"timestamp\": timestamp2,\n\t\t\"token\": accessToken\n\t};\n\tlet sign2 = createSign(body2);\n\tlet headers2 = {\n\t\t\"Content-Type\": \"application\/json\",\n\t\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\t\"x-basement-token\": accessToken,\n\t\t\"x-serverless-sign\": sign2\n\t};\n\tlet response2 = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body2),headers2).body());\n\tresult = response2.data.data[0].chapter_content;\n}result;\n<\/js>\n@html"},"ruleExplore":{"author":"$.creator_name","bookList":"<js>\nfunction createSign(params) {\n\tvar str = '';\n\tObject.keys(params).sort().forEach((key) => {\n\t\tif (params[key]) {\n\t\t\tstr += `&${key}=${params[key]}`;\n\t\t}\n\t});\n\treturn CryptoJS.HmacMD5(str.slice(1), 'c17DTXDNhSc0ea9AQMdUUQ==').toString();\n}\nconst timestamp = Date.now();\nlet body = {\n\t\"method\": \"serverless.auth.user.anonymousAuthorize\",\n\t\"params\": \"{}\",\n\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\"timestamp\": timestamp\n};\n\nlet sign = createSign(body);\n\nlet headers = {\n\t\"Content-Type\": \"application\/json\",\n\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\"x-serverless-sign\": sign\n};\n\nlet response = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body),headers).body());\n\nif(response.success){\n\tconst accessToken = response.data.accessToken;\n\tconst timestamp2 = Date.now();\n        let orderBy = \"\";\n        if( baseUrl.match(\/view_count\/) ) orderBy = \"view_count\";\n        else orderBy = \"publish_date\";\n\tconst params2 = JSON.stringify({\n    \"functionTarget\": \"DCloud-clientDB\",\n    \"functionArgs\": {\n        \"command\": {\n            \"$db\": [\n                {\"$method\": \"collection\", \"$param\": [\"bl-time-novel\"]},\n                {\"$method\": \"where\", \"$param\": [{\"novel_status\": 1, \"publish_date\": {\"$db\": [{\"$method\": \"command\"}, {\"$method\": \"gte\", \"$param\": [1672502400000]}]}}]},\n                {\"$method\": \"field\", \"$param\": [\"_id,title,excerpt,creator_id,creator_name,creator_avatar,is_completed,cover_url,tags,word_number,view_count,novel_status\"]},\n                {\"$method\": \"orderBy\", \"$param\": [orderBy+\" desc\"]},\n                {\"$method\": \"skip\", \"$param\": [0]},\n                {\"$method\": \"limit\", \"$param\": [500]},\n                {\"$method\": \"get\", \"$param\": [{}]}\n            ]\n        }\n    }\n});\n\tlet body2 = {\n\t\t\"method\": \"serverless.function.runtime.invoke\",\n\t\t\"params\": params2,\n\t\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\t\"timestamp\": timestamp2,\n\t\t\"token\": accessToken\n\t};\n\tlet sign2 = createSign(body2);\n\tlet headers2 = {\n\t\t\"Content-Type\": \"application\/json\",\n\t\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\t\"x-basement-token\": accessToken,\n\t\t\"x-serverless-sign\": sign2\n\t};\n\tlet response2 = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body2),headers2).body());\n\tresult = JSON.stringify(response2);\n}result;\n<\/js>\n$.data.data","bookUrl":"https:\/\/bltime.cc\/pages\/novel\/detail?id={{$._id}}&creator_id={{$.creator_id}}","coverUrl":"$.cover_url","intro":"$.excerpt","kind":"$.tags","name":"$.title","wordCount":"$.word_number"},"ruleSearch":{"author":"$.creator_name","bookList":"<js>\nfunction createSign(params) {\n\tvar str = '';\n\tObject.keys(params).sort().forEach((key) => {\n\t\tif (params[key]) {\n\t\t\tstr += `&${key}=${params[key]}`;\n\t\t}\n\t});\n\treturn CryptoJS.HmacMD5(str.slice(1), 'c17DTXDNhSc0ea9AQMdUUQ==').toString();\n}\nconst timestamp = Date.now();\nlet body = {\n\t\"method\": \"serverless.auth.user.anonymousAuthorize\",\n\t\"params\": \"{}\",\n\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\"timestamp\": timestamp\n};\n\nlet sign = createSign(body);\n\nlet headers = {\n\t\"Content-Type\": \"application\/json\",\n\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\"x-serverless-sign\": sign\n};\n\nlet response = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body),headers).body());\n\nif(response.success){\n\tconst accessToken = response.data.accessToken;\n        const keyword = decodeURIComponent(baseUrl).match(\/\"([^\"]+)\"\/)[1];\n\tconst timestamp2 = Date.now();\n\tconst params2 = JSON.stringify({\n    \"functionTarget\": \"DCloud-clientDB\",\n    \"functionArgs\": {\n        \"command\": {\n            \"$db\": [\n                { \"$method\": \"collection\", \"$param\": [\"bl-time-novel\"] },\n                 { \"$method\": \"where\", \"$param\": [\"\\\"novel_status\\\" != 0 && (\/\" + keyword + \"\/i.test(title) || \/\" + keyword + \"\/i.test(creator_name))\"] },\n                { \"$method\": \"field\", \"$param\": [\"_id,title,excerpt,creator_id,creator_name,is_completed,cover_url,tags,view_count,word_number,novel_status,publish_date\"] },\n                { \"$method\": \"orderBy\", \"$param\": [\"publish_date desc\"] },\n                { \"$method\": \"limit\", \"$param\": [200] },\n                { \"$method\": \"get\", \"$param\": [] }\n            ]\n        }\n    }\n});\n\tlet body2 = {\n\t\t\"method\": \"serverless.function.runtime.invoke\",\n\t\t\"params\": params2,\n\t\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\t\"timestamp\": timestamp2,\n\t\t\"token\": accessToken\n\t};\n\tlet sign2 = createSign(body2);\n\tlet headers2 = {\n\t\t\"Content-Type\": \"application\/json\",\n\t\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\t\"x-basement-token\": accessToken,\n\t\t\"x-serverless-sign\": sign2\n\t};\n\tlet response2 = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body2),headers2).body());\n\tresult = JSON.stringify(response2);\n}result;\n<\/js>\n$.data.data","bookUrl":"https:\/\/bltime.cc\/pages\/novel\/detail?id={{$._id}}&creator_id={{$.creator_id}},{\"webView\":true}","checkKeyWord":"重生","coverUrl":"$.cover_url","intro":"$.excerpt","kind":"$.tags","name":"$.title","wordCount":"$.word_number"},"ruleToc":{"chapterList":"<js>\nfunction createSign(params) {\n\tvar str = '';\n\tObject.keys(params).sort().forEach((key) => {\n\t\tif (params[key]) {\n\t\t\tstr += `&${key}=${params[key]}`;\n\t\t}\n\t});\n\treturn CryptoJS.HmacMD5(str.slice(1), 'c17DTXDNhSc0ea9AQMdUUQ==').toString();\n}\nconst timestamp = Date.now();\nlet body = {\n\t\"method\": \"serverless.auth.user.anonymousAuthorize\",\n\t\"params\": \"{}\",\n\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\"timestamp\": timestamp\n};\n\nlet sign = createSign(body);\n\nlet headers = {\n\t\"Content-Type\": \"application\/json\",\n\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\"x-serverless-sign\": sign\n};\n\nlet response = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body),headers).body());\n\nif(response.success){\n\tconst accessToken = response.data.accessToken;\n\tconst idValue = baseUrl.match(\/id=([^&]+)\/)[1];\n\n\tconst timestamp2 = Date.now();\n\tconst params2 = JSON.stringify({\n\t  \"functionTarget\": \"DCloud-clientDB\",\n\t  \"functionArgs\": {\n\t\t\"command\": {\n\t\t  \"$db\": [\n\t\t\t{ \"$method\": \"collection\", \"$param\": [\"bl-time-chapter\"] },\n\t\t\t{ \"$method\": \"where\", \"$param\": [\"novel_id=='\" + idValue + \"'&&chapter_status==1\"] },\n\t\t\t{ \"$method\": \"field\", \"$param\": [\"_id,chapter_title,last_modify_date\"] },\n\t\t\t{ \"$method\": \"orderBy\", \"$param\": [\"chapter_index asc\"] },\n\t\t\t{ \"$method\": \"skip\", \"$param\": [0] },\n\t\t\t{ \"$method\": \"limit\", \"$param\": [500] },\n\t\t\t{ \"$method\": \"get\", \"$param\": [{}] }\n\t\t  ]\n\t\t}\n\t  }\n\t});\n\tlet body2 = {\n\t\t\"method\": \"serverless.function.runtime.invoke\",\n\t\t\"params\": params2,\n\t\t\"spaceId\": \"mp-a23ce835-47fc-4856-9c1a-5648136d3829\",\n\t\t\"timestamp\": timestamp2,\n\t\t\"token\": accessToken\n\t};\n\tlet sign2 = createSign(body2);\n\tlet headers2 = {\n\t\t\"Content-Type\": \"application\/json\",\n\t\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/129.0.0.0 Mobile Safari\/537.36\",\n\t\t\"x-basement-token\": accessToken,\n\t\t\"x-serverless-sign\": sign2\n\t};\n\tlet response2 = JSON.parse(java.post(\"https:\/\/api.next.bspapp.com\/client\",JSON.stringify(body2),headers2).body());\n\tresult = JSON.stringify(response2);\n}result;\n<\/js>\n$.data.data","chapterName":"$.chapter_title","chapterUrl":"https:\/\/bltime.cc\/pages\/novel\/read?id={{$._id}}","updateTime":"<js>\njava.timeFormat(result.last_modify_date)\n<\/js>"},"searchUrl":"https:\/\/bltime.cc\/pages\/search\/search?keyword=%22{{key}}%22,{\"webView\":true}","weight":0}]