爱微阅读网
https://www.2vdu.com/
helloworld246 (13644) 05/17 21:58 下载:3607
小说 网文 综合
爱微阅读网书源 - 优化版(修复最新章节、增强章节获取兼容性)
// @name 爱微阅读网
// @uuid 2vdu2h4864940k666666
// @version 2.0.8
// @author hello world
// @url https://www.2vdu.com/
// @type novel
// @enabled true
// @tags 网文,综合
// @description 爱微阅读网书源 - 优化版(修复最新章节、增强章节获取兼容性)
// @minDelay 300
var BASE = 'https://www.2vdu.com';
var UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36';
function absUrl(path) {
if (!path) return '';
if (path.indexOf('http') === 0) return path;
if (path.indexOf('//') === 0) return 'https:' + path;
if (path.indexOf('/') === 0) return BASE + path;
return BASE + '/' + path;
}
function myHeaders() {
return { 'User-Agent': UA, 'Referer': BASE + '/' };
}
function trimStr(s) {
if (!s) return '';
return s.replace(/^\s+|\s+$/g, '');
}
async function search(keyword, page) {
legado.log('search: keyword=' + keyword + ' page=' + (page || 1));
if (!page) page = 1;
var url = BASE + '/search.html?kw=' + encodeURIComponent(keyword);
if (page > 1) url += '&page=' + page;
var html = await legado.http.get(url, myHeaders());
var doc = legado.dom.parse(html);
var items = legado.dom.selectAll(doc, 'ul li');
var out = [];
for (var i = 0; i < items.length; i++) {
var el = items[i];
var name = legado.dom.selectText(el, '.name a');
var href = legado.dom.selectAttr(el, '.image a', 'href');
if (!name || !href) continue;
out.push({
name: name,
author: legado.dom.selectText(el, '.author') || '',
bookUrl: absUrl(href),
coverUrl: absUrl(legado.dom.selectAttr(el, 'img', 'data-original')),
intro: legado.dom.selectText(el, '.desc') || ''
});
}
return out;
}
async function explore(page, category) {
legado.log('explore: page=' + (page || 1) + ' category=' + (category || ''));
if (category === 'GETALL') {
return ['最近更新', '玄幻', '奇幻', '武侠', '仙侠', '都市', '军事', '历史', '游戏', '科幻', '悬疑', '轻小说', '其他'];
}
if (!page) page = 1;
var m = {'玄幻':'1','奇幻':'2','武侠':'3','仙侠':'4','都市':'5','军事':'6','历史':'7','游戏':'8','科幻':'9','悬疑':'10','轻小说':'13','其他':'0'};
var url = BASE + '/shuku/0_' + (m[category]||'0') + '_0_0_0_' + page + '.html';
var html = await legado.http.get(url, myHeaders());
var doc = legado.dom.parse(html);
var items = legado.dom.selectAll(doc, 'ul > li');
var out = [];
for (var i = 0; i < items.length; i++) {
var el = items[i];
var name = legado.dom.selectText(el, '.name a');
var href = legado.dom.selectAttr(el, '.image a', 'href');
if (!name || !href) continue;
out.push({
name: name,
author: legado.dom.selectText(el, '.author') || '',
bookUrl: absUrl(href),
coverUrl: absUrl(legado.dom.selectAttr(el, 'img', 'data-original')),
intro: legado.dom.selectText(el, '.desc') || '',
kind: legado.dom.selectText(el, '.type') || '',
status: legado.dom.selectText(el, '.serial') || ''
});
}
return out;
}
async function bookInfo(bookUrl) {
legado.log('bookInfo: ' + bookUrl);
var html = await legado.http.get(bookUrl, myHeaders());
var doc = legado.dom.parse(html);
var name = legado.dom.selectText(doc, 'h1');
var a = (legado.dom.selectText(doc, '.detail .name span')||'').replace('著','').replace(/ /g,'').trim();
var cover = legado.dom.selectAttr(doc, '.book .image img', 'data-original');
if (!cover) cover = legado.dom.selectAttr(doc, '.book .image img', 'src');
var intro = legado.dom.selectText(doc, '.description')||'';
var status = '';
var wc = '';
var kind = '';
var last = '';
var labels = legado.dom.selectAll(doc, '.label');
for (var i = 0; i < labels.length; i++) {
var spans = legado.dom.selectAll(labels[i], 'span');
for (var j = 0; j < spans.length; j++) {
var txt = legado.dom.text(spans[j]);
if (txt.indexOf('状态:') === 0) status = txt.replace('状态:','').trim();
else if (txt.indexOf('字数:') === 0) wc = txt.replace('字数:','').trim();
else if (txt.indexOf('分类:') === 0) {
kind = txt.replace('分类:','').trim();
var ti = kind.indexOf('标签');
if (ti > -1) kind = kind.slice(0, ti).trim();
}
}
// 取"最新章节"后面的链接文本作为最新章节名
var txt2 = legado.dom.text(labels[i]);
if (txt2.indexOf('最新章节') > -1) {
var la = legado.dom.select(labels[i], 'a');
if (la) {
var chName = legado.dom.text(la);
// 排除广告文字【电视不过瘾?小说同样精彩,立即阅读】
if (chName && chName.indexOf('【') === -1 && chName.indexOf('电视') === -1) {
last = chName;
}
}
}
}
// 如果上面没取到最新章节,换个方式在doc中找
if (!last) {
var chLink = legado.dom.select(doc, "a[href*='/shu_1/']");
if (!chLink) chLink = legado.dom.select(doc, '.label a');
if (chLink) last = legado.dom.text(chLink);
}
var toc = bookUrl;
var ma = legado.dom.select(doc, "a[href*='mulu_']");
if (ma) toc = absUrl(legado.dom.attr(ma, 'href'));
return {
name: name||'', author: a, bookUrl: bookUrl, tocUrl: toc,
coverUrl: absUrl(cover), intro: intro, kind: kind,
status: status, latestChapter: last, wordCount: wc
};
}
async function chapterList(tocUrl) {
legado.log('chapterList: ' + tocUrl);
var html = await legado.http.get(tocUrl, myHeaders());
var doc = legado.dom.parse(html);
// 提取所有 a 标签,筛选出章节链接
var allLinks = legado.dom.selectAll(doc, 'a');
// 从tocUrl提取书本ID
var parts = tocUrl.split('/');
var bookId = '';
for (var p = 0; p < parts.length; p++) {
if (parts[p].indexOf('.html') > -1) {
bookId = parts[p].replace('.html', '');
break;
}
}
var expected = '/shu_1/' + bookId + '/';
var cs = [];
for (var i = 0; i < allLinks.length; i++) {
var href = legado.dom.attr(allLinks[i], 'href');
if (!href) continue;
if (href.indexOf(expected) === 0) {
var rest = href.replace(expected, '').replace('.html', '');
// 只取纯数字的章节
if (rest.match(/^\d+$/)) {
var name = legado.dom.text(allLinks[i]);
name = trimStr(name);
if (!name) name = '第' + rest + '章';
cs.push({ name: name, url: absUrl(href) });
}
}
}
return cs;
}
async function chapterContent(chapterUrl) {
legado.log('chapterContent: ' + chapterUrl);
var html = await legado.http.get(chapterUrl, myHeaders());
var doc = legado.dom.parse(html);
var c = legado.dom.selectText(doc, '.content')||'';
if (c) {
c = c.replace(/\n{3,}/g, '\n\n');
c = c.replace(/爱微阅读网.*?免费阅读/g, '');
c = c.replace(/【.*?】/g, '');
c = c.replace(/如遇到内容无法显示.*?正常阅读。/g, '');
c = c.replace(/^\s+|\s+$/g, '');
}
return c||'';
}