荏染柔木

https://m.po18.xyz/

zpccool (13551) 16小时前 下载:315

小说 小说
该用户很懒,什么介绍也没有写!
二维码导入(APP尚未完成该功能)
// @name        荏染柔木
// @uuid        renranroumu
// @version     1.0.0
// @author      AI
// @url         https://m.po18.xyz/
// @type        novel
// @enabled     true
// @tags        小说

var source = {
  name: "荏染柔木",
  url: "https://m.po18.xyz/",
  searchUrl: "/s.php,{\"method\":\"POST\",\"body\":\"type=articlename&s={{key}}\"}",
  exploreUrl: "综合::/wapsort/16_{{page}}.html\n校园::/wapsort/1_{{page}}.html\n都市::/wapsort/2_{{page}}.html\n古代::/wapsort/3_{{page}}.html\n网游::/wapsort/4_{{page}}.html\n科幻::/wapsort/5_{{page}}.html\n玄幻::/wapsort/6_{{page}}.html\n奇幻::/wapsort/7_{{page}}.html\n穿越::/wapsort/8_{{page}}.html\n历史::/wapsort/9_{{page}}.html\n耽美::/wapsort/10_{{page}}.html\n高干::/wapsort/11_{{page}}.html\n同人文::/wapsort/12_{{page}}.html\n种田::/wapsort/13_{{page}}.html\n同人::/wapsort/14_{{page}}.html\n其他::/wapsort/15_{{page}}.html"
};

async function search(keyword, page) {
  var url = source.url + "s.php";
  var body = "type=articlename&s=" + encodeURIComponent(keyword);
  var html = await legado.http.post(url, body, {});
  return parseSearch(html);
}

function parseSearch(html) {
  var doc = legado.dom.parse(html);
  var items = legado.dom.selectAll(doc, ".common-bookele");
  var books = [];
  for (var i = 0; i < items.length; i++) {
    var el = items[i];
    var a = legado.dom.select(el, "a");
    if (!a) continue;
    var href = legado.dom.attr(a, "href") || "";
    var m = href.match(/\/novel\/(\d+)\.html/);
    if (!m) continue;
    var id = m[1];
    books.push({
      name: legado.dom.text(a),
      author: legado.dom.selectText(el, "strong") || "",
      bookUrl: source.url + "novel/list/" + id + "/1.html",
      coverUrl: "",
      intro: ""
    });
  }
  legado.dom.free(doc);
  return books;
}

async function explore(page, category) {
  if (category === "GETALL" || !category) {
    return source.exploreUrl.split("\n").map(function(line) {
      return line.split("::")[0];
    });
  }
  var lines = source.exploreUrl.split("\n");
  var catUrl = "";
  for (var j = 0; j < lines.length; j++) {
    var parts = lines[j].split("::");
    if (parts[0] === category && parts[1]) { catUrl = parts[1]; break; }
  }
  if (!catUrl) return [];
  catUrl = catUrl.replace("{{page}}", String(page || 1));
  var baseUrl = source.url.replace(/\/+$/, "");
  var path = catUrl.replace(/^\/+/, "");
  var url = baseUrl + "/" + path;
  var html = await legado.http.get(url, {});
  return parseExplore(html);
}

function parseExplore(html) {
  var doc = legado.dom.parse(html);
  var allLinks = legado.dom.selectAll(doc, "a");
  var books = [];
  for (var i = 0; i < allLinks.length; i++) {
    var link = allLinks[i];
    var href = legado.dom.attr(link, "href") || "";
    if (href.indexOf("/novel/") < 0) continue;
    if (href.indexOf(".html") < 0) continue;
    if (href.indexOf("/list/") >= 0) continue;
    var m = href.match(/\/novel\/(\d+)\.html$/);
    if (!m) continue;
    var id = m[1];
    var text = legado.dom.text(link) || "";
    if (!text || text === "上一页" || text === "下一页") continue;
    books.push({
      name: text,
      author: "",
      bookUrl: source.url + "novel/list/" + id + "/1.html",
      coverUrl: "",
      intro: ""
    });
  }
  legado.dom.free(doc);
  return books;
}

async function bookInfo(bookUrl) {
  var html = await legado.http.get(bookUrl, {});
  var doc = legado.dom.parse(html);

  var title = legado.dom.selectText(doc, "title") || "";
  var idx = title.lastIndexOf("-");
  if (idx > 0) title = title.substring(0, idx).trim();
  var idx2 = title.indexOf("PO18");
  if (idx2 === 0) title = title.substring(4).trim();

  var introEl = legado.dom.select(doc, "pre");
  var intro = introEl ? legado.dom.text(introEl).replace(/\[\s\S]*?\]/g, "").trim() : "";

  legado.dom.free(doc);
  return {
    name: title,
    author: "",
    coverUrl: "",
    intro: intro,
    kind: "",
    lastChapter: "",
    tocUrl: bookUrl,
    wordCount: ""
  };
}

async function chapterList(tocUrl) {
  var html = await legado.http.get(tocUrl, {});
  var doc = legado.dom.parse(html);
  var links = legado.dom.selectAll(doc, "a");
  var chapters = [];
  var urlMap = {};

  for (var i = 0; i < links.length; i++) {
    var link = links[i];
    var href = legado.dom.attr(link, "href") || "";
    var cm = href.match(/\/novel\/(\d+)\/(\d+)\.html$/);
    if (!cm) continue;
    var name = legado.dom.text(link) || "";
    if (!name) continue;
    var chapterUrl = source.url + "novel/" + cm[1] + "/" + cm[2] + ".html";
    if (urlMap[chapterUrl]) continue;
    urlMap[chapterUrl] = true;
    chapters.push({
      name: name,
      url: chapterUrl
    });
  }

  var nextMatch = tocUrl.match(/\/list\/[^/]+\/(\d+)(?:\.html)?$/);
  if (nextMatch) {
    var curPage = parseInt(nextMatch[1], 10);
    var nextUrl = tocUrl.replace(/\/(\d+)(?:\.html)?$/, "/" + (curPage + 1) + ".html");
    var nextHtml = await legado.http.get(nextUrl, {});
    var nextDoc = legado.dom.parse(nextHtml);
    var nextLinks = legado.dom.selectAll(nextDoc, "a");
    for (var j = 0; j < nextLinks.length; j++) {
      var nl = nextLinks[j];
      var nh = legado.dom.attr(nl, "href") || "";
      var nm = nh.match(/\/novel\/(\d+)\/(\d+)\.html$/);
      if (!nm) continue;
      var nn = legado.dom.text(nl) || "";
      if (!nn) continue;
      var nurl = source.url + "novel/" + nm[1] + "/" + nm[2] + ".html";
      if (urlMap[nurl]) continue;
      urlMap[nurl] = true;
      chapters.push({ name: nn, url: nurl });
    }
    legado.dom.free(nextDoc);
  }

  legado.dom.free(doc);
  return chapters;
}

async function chapterContent(chapterUrl) {
  var html = await legado.http.get(chapterUrl, {});
  var doc = legado.dom.parse(html);
  var content = legado.dom.selectText(doc, "#nr1") || "";
  legado.dom.free(doc);
  return formatContent(content.trim());
}

function formatContent(text) {
  if (!text) return "";
  text = text.replace(/&nbsp;/g, " ");
  text = text.replace(/<br\s*\/?>/gi, "\n");
  text = text.replace(/<\/p>/gi, "\n\n");
  text = text.replace(/<p[^>]*>/gi, "");
  text = text.replace(/<[^>]+>/g, "");
  text = text.replace(/[ \t]+/g, " ");
  text = text.replace(/\n{3,}/g, "\n\n");
  text = text.replace(/^\s+|\s+$/gm, "");
  return text;
}
广告