🍅蕃茄小说
https://m.dzrjk.com
laizhiyu (6509)2天前
蕃茄小说手机站(m.dzrjk.com,PC 站 www.dzrjk.com 同库同模板)。
【搜索】/api/search 需 POST 31 个混淆校验变量 + sign,这些变量每次请求由服务端随机生成,必须先从 /user/search.html?q=关键词 页面正则抓取;其中 bgt 必须去掉最后一位字符(站点 common.js 的 search_before() 在 document.cookie 非空时执行 bgt=bgt.slice(0,len-1),而浏览器必然带 SID cookie),否则服务端返回 {"code":0,"data":{"search":[]}},把校验失败伪装成“无结果”而不是报错,极易误判为接口失效。
【限频】同一 IP 3 秒内二次搜索返回 code=1「搜索太频繁」。concurrentRate 的单位是毫秒,故写作 1/2000(每 2 秒 1 次),不是 1/2。
【搜索词】站内搜索是分词匹配,超长精确书名(如 11 字全名)会返回空,建议用短关键词,例如搜「无上之境」而不是「斗破苍穹之无上之境」。
【目录】详情页 ul.chapter 一次性输出全部章节(实测 988 章、217 章、280 章、1875 章、5461 章均无分页),无需 nextTocUrl;末章偶发重复前一章链接,Legado 会自动去重。
【正文】#text 内为 段落,无章内分页,不需要 nextContentUrl。个别老章节末尾混有站点残缺文本(形如 id"booktexts">),已用 replaceRegex 清除;注意该规则执行时 HTML 标签已被剥离、且 Java 的 String.replace 不带 MULTILINE,故正则不能写
也不能用 ^...$ 锚点。
【简介】站点自身在 introbar 里截断并加省略号,PC 站同样截断,属站点数据限制。
【发现】分类页与排行榜 URL 中的数字不是页码(实测 1.html、2.html、100.html 内容完全相同,每个分类固定 30 本),故固定用 1.html;上滑翻页会重复返回同一批书,属站点限制。
【bookUrlPattern】用于防止搜索 0 结果时 Legado 走“列表为空按详情页解析”造出假书,同时支持粘贴详情页 URL 直接搜。
{
"bookSourceComment": "蕃茄小说手机站(m.dzrjk.com,PC 站 www.dzrjk.com 同库同模板)。\n\n【搜索】\/api\/search 需 POST 31 个混淆校验变量 + sign,这些变量每次请求由服务端随机生成,必须先从 \/user\/search.html?q=关键词 页面正则抓取;其中 bgt 必须去掉最后一位字符(站点 common.js 的 search_before() 在 document.cookie 非空时执行 bgt=bgt.slice(0,len-1),而浏览器必然带 SID cookie),否则服务端返回 {\"code\":0,\"data\":{\"search\":[]}},把校验失败伪装成“无结果”而不是报错,极易误判为接口失效。\n【限频】同一 IP 3 秒内二次搜索返回 code=1「搜索太频繁」。concurrentRate 的单位是毫秒,故写作 1\/2000(每 2 秒 1 次),不是 1\/2。\n【搜索词】站内搜索是分词匹配,超长精确书名(如 11 字全名)会返回空,建议用短关键词,例如搜「无上之境」而不是「斗破苍穹之无上之境」。\n【目录】详情页 ul.chapter 一次性输出全部章节(实测 988 章、217 章、280 章、1875 章、5461 章均无分页),无需 nextTocUrl;末章偶发重复前一章链接,Legado 会自动去重。\n【正文】#text 内为 <p> 段落,无章内分页,不需要 nextContentUrl。个别老章节末尾混有站点残缺文本(形如 id\"booktexts\">),已用 replaceRegex 清除;注意该规则执行时 HTML 标签已被剥离、且 Java 的 String.replace 不带 MULTILINE,故正则不能写 <p> 也不能用 ^...$ 锚点。\n【简介】站点自身在 introbar 里截断并加省略号,PC 站同样截断,属站点数据限制。\n【发现】分类页与排行榜 URL 中的数字不是页码(实测 1.html、2.html、100.html 内容完全相同,每个分类固定 30 本),故固定用 1.html;上滑翻页会重复返回同一批书,属站点限制。\n【bookUrlPattern】用于防止搜索 0 结果时 Legado 走“列表为空按详情页解析”造出假书,同时支持粘贴详情页 URL 直接搜。",
"bookSourceGroup": "AI",
"bookSourceName": "🍅蕃茄小说",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/m.dzrjk.com",
"bookUrlPattern": "https?:\/\/(m|www)\\.dzrjk\\.com\/html(_wap)?\/\\d+\/?",
"concurrentRate": "1\/2000",
"customButton": false,
"customOrder": 0,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "玄幻小说::https:\/\/m.dzrjk.com\/xuanhuan_wap\/1.html&&修真小说::https:\/\/m.dzrjk.com\/xiuzhen_wap\/1.html&&都市小说::https:\/\/m.dzrjk.com\/dushi_wap\/1.html&&穿越小说::https:\/\/m.dzrjk.com\/chuanyue_wap\/1.html&&科幻小说::https:\/\/m.dzrjk.com\/kehuan_wap\/1.html&&网游小说::https:\/\/m.dzrjk.com\/wangyou_wap\/1.html&&周点击榜::https:\/\/m.dzrjk.com\/paihang_wap\/weekvisit\/1.html&&月点击榜::https:\/\/m.dzrjk.com\/paihang_wap\/monthvisit\/1.html&&总点击榜::https:\/\/m.dzrjk.com\/paihang_wap\/allvisit\/1.html&&日推荐榜::https:\/\/m.dzrjk.com\/paihang_wap\/dayvote\/1.html&&周推荐榜::https:\/\/m.dzrjk.com\/paihang_wap\/weekvote\/1.html&&月推荐榜::https:\/\/m.dzrjk.com\/paihang_wap\/monthvote\/1.html&&总推荐榜::https:\/\/m.dzrjk.com\/paihang_wap\/allvote\/1.html&&总收藏榜::https:\/\/m.dzrjk.com\/paihang_wap\/goodnum\/1.html&&总字数榜::https:\/\/m.dzrjk.com\/paihang_wap\/size\/1.html&&最新入库::https:\/\/m.dzrjk.com\/paihang_wap\/postdate\/1.html&&全本·周点击榜::https:\/\/m.dzrjk.com\/quanben_wap\/weekvisit\/1.html&&全本·月点击榜::https:\/\/m.dzrjk.com\/quanben_wap\/monthvisit\/1.html&&全本·总点击榜::https:\/\/m.dzrjk.com\/quanben_wap\/allvisit\/1.html&&全本·日推荐榜::https:\/\/m.dzrjk.com\/quanben_wap\/dayvote\/1.html&&全本·周推荐榜::https:\/\/m.dzrjk.com\/quanben_wap\/weekvote\/1.html&&全本·月推荐榜::https:\/\/m.dzrjk.com\/quanben_wap\/monthvote\/1.html&&全本·总推荐榜::https:\/\/m.dzrjk.com\/quanben_wap\/allvote\/1.html&&全本·总收藏榜::https:\/\/m.dzrjk.com\/quanben_wap\/goodnum\/1.html&&全本·总字数榜::https:\/\/m.dzrjk.com\/quanben_wap\/size\/1.html&&全本·最新入库::https:\/\/m.dzrjk.com\/quanben_wap\/postdate\/1.html",
"header": "{\"User-Agent\":\"Mozilla\/5.0 (Linux; Android 12; SM-G991B) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Mobile Safari\/537.36\"}",
"lastUpdateTime": "1792585603960",
"respondTime": 12305,
"ruleBookInfo": {
"author": "p.0@text##^作者:",
"coverUrl": ".image img@src",
"intro": ".introbar@text##^简介:|本站提示.*$",
"kind": "p.1@text##^类别:",
"lastChapter": ".newest a@text",
"name": "h2.title@text"
},
"ruleContent": {
"content": "#text@html",
"replaceRegex": "##id.booktexts.>##"
},
"ruleExplore": {
"author": "p.0@text##^作者:",
"bookList": "#list article",
"bookUrl": "a.0@href",
"coverUrl": ".image img@src",
"intro": "p.intro@text##^简介:",
"name": "h2.title@text"
},
"ruleSearch": {
"author": "$.author",
"bookList": "$.data.search[*]",
"bookUrl": "$.book_list_url",
"coverUrl": "$.cover",
"intro": "$.intro",
"kind": "$.cate_name",
"lastChapter": "$.latest_chapter_name",
"name": "$.book_name"
},
"ruleToc": {
"chapterList": "ul.chapter li a",
"chapterName": "text",
"chapterUrl": "href"
},
"searchUrl": "@js:var base = 'https:\/\/m.dzrjk.com';\nvar kw = String(key);\nvar page = base + '\/user\/search.html?q=' + encodeURIComponent(kw);\nvar html = String(java.ajax(page));\nif (html.length < 500) html = String(java.ajax(page));\nvar names = 'vw abw ru jrt van fw cwl gpr uyoo tz euu tsn eju um fp dvm jpk deblkx ht azy sna wqx fpp rup jwj bgt qp yf cw wq'.split(' ');\nvar re = \/var\\s+([A-Za-z_]\\w*)\\s*=\\s*\"([^\"]*)\"\/g;\nvar map = {};\nvar mm;\nwhile ((mm = re.exec(html)) !== null) { map[mm[1]] = mm[2]; }\nvar pairs = [];\nfor (var i = 0; i < names.length; i++) {\n var n = names[i];\n var v = map[n];\n if (typeof v === 'undefined') continue;\n if (n === 'bgt' && v.length > 1) v = v.slice(0, v.length - 1);\n pairs.push(n + '=' + encodeURIComponent(v));\n}\npairs.push('sign=' + encodeURIComponent(map['sign'] || ''));\npairs.push('q=' + encodeURIComponent(kw));\nvar opt = {\n method: 'POST',\n body: pairs.join('&'),\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8',\n 'Origin': base,\n 'Referer': page\n }\n};\nbase + '\/api\/search,' + JSON.stringify(opt)",
"weight": 0
}