百合会论坛

https://bbs.yamibo.com

sf-gitee (12782)03/23 21:17

百合会论坛,需要登陆。支持文学区、中文百合漫画区、轻小说/译文区。
二维码导入
{
    "bookSourceComment": "需先登录百合会账号后使用;覆盖轻小说\/译文区、文学区、中文百合漫画区",
    "bookSourceGroup": "论坛",
    "bookSourceName": "百合会论坛",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/bbs.yamibo.com",
    "bookUrlPattern": "https?:\/\/bbs\\.yamibo\\.com\/forum\\.php\\?mod=viewthread.*tid=\\d+.*",
    "customOrder": 1,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "header": "{\"User-Agent\":\"Mozilla\/5.0 (Linux; Android 10; Mobile) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/131.0 Mobile Safari\/537.36\"}",
    "exploreUrl": "轻小说\/译文区::https:\/\/bbs.yamibo.com\/forum.php?mod=forumdisplay&fid=55&page={{page}}&mobile=2\n文学区::https:\/\/bbs.yamibo.com\/forum.php?mod=forumdisplay&fid=49&page={{page}}&mobile=2\n中文百合漫画区::https:\/\/bbs.yamibo.com\/forum.php?mod=forumdisplay&fid=30&page={{page}}&mobile=2\n轻小说最新::https:\/\/bbs.yamibo.com\/forum.php?mod=forumdisplay&fid=55&filter=lastpost&orderby=lastpost&page={{page}}&mobile=2\n文学最新::https:\/\/bbs.yamibo.com\/forum.php?mod=forumdisplay&fid=49&filter=lastpost&orderby=lastpost&page={{page}}&mobile=2\n漫画最新::https:\/\/bbs.yamibo.com\/forum.php?mod=forumdisplay&fid=30&filter=lastpost&orderby=lastpost&page={{page}}&mobile=2",
    "lastUpdateTime": "1774271829642",
    "loginUrl": "https:\/\/bbs.yamibo.com\/member.php?mod=logging&action=login&mobile=2",
    "respondTime": 180000,
    "ruleBookInfo": {
        "bookInfoInit": "(function(){\n    var doc = org.jsoup.Jsoup.parse(result, baseUrl);\n\n    function trim(s){ return s ? String(s).replace(\/^\\s+|\\s+$\/g, \"\") : \"\"; }\n    function norm(s){ return trim(String(s || \"\").replace(\/\\u00A0\/g, \" \").replace(\/[ \\t\\r\\f\\v]+\/g, \" \")); }\n    function text(el){ return el ? trim(el.text()) : \"\"; }\n    function own(el){ return el ? trim(el.ownText()) : \"\"; }\n    function abs(el, attr){ return el ? trim(el.attr(\"abs:\" + attr)) : \"\"; }\n    function forumName(){\n        var h = text(doc.select('.header h2 a').first());\n        return h ? h.replace(\/文學區\/g, '文学区') : '';\n    }\n    function cleanTitle(t){\n        t = trim(t || '');\n        t = t.replace(\/^\\s*(?:[\\[【][^\\]】]{1,24}[\\]】]\\s*)+\/g, '');\n        t = t.replace(\/\\s*[\\[【](?:更新|更至|更新至|更新到|完结|完結|番外.*?完).*?[\\]】]\\s*$\/g, '');\n        t = t.replace(\/\\s+\\d+\\s*\\\/\\s*\\d+\\s*(?:\\(\\d+\\s*\\\/\\s*\\d+\\))?\\s*$\/g, '');\n        return trim(t);\n    }\n    function decodeTextLines(s){\n        s = String(s || '').replace(\/\\r\/g, '');\n        var arr = s.split('\\n');\n        for (var i = 0; i < arr.length; i++) arr[i] = org.jsoup.Jsoup.parse(arr[i]).text();\n        return arr.join('\\n');\n    }\n    function messageToText(msgEl){\n        if (!msgEl) return '';\n        var c = msgEl.clone();\n        c.select('i.pstatus, script, style, rt, .quote, .pstatus, .aimg_tip, .jammer').remove();\n        var rubies = c.select('ruby');\n        for (var i = rubies.size() - 1; i >= 0; i--) rubies.get(i).unwrap();\n        var as = c.select('a');\n        for (var j = as.size() - 1; j >= 0; j--) as.get(j).unwrap();\n        var h = String(c.html() || '');\n        h = h.replace(\/<br[^>]*>\/ig, '\\n');\n        h = h.replace(\/<hr[^>]*>\/ig, '\\n\\n');\n        h = h.replace(\/<li[^>]*>\/ig, '\\n');\n        h = h.replace(\/<\\\/(?:li|div|p|section|blockquote|article|header|footer|aside|tr|td|th|ul|ol|table|tbody|thead|tfoot)>\/ig, '\\n');\n        h = h.replace(\/<h[1-6][^>]*>\/ig, '\\n\\n');\n        h = h.replace(\/<\\\/h[1-6]>\/ig, '\\n\\n');\n        h = h.replace(\/<[^>]+>\/g, '');\n        h = decodeTextLines(h);\n        h = h.replace(\/\\u00A0\/g, ' ');\n        h = h.replace(\/[ \\t\\f\\v]+\/g, ' ');\n        h = h.replace(\/ *\\n *\/g, '\\n');\n        h = h.replace(\/\\n{3,}\/g, '\\n\\n');\n        return trim(h);\n    }\n    function linesFromMessage(msgEl){\n        var txt = messageToText(msgEl);\n        var raw = txt.split(\/\\n+\/);\n        var arr = [];\n        for (var i = 0; i < raw.length; i++) {\n            var line = norm(raw[i]);\n            if (!line) continue;\n            if (\/^(本帖最后由|評分|评分|點評|点评|參與人數|参与人数|積分|积分|理由|查看全部评分)\/.test(line)) continue;\n            arr.push(line);\n        }\n        return arr;\n    }\n    var firstPost = doc.select('.plc.cl').first();\n    var firstMsg = firstPost ? firstPost.select('.message').first() : null;\n    var poster = firstPost ? text(firstPost.select('.authi .z a').first()) : '';\n    var postTime = firstPost ? own(firstPost.select('.authi .mtime').first()) : '';\n    var rawTitle = text(doc.select('.view_tit').first());\n\n    var lines = linesFromMessage(firstMsg);\n    var labelReg = \/^(作品名稱|作品名称|作品名|書名|书名|標題|标题|題名|题名|原名|作者|原作|原著|作者名|翻譯|翻译|譯者|译者|校對|校对|圖源|图源|嵌字|漢化|汉化|簡介|简介|內容簡介|内容简介|原文简介|介紹|介绍|文案|作品連結|作品链接|連結|链接|原地址|生肉|作品標籤|作品标签|主题|主題)\\s*[::]?\\s*$\/;\n    function isLabelLine(line){ return labelReg.test(trim(line || '')); }\n    function cleanValue(v){ return trim(v || '').replace(\/^[\\[\\【\\(\\(「『]+|[\\]\\】\\)\\)」』]+$\/g, ''); }\n    function extractSingle(keys, maxLen){\n        var keyReg = '(?:' + keys.join('|') + ')';\n        for (var i = 0; i < lines.length; i++) {\n            var line = trim(lines[i]);\n            var m = line.match(new RegExp('^' + keyReg + '\\\\s*[::]\\\\s*(.+)$', 'i'));\n            if (m) return cleanValue(m[1]).substring(0, maxLen || 120);\n            if (line.match(new RegExp('^' + keyReg + '\\\\s*[::]?\\\\s*$', 'i'))) {\n                for (var j = i + 1; j < lines.length && j <= i + 3; j++) {\n                    var n = trim(lines[j]);\n                    if (!n) continue;\n                    if (isLabelLine(n)) break;\n                    return cleanValue(n).substring(0, maxLen || 120);\n                }\n            }\n        }\n        return '';\n    }\n    function extractIntro(){\n        var keys = ['簡介','简介','內容簡介','内容简介','原文简介','介紹','介绍','文案'];\n        var keyReg = '(?:' + keys.join('|') + ')';\n        var start = -1, first = '';\n        for (var i = 0; i < lines.length; i++) {\n            var line = trim(lines[i]);\n            var m = line.match(new RegExp('^' + keyReg + '\\\\s*[::]\\\\s*(.*)$', 'i'));\n            if (m) { start = i + 1; first = trim(m[1]); break; }\n            if (line.match(new RegExp('^' + keyReg + '\\\\s*[::]?\\\\s*$', 'i'))) { start = i + 1; break; }\n        }\n        if (start < 0) return '';\n        var arr = [];\n        if (first) arr.push(first);\n        for (var j = start; j < lines.length; j++) {\n            var x = trim(lines[j]);\n            if (!x) continue;\n            if (isLabelLine(x)) break;\n            if (\/^(目錄|目录|索引|主題|主题|作品標籤|作品标签|邊看邊翻|边看边翻|嚴禁劇透|严禁剧透|轉載請註明|转载请注明|生肉推薦串|生肉推荐串)\/.test(x) && arr.length > 0) break;\n            arr.push(x);\n            if (arr.join('\\n').length >= 260 && arr.length >= 2) break;\n        }\n        return trim(arr.join('\\n')).substring(0, 320);\n    }\n    function normalizeTocUrl(u){\n        u = String(u || '').replace(\/([?&])__pid=\\d+\/g, '$1').replace(\/&&+\/g, '&').replace(\/#pid\\d+$\/g, '');\n        if (!u || u.indexOf('mod=viewthread') < 0) {\n            var tm = String(baseUrl || '').match(\/tid=(\\d+)\/);\n            if (tm) u = 'https:\/\/bbs.yamibo.com\/forum.php?mod=viewthread&tid=' + tm[1] + '&mobile=2';\n        }\n        if (u.indexOf('mobile=2') < 0) u += (u.indexOf('?') >= 0 ? '&' : '?') + 'mobile=2';\n        return u.replace(\/\\?&\/, '?');\n    }\n\n    var name = extractSingle(['作品名稱','作品名称','作品名','書名','书名','標題','标题','題名','题名','原名'], 180);\n    if (!name) name = cleanTitle(rawTitle);\n\n    var author = extractSingle(['作者','原作','原著','作者名'], 120);\n    if (!author) author = trim(poster);\n\n    var intro = extractIntro();\n    if (!intro) {\n        var metaDesc = trim(doc.select('meta[name=description]').attr('content'));\n        if (metaDesc) intro = metaDesc.replace(\/\\s*,\\s*百合会\\s*$\/i, '').substring(0, 260);\n    }\n\n    var forum = forumName();\n    var kind = '百合会' + (forum ? ',' + forum : '');\n    var onlyAuthor = doc.select('#nav-more-menu a[href*=authorid], a[rel=nofollow][href*=authorid]').first();\n    var toc = normalizeTocUrl(abs(onlyAuthor, 'href') || String(baseUrl || ''));\n\n    return {\n        name: name,\n        author: author,\n        kind: kind,\n        word: '',\n        last: postTime,\n        intro: intro,\n        cover: '',\n        toc: toc\n    };\n})()",
        "name": "name",
        "author": "author",
        "kind": "kind",
        "wordCount": "word",
        "lastChapter": "last",
        "intro": "intro",
        "coverUrl": "cover",
        "tocUrl": "toc",
        "canReName": true
    },
    "ruleContent": {
        "content": "<js>\n(function(){\n    var html = '';\n    try { html = result ? String(result) : ''; } catch(e) {}\n    if (!html) {\n        try { html = src ? String(src) : ''; } catch(e2) {}\n    }\n    var doc = org.jsoup.Jsoup.parse(html, baseUrl);\n\n    function trim(s){ return s ? String(s).replace(\/^\\s+|\\s+$\/g, '') : ''; }\n    function decodeTextLines(s){\n        s = String(s || '').replace(\/\\r\/g, '');\n        var arr = s.split('\\n');\n        for (var i = 0; i < arr.length; i++) arr[i] = org.jsoup.Jsoup.parse(arr[i]).text();\n        return arr.join('\\n');\n    }\n\n    var pid = '';\n    var m = String(baseUrl || '').match(\/[?&]__pid=(\\d+)\/);\n    if (!m) m = String(baseUrl || '').match(\/#pid(\\d+)\/);\n    if (!m) m = String(baseUrl || '').match(\/[?&]pid=(\\d+)\/);\n    if (m) pid = m[1];\n\n    var post = pid ? doc.select('#pid' + pid).first() : doc.select('.plc.cl').first();\n    var msg = post ? post.select('.message').first() : null;\n    if (!msg) return '';\n\n    msg = msg.clone();\n    msg.select('i.pstatus, script, style, rt, .quote, .pstatus, .aimg_tip, .jammer').remove();\n\n    var rubies = msg.select('ruby');\n    for (var r = rubies.size() - 1; r >= 0; r--) rubies.get(r).unwrap();\n\n    var imgMap = {};\n    var imgs = msg.select('img');\n    for (var i = imgs.size() - 1; i >= 0; i--) {\n        var img = imgs.get(i);\n        var src = trim(img.attr('abs:src')) || trim(img.attr('abs:zsrc')) || trim(img.attr('src')) || trim(img.attr('zsrc'));\n        if (!src) { img.remove(); continue; }\n        var token = '§§IMG' + i + '§§';\n        img.after('\\n' + token + '\\n');\n        img.remove();\n        imgMap[token] = '<img src=\"' + src + '\">';\n    }\n\n    var as = msg.select('a');\n    for (var j = as.size() - 1; j >= 0; j--) as.get(j).unwrap();\n\n    var h = String(msg.html() || '');\n    h = h.replace(\/<br[^>]*>\/ig, '\\n');\n    h = h.replace(\/<hr[^>]*>\/ig, '\\n\\n');\n    h = h.replace(\/<li[^>]*>\/ig, '\\n');\n    h = h.replace(\/<\\\/(?:li|div|p|section|blockquote|article|header|footer|aside|tr|td|th|ul|ol|table|tbody|thead|tfoot)>\/ig, '\\n');\n    h = h.replace(\/<h[1-6][^>]*>\/ig, '\\n\\n');\n    h = h.replace(\/<\\\/h[1-6]>\/ig, '\\n\\n');\n    h = h.replace(\/<[^>]+>\/g, '');\n    h = decodeTextLines(h);\n\n    for (var key in imgMap) {\n        h = h.split(key).join('\\n\\n' + imgMap[key] + '\\n\\n');\n    }\n\n    h = h.replace(\/\\u00A0\/g, ' ');\n    h = h.replace(\/[ \\t\\f\\v]+\/g, ' ');\n    h = h.replace(\/ *\\n *\/g, '\\n');\n    h = h.replace(\/\\n{3,}\/g, '\\n\\n');\n    h = trim(h);\n    if (!h) return '';\n\n    var blocks = h.split(\/\\n\\n+\/);\n    var out = [];\n    for (var p = 0; p < blocks.length; p++) {\n        var part = trim(blocks[p]);\n        if (!part) continue;\n        if (part.indexOf('<img ') >= 0) out.push(part);\n        else out.push(part.replace(\/\\n+\/g, '\\n'));\n    }\n    return out.join('\\n\\n');\n})();\n<\/js>",
        "imageStyle": "max-width:100%;height:auto;display:block;margin:0.6em auto;",
        "replaceRegex": "",
        "sourceRegex": ""
    },
    "ruleExplore": {
        "bookList": "<js>\n(function(){\n    var doc = org.jsoup.Jsoup.parse(result, baseUrl);\n    function trim(s){ return s ? String(s).replace(\/^\\s+|\\s+$\/g, \"\") : \"\"; }\n    function text(el){ return el ? trim(el.text()) : \"\"; }\n    function absHref(el){ return el ? trim(el.attr(\"abs:href\")) : \"\"; }\n    function norm(s){ return trim(String(s || \"\").replace(\/\\s+\/g, \" \")); }\n    function forumIdFromUrl(u){ var m = String(u || \"\").match(\/[?&]fid=(\\d+)\/); return m ? m[1] : \"\"; }\n    function forumNameFromId(fid){ if (fid == \"30\") return \"中文百合漫画区\"; if (fid == \"49\") return \"文学区\"; if (fid == \"55\") return \"轻小说\/译文区\"; return \"\"; }\n    function cleanForumName(s){ return norm(s).replace(\/^#\/, \"\").replace(\/文學區\/g, \"文学区\"); }\n    function makeBookUrl(threadUrl, uid){ var m = String(threadUrl || \"\").match(\/[?&]tid=(\\d+)\/); if (m && uid) return \"https:\/\/bbs.yamibo.com\/forum.php?mod=viewthread&tid=\" + m[1] + \"&page=1&authorid=\" + uid + \"&mobile=2\"; return trim(threadUrl || \"\"); }\n    function shouldKeep(title, desc, forumId, label, icon){\n        if (!title) return false;\n        if (icon && icon.indexOf(\"投票\") >= 0) return false;\n        if (!\/^(30|49|55)$\/.test(String(forumId || \"\"))) return false;\n        if (\/版规|版規|目录编辑教程|目錄編輯教程|新人须知|新人須知|如何找回账号|如何修改密码|禁止转载|禁止轉載|求助|報到|签到|簽到|公告\/.test(title)) return false;\n        var hay = [title, desc, label].join(\" \");\n        var kw = \/(翻译|翻譯|渣翻|自翻|渣译|渣譯|转载|轉載|生肉|更新|话|話|章|长篇|長篇|短篇|中篇|译介|譯介|文库|文庫|完结|完結|汉化组|漢化組|汉化|漢化|第.{0,10}[话話章]|[0-9一二三四五六七八九十百零〇]+[话話章])\/i;\n        return kw.test(hay);\n    }\n    var list = [];\n    var items = doc.select('.threadlist li.list');\n    for (var i = 0; i < items.size(); i++) {\n        var li = items.get(i);\n        var title = norm(text(li.select('.threadlist_tit').first()));\n        var poster = text(li.select('.muser a.mmc').first());\n        var uidHref = absHref(li.select('.muser a.mmc').first());\n        var uidM = uidHref.match(\/[?&]uid=(\\d+)\/);\n        var uid = uidM ? uidM[1] : '';\n        var desc = norm(text(li.select('.threadlist_mes').first()));\n        var labelEl = li.select('.threadlist_foot li.mr a').first();\n        var label = cleanForumName(text(labelEl));\n        var forumHref = absHref(labelEl);\n        var forumId = forumIdFromUrl(forumHref) || forumIdFromUrl(baseUrl);\n        var forumName = forumNameFromId(forumId) || label;\n        var icon = norm(text(li.select('.threadlist_tit .micon, .threadlist_tit em').first())).replace(\/[\\[\\]]\/g, '');\n        if (!shouldKeep(title, desc, forumId, label, icon)) continue;\n        var threadUrl = absHref(li.select(\"a[href*='viewthread']\").first());\n        var bookUrl = makeBookUrl(threadUrl, uid);\n        var kind = '百合会' + (forumName ? ',' + forumName : '') + (icon ? ',' + icon : '');\n        var intro = (forumName ? ('[' + forumName + '] ') : '') + desc;\n        list.push({name:title, author: trim(poster || ''), kind:kind, word:'', last:text(li.select('.mtime').first()), intro:intro, cover:'', url:bookUrl});\n    }\n    return list;\n})();\n<\/js>",
        "name": "name",
        "author": "author",
        "kind": "kind",
        "wordCount": "word",
        "lastChapter": "last",
        "intro": "intro",
        "coverUrl": "cover",
        "bookUrl": "url"
    },
    "ruleSearch": {
        "bookList": "<js>\n(function(){\n    var doc = org.jsoup.Jsoup.parse(result, baseUrl);\n    function trim(s){ return s ? String(s).replace(\/^\\s+|\\s+$\/g, \"\") : \"\"; }\n    function text(el){ return el ? trim(el.text()) : \"\"; }\n    function absHref(el){ return el ? trim(el.attr(\"abs:href\")) : \"\"; }\n    function norm(s){ return trim(String(s || \"\").replace(\/\\s+\/g, \" \")); }\n    function forumIdFromUrl(u){ var m = String(u || \"\").match(\/[?&]fid=(\\d+)\/); return m ? m[1] : \"\"; }\n    function forumNameFromId(fid){ if (fid == \"30\") return \"中文百合漫画区\"; if (fid == \"49\") return \"文学区\"; if (fid == \"55\") return \"轻小说\/译文区\"; return \"\"; }\n    function cleanForumName(s){ return norm(s).replace(\/^#\/, \"\").replace(\/文學區\/g, \"文学区\"); }\n    function makeBookUrl(threadUrl, uid){ var m = String(threadUrl || \"\").match(\/[?&]tid=(\\d+)\/); if (m && uid) return \"https:\/\/bbs.yamibo.com\/forum.php?mod=viewthread&tid=\" + m[1] + \"&page=1&authorid=\" + uid + \"&mobile=2\"; return trim(threadUrl || \"\"); }\n    function shouldKeep(title, desc, forumId, label, icon){\n        if (!title) return false;\n        if (icon && icon.indexOf(\"投票\") >= 0) return false;\n        if (!\/^(30|49|55)$\/.test(String(forumId || \"\"))) return false;\n        if (\/版规|版規|目录编辑教程|目錄編輯教程|新人须知|新人須知|如何找回账号|如何修改密码|禁止转载|禁止轉載|求助|報到|签到|簽到|公告\/.test(title)) return false;\n        var hay = [title, desc, label].join(\" \");\n        var kw = \/(翻译|翻譯|渣翻|自翻|渣译|渣譯|转载|轉載|生肉|更新|话|話|章|长篇|長篇|短篇|中篇|译介|譯介|文库|文庫|完结|完結|汉化组|漢化組|汉化|漢化|第.{0,10}[话話章]|[0-9一二三四五六七八九十百零〇]+[话話章])\/i;\n        return kw.test(hay);\n    }\n    var list = [];\n    var items = doc.select('.threadlist li.list');\n    for (var i = 0; i < items.size(); i++) {\n        var li = items.get(i);\n        var title = norm(text(li.select('.threadlist_tit').first()));\n        var poster = text(li.select('.muser a.mmc').first());\n        var uidHref = absHref(li.select('.muser a.mmc').first());\n        var uidM = uidHref.match(\/[?&]uid=(\\d+)\/);\n        var uid = uidM ? uidM[1] : '';\n        var desc = norm(text(li.select('.threadlist_mes').first()));\n        var labelEl = li.select('.threadlist_foot li.mr a').first();\n        var label = cleanForumName(text(labelEl));\n        var forumHref = absHref(labelEl);\n        var forumId = forumIdFromUrl(forumHref) || forumIdFromUrl(baseUrl);\n        var forumName = forumNameFromId(forumId) || label;\n        var icon = norm(text(li.select('.threadlist_tit .micon, .threadlist_tit em').first())).replace(\/[\\[\\]]\/g, '');\n        if (!shouldKeep(title, desc, forumId, label, icon)) continue;\n        var threadUrl = absHref(li.select(\"a[href*='viewthread']\").first());\n        var bookUrl = makeBookUrl(threadUrl, uid);\n        var kind = '百合会' + (forumName ? ',' + forumName : '') + (icon ? ',' + icon : '');\n        var intro = (forumName ? ('[' + forumName + '] ') : '') + desc;\n        list.push({name:title, author: trim(poster || ''), kind:kind, word:'', last:text(li.select('.mtime').first()), intro:intro, cover:'', url:bookUrl});\n    }\n    return list;\n})();\n<\/js>",
        "name": "name",
        "author": "author",
        "kind": "kind",
        "wordCount": "word",
        "lastChapter": "last",
        "intro": "intro",
        "coverUrl": "cover",
        "bookUrl": "url"
    },
    "ruleToc": {
        "chapterList": "<js>\n(function(){\n    var doc = org.jsoup.Jsoup.parse(result, baseUrl);\n    function trim(s){ return s ? String(s).replace(\/^\\s+|\\s+$\/g, '') : ''; }\n    function norm(s){ return trim(String(s || '').replace(\/\\u00A0\/g, ' ').replace(\/[ \\t\\r\\f\\v]+\/g, ' ')); }\n    function decodeTextLines(s){\n        s = String(s || '').replace(\/\\r\/g, '');\n        var arr = s.split('\\n');\n        for (var i = 0; i < arr.length; i++) arr[i] = org.jsoup.Jsoup.parse(arr[i]).text();\n        return arr.join('\\n');\n    }\n    function messageToText(msgEl){\n        if (!msgEl) return '';\n        var c = msgEl.clone();\n        c.select('i.pstatus, script, style, rt, .quote, .pstatus, .aimg_tip, .jammer').remove();\n        var rubies = c.select('ruby');\n        for (var i = rubies.size() - 1; i >= 0; i--) rubies.get(i).unwrap();\n        var as = c.select('a');\n        for (var j = as.size() - 1; j >= 0; j--) as.get(j).unwrap();\n        var h = String(c.html() || '');\n        h = h.replace(\/<br[^>]*>\/ig, '\\n');\n        h = h.replace(\/<hr[^>]*>\/ig, '\\n\\n');\n        h = h.replace(\/<li[^>]*>\/ig, '\\n');\n        h = h.replace(\/<\\\/(?:li|div|p|section|blockquote|article|header|footer|aside|tr|td|th|ul|ol|table|tbody|thead|tfoot)>\/ig, '\\n');\n        h = h.replace(\/<h[1-6][^>]*>\/ig, '\\n\\n');\n        h = h.replace(\/<\\\/h[1-6]>\/ig, '\\n\\n');\n        h = h.replace(\/<[^>]+>\/g, '');\n        h = decodeTextLines(h);\n        h = h.replace(\/\\u00A0\/g, ' ');\n        h = h.replace(\/[ \\t\\f\\v]+\/g, ' ');\n        h = h.replace(\/ *\\n *\/g, '\\n');\n        h = h.replace(\/\\n{3,}\/g, '\\n\\n');\n        return trim(h);\n    }\n    function linesFromMessage(msgEl){\n        var txt = messageToText(msgEl);\n        var raw = txt.split(\/\\n+\/);\n        var arr = [];\n        for (var i = 0; i < raw.length; i++) {\n            var line = norm(raw[i]);\n            if (!line) continue;\n            if (\/^(本帖最后由|評分|评分|點評|点评|參與人數|参与人数|積分|积分|理由|查看全部评分)\/.test(line)) continue;\n            arr.push(line);\n        }\n        return arr;\n    }\n    function cleanThreadTitle(){\n        var t = trim(doc.select('.view_tit').first().text());\n        t = t.replace(\/^\\s*(?:[\\[【][^\\]】]{1,20}[\\]】]\\s*)+\/g, '');\n        t = t.replace(\/[\\[【](?:\\d+[.\\-\/]\\d+更新.*?|更新.*?|完结.*?|完結.*?)[\\]】]\\s*$\/g, '');\n        t = t.replace(\/\\s+\\d+\\s*\\\/\\s*\\d+\\s*(?:\\(\\d+\\s*\\\/\\s*\\d+\\))?\\s*$\/g, '');\n        return trim(t);\n    }\n    function firstMeaningful(lines, rawTitle, imgCount){\n        if (imgCount >= 2) return rawTitle;\n        for (var i = 0; i < lines.length && i < 16; i++) {\n            var line = lines[i];\n            if (\/^(作品名稱|作品名称|作品名|書名|书名|標題|标题|題名|题名|原名|作者\\s*[::]?|原作\\s*[::]?|原著\\s*[::]?|翻譯\\s*[::]?|翻译\\s*[::]?|譯者\\s*[::]?|译者\\s*[::]?|校對\\s*[::]?|校对\\s*[::]?|圖源\\s*[::]?|图源\\s*[::]?|嵌字\\s*[::]?|漢化\\s*[::]?|汉化\\s*[::]?|簡介\\s*[::]?|简介\\s*[::]?|內容簡介\\s*[::]?|内容简介\\s*[::]?|原文简介\\s*[::]?|作品連結\\s*[::]?|作品链接\\s*[::]?|連結\\s*[::]?|链接\\s*[::]?|原地址\\s*[::]?|生肉\\s*[::]?|作品標籤\\s*[::]?|作品标签\\s*[::]?|主題\\s*[::]?|主题\\s*[::]?|目錄|目录|邊看邊翻|边看边翻|嚴禁劇透|严禁剧透)\/.test(line)) continue;\n            if (\/^[0-9]{1,3}(后)?$\/.test(line)) continue;\n            if (line.length <= 1) continue;\n            return line;\n        }\n        return rawTitle;\n    }\n    function isIntroCatalogPost(index, lines, msg){\n        if (index != 0) return false;\n        var tocLinks = msg.select(\"a[href*='goto=findpost'], a[href*='pid=']\").size();\n        if (tocLinks >= 2) return true;\n        var joined = lines.join('\\n');\n        if (\/(作品名稱|作品名称|作品名|書名|书名|作者|原作|原著|簡介|简介)\/.test(joined) && \/(目錄|目录|索引)\/.test(joined)) return true;\n        return false;\n    }\n    function isChapter(name, text, imgCount){\n        if (imgCount >= 2) return true;\n        if (\/^(前言|序章|后记|後記|番外|楔子|序|终章|終章|尾声|尾聲|最終話|最终话|第.{0,16}[话話章节章卷篇回]|[一二三四五六七八九十百零〇0-9]+[话話章节章卷篇回])\/.test(name)) return true;\n        if (text.length >= 180) return true;\n        return false;\n    }\n\n    var list = [];\n    var posts = doc.select('.plc.cl');\n    var pageUrl = String(baseUrl || '').replace(\/([?&])__pid=\\d+\/g, '$1').replace(\/&&+\/g, '&').replace(\/#pid\\d+$\/g, '');\n    var rawTitle = cleanThreadTitle();\n    for (var i = 0; i < posts.size(); i++) {\n        var post = posts.get(i);\n        var pid = String(post.id() || '').replace(\/^pid\/, '');\n        var msg = post.select('.message').first();\n        if (!pid || !msg) continue;\n        var lines = linesFromMessage(msg);\n        if (isIntroCatalogPost(i, lines, msg)) continue;\n        var text = lines.join('\\n');\n        var imgCount = msg.select('img').size();\n        var name = firstMeaningful(lines, rawTitle, imgCount);\n        if (!isChapter(name, text, imgCount)) continue;\n        var url = pageUrl + (pageUrl.indexOf('?') >= 0 ? '&' : '?') + '__pid=' + pid + '#pid' + pid;\n        list.push({name: name || rawTitle, url: url});\n    }\n    return list;\n})();\n<\/js>",
        "chapterName": "name",
        "chapterUrl": "url",
        "nextTocUrl": "<js>\n(function(){\n    var doc = org.jsoup.Jsoup.parse(result, baseUrl);\n    var a = doc.select(\"a:matchesOwn(^下一页$), a:matchesOwn(^下一頁$), .pg a.nxt, .pgs a.nxt\").first();\n    return a ? String(a.attr(\"abs:href\")) : \"\";\n})();\n<\/js>"
    },
    "searchUrl": "{{\n(function(){\n    if (page == 1) {\n        var body = \"srchtxt=\" + java.encodeURI(String(key)) + \"&searchsubmit=yes\";\n        var option = {\n            \"method\": \"POST\",\n            \"body\": String(body),\n            \"headers\": {\n                \"Content-Type\": \"application\/x-www-form-urlencoded\"\n            }\n        };\n        return \"https:\/\/bbs.yamibo.com\/search.php?mod=forum&mobile=2,\" + JSON.stringify(option);\n    } else {\n        var sid = java.get(\"yamibo_searchid\");\n        return \"https:\/\/bbs.yamibo.com\/search.php?mod=forum&searchid=\" + sid + \"&orderby=dateline&ascdesc=desc&searchsubmit=yes&page=\" + page + \"&mobile=2\";\n    }\n})()\n}}",
    "weight": 0
}
广告