77读书(77shuku)
http://www.77shuku.info
laizhiyu (6509)09/12 15:09
77读书 www.77shuku.info | 杰奇CMS UTF-8 无需登录 无搜索频控(实测) ◆ 规则要点: 搜索/发现/目录列表均 @js 返回JSON字符串数组+$.纯键字段(绕开AnalyzeByJSoup状态污染) ◆ 正文=div#ChapterContents去content_tip+截断txt下载地址尾部广告+逐行广告词过滤, 交HtmlFormatter净化 ◆ 发现=8分类(/store/N_page)+8排行(postdate=入库/toptime=本站推荐)+全本小说+站内最新 | bookUrlPattern匹配/novel/ID/ ◆ 构建: LegadoTeam官方版 2026-09-12
{
"bookSourceComment": "77读书 www.77shuku.info | 杰奇CMS UTF-8 无需登录 无搜索频控(实测) ◆ 规则要点: 搜索\/发现\/目录列表均 @js 返回JSON字符串数组+$.纯键字段(绕开AnalyzeByJSoup状态污染) ◆ 正文=div#ChapterContents去content_tip+截断txt下载地址尾部广告+逐行广告词过滤, 交HtmlFormatter净化 ◆ 发现=8分类(\/store\/N_page)+8排行(postdate=入库\/toptime=本站推荐)+全本小说+站内最新 | bookUrlPattern匹配\/novel\/ID\/ ◆ 构建: LegadoTeam官方版 2026-09-12",
"bookSourceGroup": "AI",
"bookSourceName": "77读书(77shuku)",
"bookSourceType": 0,
"bookSourceUrl": "http:\/\/www.77shuku.info",
"bookUrlPattern": "https?:\/\/www[.]77shuku[.]info\/novel\/[0-9]+\/?",
"concurrentRate": "2\/1000",
"customButton": false,
"customOrder": 0,
"enabled": true,
"enabledCookieJar": false,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "@js:var arr = []; function sec(t){ arr.push({title: t}); } function it(t, u){ arr.push({title: t, url: u}); } sec('—— 分类 ——'); it('玄幻', '\/store\/1_{{page}}.html'); it('仙侠', '\/store\/2_{{page}}.html'); it('都市', '\/store\/3_{{page}}.html'); it('言情', '\/store\/9_{{page}}.html'); it('穿越', '\/store\/4_{{page}}.html'); it('科幻', '\/store\/7_{{page}}.html'); it('恐怖', '\/store\/6_{{page}}.html'); it('网游', '\/store\/8_{{page}}.html'); sec('—— 排行 ——'); it('总点击榜', '\/rank\/allvisit\/'); it('月点击榜', '\/rank\/monthvisit\/'); it('周点击榜', '\/rank\/weekvisit\/'); it('最新入库', '\/rank\/postdate\/'); it('字数排行', '\/rank\/size\/'); it('总推荐榜', '\/rank\/allvote\/'); it('收藏排行', '\/rank\/goodnum\/'); it('本站推荐', '\/rank\/toptime\/'); sec('—— 专题 ——'); it('全本小说', '\/quanben.html'); it('站内最新', 'http:\/\/www.77shuku.info\/'); String(JSON.stringify(arr));",
"header": "{\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 14; Pixel 8) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/126.0.0.0 Mobile Safari\/537.36\"}",
"lastUpdateTime": "1789196952566",
"loginCheckJs": "var b = ''; try { var x = result.body; if (typeof x === 'function') { x = x.call(result); } b = String(x || ''); } catch (e) {} if (b.indexOf('搜索间隔') > -1 || b.indexOf('请勿频繁') > -1 || b.indexOf('稍后再') > -1) { throw new Error('⏳ 触发站点搜索间隔限制,请等待约2分钟后再搜索'); } result;",
"respondTime": 12493,
"ruleBookInfo": {
"author": "meta[property=og:novel:author]@content",
"coverUrl": "meta[property=og:image]@content",
"intro": "@js:var Jsoup = Packages.org.jsoup.Jsoup; var doc = (result && typeof result.select === 'function') ? result : Jsoup.parse(String(result)); var el = doc.select('div#intro'); el.size() > 0 ? String(el.get(0).html()) : '';",
"kind": "meta[property=og:novel:category]@content",
"lastChapter": "meta[property=og:novel:latest_chapter_name]@content",
"name": "meta[property=og:novel:book_name]@content",
"wordCount": "@js:var Jsoup = Packages.org.jsoup.Jsoup; var doc = (result && typeof result.select === 'function') ? result : Jsoup.parse(String(result)); var el = doc.select('div#info span.item'); var wc = ''; for (var i = 0; i < el.size(); i++) { var t = String(el.get(i).text()); if (t.indexOf('字数') > -1) { wc = t.replace('字数:', '').replace('字', ''); break; } } wc;"
},
"ruleContent": {
"content": "@js:var Jsoup = Packages.org.jsoup.Jsoup; var Parser = Packages.org.jsoup.parser.Parser; var doc = (result && typeof result.select === 'function') ? result : Jsoup.parse(String(result)); var els = doc.select('div#ChapterContents'); var out = ''; if (els.size() > 0) { var e = els.get(0); var tp = e.select('div#content_tip'); if (tp.size() > 0) { tp.get(0).remove(); } var htm = String(e.html()); var c1 = htm.indexOf('txt下载地址'); if (c1 > -1) { htm = htm.substring(0, c1); } var NL = String.fromCharCode(10); var SP = String.fromCharCode(32); var NB = String.fromCharCode(160); htm = htm.replace(\/<br[^>]*>\/gi, NL); htm = htm.replace(\/<[^>]+>\/g, SP); var raw = Parser.unescapeEntities(htm, true); raw = raw.split(NB).join(SP); var ads = ['txt', 'http', 'www.', '.com', '.net', '.cc', '.vip', '.top', '.xyz', '77dushu', '77shuku', '最新网址', '请收藏本站', '全文免费阅读', '全集txt', '记住77', '牢记网址', '无弹窗', '最快更新', '手机版', '手机端', '章节报错', 'APP', 'app下载', '盗版', '请分享']; function hasCJK(s) { for (var c = 0; c < s.length; c++) { var z = s.charCodeAt(c); if (z >= 19968 && z <= 40869) { return true; } } return false; } var lines = raw.split(NL); var res = []; for (var i = 0; i < lines.length; i++) { var ln = String(lines[i]).replace(\/ +\/g, SP).trim(); if (ln.length == 0) { continue; } var low = ln.toLowerCase(); var bad = false; for (var k = 0; k < ads.length; k++) { if (low.indexOf(ads[k].toLowerCase()) > -1) { bad = true; break; } } if (bad) { continue; } if (ln.length <= 8 && !hasCJK(ln)) { continue; } res.push(ln); } out = res.join(NL + NL); } out;"
},
"ruleExplore": {
"author": "$.author",
"bookList": "@js:var Jsoup = Packages.org.jsoup.Jsoup; var doc = (result && typeof result.select === 'function') ? result : Jsoup.parse(String(result)); function E(s){ return String(s).trim(); } var out = []; var bs = doc.select('div.shu_box'); if (bs.size() > 0) { for (var i = 0; i < bs.size(); i++) { var b = bs.get(i); var a = b.select('div.shu_xinxi h4 a'); if (a.size() == 0) { continue; } var sm = b.select('div.shu_xinxi h4 small'); var ip = b.select('p.intro'); var im = b.select('div.shu_img img'); out.push(String(JSON.stringify({name: E(a.get(0).text()), bookUrl: String(a.get(0).attr('href')), author: sm.size() > 0 ? E(sm.get(0).text()) : '', kind: '', lastChapter: '', wordCount: '', coverUrl: im.size() > 0 ? String(im.get(0).attr('src')) : '', intro: ip.size() > 0 ? E(ip.get(0).text()) : '', updateTime: ''}))); } } else { var rs = doc.select('div#articlelist ul li'); var hit = false; for (var i = 0; i < rs.size(); i++) { var a2 = rs.get(i).select('span.l2 a'); if (a2.size() == 0) { continue; } hit = true; var l1 = rs.get(i).select('span.l1'); var l3 = rs.get(i).select('span.l3'); var l4 = rs.get(i).select('span.l4 a'); var l5 = rs.get(i).select('span.l5'); var l7 = rs.get(i).select('span.l7'); out.push(String(JSON.stringify({name: E(a2.get(0).text()), bookUrl: String(a2.get(0).attr('href')), author: l3.size() > 0 ? E(l3.get(0).text()) : '', kind: l1.size() > 0 ? E(l1.get(0).text()) : '', lastChapter: l4.size() > 0 ? E(l4.get(0).text()) : '', wordCount: l5.size() > 0 ? E(l5.get(0).text()) : '', coverUrl: '', intro: '', updateTime: l7.size() > 0 ? E(l7.get(0).text()) : ''}))); } if (!hit) { var hs = doc.select('ul.titlelist li'); for (var i = 0; i < hs.size(); i++) { var an = hs.get(i).select('div.zp a'); if (an.size() == 0) { continue; } var lb = hs.get(i).select('div.lb'); var az = hs.get(i).select('div.author'); var zz = hs.get(i).select('div.zz a'); var sj = hs.get(i).select('div.sj'); out.push(String(JSON.stringify({name: E(an.get(0).text()), bookUrl: String(an.get(0).attr('href')), author: az.size() > 0 ? E(az.get(0).text()) : '', kind: lb.size() > 0 ? E(lb.get(0).text()).replace('[', '').replace(']', '') : '', lastChapter: zz.size() > 0 ? E(zz.get(0).text()) : '', wordCount: '', coverUrl: '', intro: '', updateTime: sj.size() > 0 ? E(sj.get(0).text()) : ''}))); } } } out;",
"bookUrl": "$.bookUrl",
"coverUrl": "$.coverUrl",
"intro": "$.intro",
"kind": "$.kind",
"lastChapter": "$.lastChapter",
"name": "$.name",
"wordCount": "$.wordCount"
},
"ruleSearch": {
"author": "$.author",
"bookList": "@js:var Jsoup = Packages.org.jsoup.Jsoup; var doc = (result && typeof result.select === 'function') ? result : Jsoup.parse(String(result)); function E(s){ return String(s).trim(); } var out = []; var rows = doc.select('tr'); for (var i = 0; i < rows.size(); i++) { var td = rows.get(i).select('td'); if (td.size() < 7) { continue; } var a = td.get(2).select('a'); if (a.size() == 0) { continue; } var url = String(a.get(0).attr('href')); if (url.indexOf('\/novel\/') < 0) { continue; } var name = E(a.get(0).text()); var auEl = td.get(5).select('span'); var author = auEl.size() > 0 ? E(auEl.get(0).text()) : E(td.get(5).text()); var kindS = E(td.get(1).text()).replace('[', '').replace(']', ''); var ch = td.get(3).select('a'); var last = ch.size() > 0 ? E(ch.get(0).text()) : ''; var wc = ''; if (td.size() > 7) { wc = E(td.get(7).text()); if (wc.indexOf('K') > -1) { wc = wc.split('K').join('000'); } } out.push(String(JSON.stringify({name: name, bookUrl: url, author: author, kind: kindS, lastChapter: last, wordCount: wc, intro: ''}))); } out;",
"bookUrl": "$.bookUrl",
"checkKeyWord": "剑来",
"coverUrl": "$.coverUrl",
"intro": "$.intro",
"kind": "$.kind",
"lastChapter": "$.lastChapter",
"name": "$.name",
"wordCount": "$.wordCount"
},
"ruleToc": {
"chapterList": "@js:var Jsoup = Packages.org.jsoup.Jsoup; var doc = (result && typeof result.select === 'function') ? result : Jsoup.parse(String(result)); var out = []; var seen = {}; var ds = doc.select('div.zjbox dd a'); for (var i = 0; i < ds.size(); i++) { var u = String(ds.get(i).attr('href')); var t = String(ds.get(i).text()).trim(); if (u.indexOf('\/chapter\/') < 0 || t.length == 0) { continue; } if (seen[u]) { continue; } seen[u] = 1; out.push(String(JSON.stringify({name: t, url: u}))); } out;",
"chapterName": "$.name",
"chapterUrl": "$.url"
},
"searchUrl": "http:\/\/www.77shuku.info\/modules\/article\/search.php?searchkey={{key}}",
"weight": 0
}