🔰长佩文学
https://webapi.gongzicp.com
zeng19711111 (15200)10/28 16:06
使用AI修复之前书源无法抓取正文问题,遇风控时会主动弹窗,滑动滑条后,重新刷新章节就能正常获取
{
"bookSourceComment": "\/\/2026-10-28 新增主动弹窗验证:配额用尽(check>=3)时,书源自动通过 startBrowserAwait 弹出内置浏览器并直接打开当前章节页,用户在网页里完成滑块(必要时先登录)后关闭返回,书源自动读取验证后的登录态并重新抓取本章正文,无需手动进菜单。自动降级:若版本不支持弹窗则回退为文字指引。其余:cid 独立请求、m\/www 双域名(仅网络失败切换)、优先复用应用内网页已验证的登录态、2 秒限速、登录态仅在正文为空时校验。 \/\/目录仅保留 type=item 的真实章节,过滤卷标题(volume)与占位(more),避免无效请求。",
"bookSourceGroup": "①🔰 正版,②🌸 常用",
"bookSourceName": "🔰长佩文学",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/webapi.gongzicp.com",
"bookUrlPattern": "",
"concurrentRate": "2000",
"customOrder": 15,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"exploreUrl": "<js>\nvar nums = 4;\nvar separator = '::'\ndate={\"昨日\":1,\"7天\":2,\"30天\":3,\"总\":8,\"时\":9,\"本周\":4,\"本月\":5};\n\n\/\/有一些分类没有该时间,所以显示为空,需要换时间\nd=date[\"本周\"]\n\n\nall=[\"我的书架::https:\/\/m.gongzicp.com\/webapi\/usercoll\/getList?page=1&filter=0&sort_key=3&sort_flag=2::1\",\"全部(分类)::75::1\",\"古代::3\",\"现代::1\",\"幻想::4\",\"悬疑::6\",\"短佩::66\",\"架空::9\",\"无CP::73\",\"百合::17\",\"畅销榜::75::1::1\",\"古代::3::::1\",\"现代::1::::1\",\"幻想::4::::1\",\"悬疑::6::::1\",\"短佩::66::::1\",\"架空::9::::1\",\"无CP::73::::1\",\"百合::17::::1\",\"上架榜::75::1::2\",\"古代::3::::2\",\"现代::1::::2\",\"幻想::4::::2\",\"悬疑::6::::2\",\"短佩::66::::2\",\"架空::9::::2\",\"无CP::73::::2\",\"百合::17::::2\",\"风云榜::75::1::3\",\"古代::3::::3\",\"现代::1::::3\",\"幻想::4::::3\",\"悬疑::6::::3\",\"短佩::66::::3\",\"架空::9::::3\",\"无CP::73::::3\",\"百合::17::::3\",\"热读榜::75::1::4\",\"古代::3::::4\",\"现代::1::::4\",\"幻想::4::::4\",\"悬疑::6::::4\",\"短佩::66::::4\",\"架空::9::::4\",\"无CP::73::::4\",\"百合::17::::4\",\"完结榜::75::1::5\",\"古代::3::::5\",\"现代::1::::5\",\"幻想::4::::5\",\"悬疑::6::::5\",\"短佩::66::::5\",\"架空::9::::5\",\"无CP::73::::5\",\"百合::17::::5\",\"人气榜::75::1::6\",\"古代::3::::6\",\"现代::1::::6\",\"幻想::4::::6\",\"悬疑::6::::6\",\"短佩::66::::6\",\"架空::9::::6\",\"无CP::73::::6\",\"百合::17::::6\",\"新书榜::75::1::7\",\"古代::3::::7\",\"现代::1::::7\",\"幻想::4::::7\",\"悬疑::6::::7\",\"短佩::66::::7\",\"架空::9::::7\",\"无CP::73::::7\",\"百合::17::::7\",\"新人榜::75::1::8\",\"古代::3::::8\",\"现代::1::::8\",\"幻想::4::::8\",\"悬疑::6::::8\",\"短佩::66::::8\",\"架空::9::::8\",\"无CP::73::::8\",\"百合::17::::8\",\"萌新榜::75::1::9\",\"古代::3::::9\",\"现代::1::::9\",\"幻想::4::::9\",\"悬疑::6::::9\",\"短佩::66::::9\",\"架空::9::::9\",\"无CP::73::::9\",\"百合::17::::9\",\"赞赏榜::75::1::10\",\"古代::3::::10\",\"现代::1::::10\",\"幻想::4::::10\",\"悬疑::6::::10\",\"短佩::66::::10\",\"架空::9::::10\",\"无CP::73::::10\",\"百合::17::::10\",\"互动榜::75::1::11\",\"古代::3::::11\",\"现代::1::::11\",\"幻想::4::::11\",\"悬疑::6::::11\",\"短佩::66::::11\",\"架空::9::::11\",\"无CP::73::::11\",\"百合::17::::11\",\"勤奋榜::75::1::12\",\"古代::3::::12\",\"现代::1::::12\",\"幻想::4::::12\",\"悬疑::6::::12\",\"短佩::66::::12\",\"架空::9::::12\",\"无CP::73::::12\",\"百合::17::::12\",\"潜力榜::75::1::15\",\"古代::3::::15\",\"现代::1::::15\",\"幻想::4::::15\",\"悬疑::6::::15\",\"短佩::66::::15\",\"架空::9::::15\",\"无CP::73::::15\",\"百合::17::::15\"]\n\n\n\n\/\/下面不要动\nfunction parse(data){\n\tlet args=data.split(separator);\n\tlet title = args[0],url=args[1],num=nums;\n\t\n\t\n\t\/\/看看链接如何生成,不需要生成,删除下一行\n\t let u=\/^\\d+\/.test(url)?\"https:\/\/webapi.gongzicp.com\/novel\/novelGetList?page={{page}}&size=10&tid=\"+url+\"&field=0&order=-1\":url\n\t \t\n try {num = \/^\\d+\/.test(args[2])?args[2]:num}catch(e){}\n try {\n \td=\/^5|(?:10)|(?:12)$\/g.test(args[3])?date[\"本月\"]:args[3]==11?date[\"时\"]:2;\n \tu = \/^\\d+\/.test(args[3])?\"https:\/\/webapi.gongzicp.com\/novel\/rankingGetList?tid=\"+url+\"&rid=\"+args[3]+\"&date=\"+d+\"&page={{page}}\":u\n }catch(e){}\n\treturn [title, u, num]\n\t}\n\nfunction FlexBox(title, url, num){\n\t\t let obj={};\n\t\t obj.style={},obj.title=title,obj.url=url?url:'',obj.style['layout_flexGrow']=1;\n\t\n\tlet data={1:1,2:0.4,3:0.25,4:0.2,5:0.15,7:0.1,10:0.05};\nobj.style['layout_flexBasisPercent']=data[num]\n\t\treturn obj\n\t\t}\nresult=JSON.stringify(all.map(data=>{\n\tlet args=parse(data);\n\treturn FlexBox.apply(null, args)\n\t}))\n<\/js>",
"header": "{\n \"User-Agent\": \"Mozilla\/5.0 (Linux; Android 8.1.0; JKM-AL00b Build\/HUAWEIJKM-AL00b; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/66.0.3359.126 MQQBrowser\/6.2 TBS\/044807 Mobile Safari\/537.36\"\n}",
"lastUpdateTime": "1793174774011",
"loginCheckJs": "",
"loginUi": "",
"loginUrl": "https:\/\/m.gongzicp.com\/",
"respondTime": 220878,
"ruleBookInfo": {
"author": "$.author_nickname",
"coverUrl": "$.novel_cover",
"init": "$.data",
"intro": "$.novel_info",
"kind": "$.type_names&&$.novel_process&&$.novel_tag_txt",
"lastChapter": "$.novel_newcname##^\\d+\\s+",
"name": "$.novel_name",
"tocUrl": "https:\/\/webapi.gongzicp.com\/novel\/chapterGetList?nid={{$.novel_id}}",
"wordCount": "$.novel_wordnumber"
},
"ruleContent": {
"content": "@js:(function(){\nvar mm = String(baseUrl).match(\/read-(\\d+)\/) || String(baseUrl).match(\/(\\d+)\/);\nvar cid = mm ? mm[1] : \"\";\nif (!cid) return \"\";\nfunction pull(token, host) {\n var opt = \",{\\\"headers\\\":{\\\"referer\\\":\\\"https:\/\/m.gongzicp.com\/read-\" + cid + \".html\\\",\\\"token\\\":\\\"\" + token + \"\\\",\\\"client\\\":\\\"h5\\\"}}\";\n try { return JSON.parse(String(java.ajax(\"https:\/\/\" + host + \"\/webapi\/novel\/chapterGetInfo?cid=\" + cid + \"&server=0\" + opt))); } catch (e) { return null; }\n}\nfunction valid(token) {\n try {\n var u = JSON.parse(String(java.ajax(\"https:\/\/m.gongzicp.com\/webapi\/user\/getUserInfo,{\\\"headers\\\":{\\\"token\\\":\\\"\" + token + \"\\\",\\\"client\\\":\\\"h5\\\"}}\")));\n return String(u.code) == \"200\";\n } catch (e) { return true; }\n}\nfunction fromWebView() {\n try { return String(java.webView(\"\", \"https:\/\/m.gongzicp.com\/\", \"sessionStorage.getItem('token') || ''\") || \"\"); } catch (e) { return \"\"; }\n}\nfunction dec(c) {\n try { return String(java.aesBase64DecodeToString(c, \"u0LRrbu$Enm84koA\", \"AES\/CBC\/PKCS5Padding\", \"$h$b3!iGzsYnnshj\") || \"\"); } catch (e) { return \"\"; }\n}\nvar token = String(java.get(\"cp_token\") || \"\");\nif (!token) {\n token = fromWebView();\n if (token) java.put(\"cp_token\", token);\n}\nif (!token) return \"【需要登录】请在书源菜单点「登录」,在应用内网页里登录长佩账号,然后刷新本章。\";\nvar r = pull(token, \"m.gongzicp.com\");\nif (r === null) r = pull(token, \"www.gongzicp.com\");\nif (r === null) return \"【获取失败】网络异常,请检查网络后重试。\";\nif (String(r.code) == \"9996\") { java.put(\"cp_token\", \"\"); return \"【登录已失效】请重新登录长佩账号后刷新本章。\"; }\nvar ci = r.data && r.data.chapterInfo;\nif (!ci) return \"【获取失败】\" + (r.msg || \"接口无数据\");\nvar txt = \"\";\nif (ci.content && ci.content.length > 40) txt = dec(ci.content);\nvar check = parseInt(String((r.data && r.data.check) || 0)) || 0;\nif (!txt) {\n if (ci.chapterPrice > 0) return \"【本章需订阅】\" + ci.chapterPrice + \" 玉佩(账号内未购买本章)\";\n \/\/ 第一步:尝试应用内网页已有的(可能已验证过的)登录态\n var t2 = fromWebView();\n if (t2 && t2 != token && valid(t2)) {\n var r2 = pull(t2, \"m.gongzicp.com\");\n var ci2 = r2 && r2.data && r2.data.chapterInfo;\n if (ci2 && ci2.content && ci2.content.length > 40) {\n var t2t = dec(ci2.content);\n if (t2t) { token = t2; ci = ci2; txt = t2t; java.put(\"cp_token\", t2); }\n }\n }\n}\nif (!txt) {\n var loginOk = valid(token);\n if (!loginOk) { java.put(\"cp_token\", \"\"); return \"【登录已失效】请在弹出的验证网页里登录长佩账号并完成滑块,然后刷新本章。\"; }\n if (check < 3) return \"【正文为空】站点未下发正文(check=\" + check + \"),请几分钟后重试。\";\n \/\/ 第二步:配额用尽,主动弹出验证网页(章节页),用户完成滑块后自动继续\n var popupOk = true;\n try { java.startBrowserAwait(\"https:\/\/m.gongzicp.com\/read-\" + cid + \".html\", \"长佩·滑块验证\"); }\n catch (e) { popupOk = false; }\n var t3 = fromWebView();\n if (!t3) t3 = token;\n var r3 = null, ci3 = null, t3t = \"\";\n if (valid(t3)) {\n r3 = pull(t3, \"m.gongzicp.com\");\n if (r3 === null) r3 = pull(t3, \"www.gongzicp.com\");\n ci3 = r3 && r3.data && r3.data.chapterInfo;\n if (ci3 && ci3.content && ci3.content.length > 40) t3t = dec(ci3.content);\n }\n if (t3t) {\n if (t3 != token) java.put(\"cp_token\", t3);\n ci = ci3; txt = t3t;\n } else {\n if (!popupOk) return \"【需要验证】当前阅读版本不支持自动弹出验证窗口。请点书源菜单「登录」,在应用内网页进入本书章节页完成滑块后刷新本章。\";\n if (!t3 || !valid(t3)) return \"【验证未完成】请在弹出的网页里先登录长佩账号,再进入章节完成滑块验证,然后刷新本章。\";\n return \"【验证未通过】滑块未完成或未生效,请重试本章;若多次失败请等 30-60 分钟后再试。\";\n }\n}\ntxt = String(txt).replace(\/\\r\/g, \"\").replace(\/\\n[ \\t\\u3000]*\\n\/g, \"\\n\\n\").replace(\/[ \\t\\u3000]+\\n\/g, \"\\n\").replace(\/\\n{3,}\/g, \"\\n\\n\").replace(\/^\\s+|\\s+$\/g, \"\");\nif (txt.indexOf(\"<\") < 0) txt = txt.replace(\/\\n\/g, \"<br>\");\nif (ci.postscript) txt = txt + \"<br><br>【作者有话说】\" + ci.postscript;\nreturn txt;\n})()",
"imageStyle": "0",
"nextContentUrl": "",
"payAction": "baseUrl",
"sourceRegex": "",
"webJs": ""
},
"ruleExplore": {
"author": "",
"bookList": "",
"bookUrl": "",
"coverUrl": "",
"intro": "",
"kind": "",
"lastChapter": "",
"name": ""
},
"ruleSearch": {
"author": "$.novel_author||$.author",
"bookList": "<js>\nif(\/search\\\/novels\/.test(baseUrl)){\n\ttry{\n\t\/\/搜索作者\nurl = \"https:\/\/m.gongzicp.com\/webapi\/search\/novelAndAuthor?k=\"+java.get(\"key\");\n\n$ = JSON.parse(java.ajax(url));\n\nuserid = $.data.user.user_id;\n\nurl = \"https:\/\/m.gongzicp.com\/webapi\/zone\/userGetNovelList?uid=\"+userid+\"&type=coll\";\n\naid = JSON.parse(java.ajax(url)).data.list[0].author_id;\nurl = \"https:\/\/m.gongzicp.com\/webapi\/zone\/userGetNovelList?aid=\"+aid+\"&type=author&page=\"+java.get(\"page\");\n\nlist =JSON.parse(java.ajax(url));\na= JSON.parse(result).data.list || []\nresult = a.concat(list.data.list);\nresult = JSON.stringify(result);\n}catch(e){}\n}\n\nif(baseUrl.match(\/usercoll\\\/getList\/)){\nresult=result.replace(\/[\\s\\S]+?<pre.*?>|<\\\/pre>[\\s\\S]+\/g,'');\n}else{\n\tresult=result\n}\n<\/js>\n$.data.list||$.[*]",
"bookUrl": "https:\/\/webapi.gongzicp.com\/novel\/novelInfo?id={{$.novel_id||$.id}}",
"checkKeyWord": "七小皇叔",
"coverUrl": "$.novel_cover||$.cover",
"intro": "$.novel_desc##<.*?>",
"kind": "$.novel_type&&$.novel_tag&&$.process",
"lastChapter": "{{$.novel_uptime||$.chapter}}•{{$.uptime}}##•$",
"name": "$.novel_name||$.name##<.*?>",
"wordCount": "$.novel_wordnumber"
},
"ruleToc": {
"chapterList": "$.data.list[?(@.type == 'item')]",
"chapterName": "第{{$.order}}章 {{$.name}}\n<js>\nvol = \"{{$.type}}\"==\"volume\"?\" 📖 \":\"\"\nvol+result+vol\n<\/js>\n##第章\\s*|第\\d+章\\s*(?=第\\d+章)",
"chapterUrl": "https:\/\/m.gongzicp.com\/read-{{$.id}}.html\n@js:\njava.put(\"nid\",baseUrl.match(\/id=(\\d+)\/)[1])\n\"{{$.type}}\"==\"volume\"?\"\":result",
"formatJs": "",
"isVip": "@js:\n\"{{$.pay}}\"==\"true\"?true:false",
"isVolume": "<js>\n\"{{$.type}}\"==\"volume\"?true:false\n<\/js>",
"updateTime": "{{$.public_date}} {{$.kt_number}}字##,|^字"
},
"searchUrl": "https:\/\/webapi.gongzicp.com\/search\/novels?k={{java.put(\"key\",key);key}}&page={{java.put(\"page\",page)}}",
"weight": 0
}