爱微阅读网

https://www.2vdu.com/

helloworld246 (13644) 05/17 21:58 下载:3607

小说 网文 综合
爱微阅读网书源 - 优化版(修复最新章节、增强章节获取兼容性)
二维码导入(APP尚未完成该功能)
// @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(/&nbsp;/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||'';
}
广告