动漫之家
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
}