动漫之家
https://nnv3api.dmzj1.com
采集机器人 (2)2023/04/01
数据采集
{ "bookSourceGroup": "轻小说📗", "bookSourceName": "动漫之家", "bookSourceUrl": "https:\/\/nnv3api.dmzj1.com", "enable": true, "httpUserAgent": "Mozilla\/5.0 (X11; Linux x86_64; rv:60.0) Gecko\/20100101 Firefox\/60.0", "loginUrl": "", "ruleBookAuthor": "$.authors@js:java.put('author',result)", "ruleBookContent": "<js>\nif((\/\\.google\\.cn\/).test(baseUrl))\n {result=decodeURIComponent(baseUrl.replace(\/^.+[&?]text=\/, ''))}\n else\n{result=String(java.getString('html')).replace(\/(?:\\n\\s*,\\s*)+\\n*?$\/, '');\n\n}\nresult = String(result).replace(\/<img\\s+[^>]+>\/ig, '<p>〖插图,App暂不支持〗<\/p>');\n<\/js>", "ruleBookContentReplace": "##^[^\\n]*\\n", "ruleBookInfoInit": "@put:{ID:$.id}", "ruleBookKind": "$.types", "ruleBookLastChapter": "$.last_update_chapter_name", "ruleBookName": "$.name@js:java.put('sm',String(result))", "ruleBookUrlPattern": "", "ruleChapterList": "+<js>\n\/\/二级目录,Json\nvar jdoc = JSON.parse(result);\nvar chUrl = 'https:\/\/nnv3api.dmzj1.com\/novel\/download\/@get:{ID}_';\nvar volUrl = 'https:\/\/translate.google.cn\/#view=home&op=translate&sl=zh-CN&tl=en&text=';\nvar list = [];\n\/\/显示卷名\nvar opts = {\n showVolName: false\n};\n\nsm=java.get('sm');\nauthor=java.get('author');\n\nfunction format(title){\n return title.trim().replace(\/^(\\d+)(?![\\s\\d卷部章节回.])\/, '$1 ').replace(\/\\s+\/g, \"\\x20\\x20\");\n}\n\njdoc.forEach((vol,idx) => {\n var chs = vol.chapters.map(ch => ({\n text:(opts.showVolName ? '🍥[' + format(vol.volume_name) + ']🍥' : (ch.IsVip === '1' ? '💰' : '').padStart(3, \"\\u2000\")) +format(ch.chapter_name),\n href: chUrl+vol.volume_id+'_'+ch.chapter_id+'.txt',\n name: format(ch.chapter_name)\n }));\n\n var volInfo =author+\":\\n\"+sm+'\\\\'+format(vol.volume_name) + '\\n目录(' + chs.length + \"):\\n\";\n volInfo += chs.slice(0,30).map(v => v.name).join(\"\\n\");\n volInfo += chs.length > 30 ? \"\\n……\" : '';\n list.push({\n text: '♦[' + format(vol.volume_name) + ']♦',\n href: volUrl + encodeURIComponent(volInfo)\n });\n list = list.concat(chs);\n});\n\nresult = list;\n<\/js>", "ruleChapterName": "text", "ruleChapterUrl": "\/novel\/chapter\/{$.id}.json", "ruleChapterUrlNext": "", "ruleContentUrl": "href", "ruleContentUrlNext": "", "ruleCoverUrl": "", "ruleFindAuthor": "$.authors", "ruleFindCoverUrl": "$.cover", "ruleFindIntroduce": "$.last_update_time\n<js>\ndate= new Date(parseInt(result)*1000).toLocaleString();\n<\/js>##G.*\\s", "ruleFindKind": "{$.types},", "ruleFindLastChapter": "{$.last_update_volume_name} \n{$.last_update_chapter_name}", "ruleFindList": "$.[*]", "ruleFindName": "$.name", "ruleFindNoteUrl": "\/novel\/{$.id}.json", "ruleFindUrl": "最新::\/novel\/recentUpdate\/{{searchPage-1}}.json\n人气::\/novel\/rank\/0\/0\/{{searchPage-1}}.json\n订阅::\/novel\/rank\/1\/0\/{{searchPage-1}}.json\n全部::\/novel\/0\/0\/1\/{{searchPage-1}}.json\n恐怖::\/novel\/2\/0\/1\/{{searchPage-1}}.json\n科幻::\/novel\/4\/0\/1\/{{searchPage-1}}.json\n侦探::\/novel\/6\/0\/1\/{{searchPage-1}}.json\n爱情::\/novel\/8\/0\/1\/{{searchPage-1}}.json\n校园::\/novel\/12\/0\/1\/{{searchPage-1}}.json\n神鬼::\/novel\/14\/0\/1\/{{searchPage-1}}.json\n魔法::\/novel\/16\/0\/1\/{{searchPage-1}}.json\n冒险::\/novel\/20\/0\/1\/{{searchPage-1}}.json\n其他::\/novel\/25\/0\/1\/{{searchPage-1}}.json\n搞笑::\/novel\/40\/0\/1\/{{searchPage-1}}.json\n格斗::\/novel\/47\/0\/1\/{{searchPage-1}}.json\n机战::\/novel\/1264\/0\/1\/{{searchPage-1}}.json\n仙侠::\/novel\/1265\/0\/1\/{{searchPage-1}}.json\n都市::\/novel\/1266\/0\/1\/{{searchPage-1}}.json\n历史::\/novel\/1267\/0\/1\/{{searchPage-1}}.json\n战争::\/novel\/1268\/0\/1\/{{searchPage-1}}.json\n治愈::\/novel\/1269\/0\/1\/{{searchPage-1}}.json\n励志::\/novel\/1270\/0\/1\/{{searchPage-1}}.json\n后宫::\/novel\/1271\/0\/1\/{{searchPage-1}}.json\n百合::\/novel\/1272\/0\/1\/{{searchPage-1}}.json\n纯爱::\/novel\/1273\/0\/1\/{{searchPage-1}}.json\n异界::\/novel\/1274\/0\/1\/{{searchPage-1}}.json\n异能::\/novel\/1275\/0\/1\/{{searchPage-1}}.json\n穿越::\/novel\/1276\/0\/1\/{{searchPage-1}}.json\n奇幻::\/novel\/1321\/0\/1\/{{searchPage-1}}.json", "ruleIntroduce": "<br\/>分类:{$.types}<br\/>\n<br\/>{$.introduction}", "ruleSearchAuthor": "$.authors", "ruleSearchCoverUrl": "$.cover", "ruleSearchIntroduce": "", "ruleSearchKind": "$.types", "ruleSearchLastChapter": "$.last_name", "ruleSearchList": "$.[*]\n<js>\nvar opts = {\n pattern: \/\\\/show\\\/1\\\/([^\\\/]+)\\\/\/,\n name: '$.title',\n author: '$.authors'\n};\n\n\/\/删除糢糊匹配的搜索结果,然后按书名长度排序。依赖于baseUrl、result变量。\n\/\/return Array\n\/\/opts Object: 参数,包含以下key:\n\/\/target List<Object>(result): 要过滤列表。\n\/\/pattern RegExp: 匹配searchKey的正则表达式。\n\/\/name String: 书名规则。\n\/\/author String: 作者规则。\n\/\/charset String('UTF-8'): 编码方式。\n\/\/sorting Boolean(true): 是否重新排序。\n\nfunction searchFilter(opts){\n result = opts.target === undefined ? result : opts.target;\n opts.charset = opts.charset === undefined ? 'UTF-8' : opts.charset;\n opts.sorting = opts.sorting === undefined ? true : !!opts.sorting;\n function getText(ele, rule){\n java.setContent(ele);\n return String(java.getString(rule));\n }\n try {\n var kw = (baseUrl.match(opts.pattern) || ['',''])[1];\n kw = Packages.java.net.URLDecoder.decode(kw, opts.charset);\n result = result.toArray().filter(e => getText(e, opts.name).includes(kw) || getText(e, opts.author).includes(kw));\n return opts.sorting ? result.sort((a, b) => getText(a, opts.name).length - getText(b, opts.name).length) : result;\n } catch(e) {\n return result;\n }\n}\n\nsearchFilter(opts);\n<\/js>", "ruleSearchName": "$.title", "ruleSearchNoteUrl": "$.id@js:\"https:\/\/nnv3api.dmzj1.com:443\/novel\/\"+result+\".json\"", "ruleSearchUrl": "\/search\/show\/1\/searchKey\/{{searchPage-1}}.json", "serialNumber": 7, "weight": 0 }