Skip to content

书籍详情 (bookInfo)

bookInfo() 在用户进入书籍主页时调用,用于获取书籍的详细信息。

函数签名

js
function bookInfo(bookUrl) → BookItem
参数类型说明
bookUrlstring书籍详情页 URL(来自 search() 返回的 bookUrl

返回单个 BookItem 对象:

字段类型必填说明
namestring书名
authorstring作者
bookUrlstring书籍 URL
tocUrlstring目录页 URL(可与 bookUrl 相同)
coverUrlstring推荐封面图片 URL
introstring推荐书籍简介
latestChapterstring最新章节名
kindstring分类标签

基本示例

js
function bookInfo(bookUrl) {
  legado.log('[bookInfo] url=' + bookUrl);

  var html = legado.http.get(bookUrl);
  var doc = legado.dom.parse(html);

  var info = {
    name: legado.dom.selectText(doc, 'h1.book-title'),
    author: legado.dom.selectText(doc, '.author-name'),
    bookUrl: bookUrl,
    tocUrl: bookUrl,
    coverUrl: legado.dom.selectAttr(doc, '.book-cover img', 'src'),
    intro: legado.dom.selectText(doc, '.book-intro'),
    latestChapter: legado.dom.selectText(doc, '.latest-chapter a'),
    kind: legado.dom.selectText(doc, '.book-category')
  };

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

使用 OGP Meta 标签

很多站点通过 Open Graph meta 标签提供结构化信息,优先使用:

js
function bookInfo(bookUrl) {
  legado.log('[bookInfo] url=' + bookUrl);

  var html = legado.http.get(bookUrl);
  var doc = legado.dom.parse(html);

  var info = {
    name: legado.dom.selectAttr(doc, '[property="og:novel:book_name"]', 'content')
        || legado.dom.selectAttr(doc, '[property="og:title"]', 'content')
        || legado.dom.selectText(doc, 'h1'),
    author: legado.dom.selectAttr(doc, '[property="og:novel:author"]', 'content')
          || legado.dom.selectText(doc, '.author'),
    bookUrl: bookUrl,
    tocUrl: bookUrl,
    coverUrl: legado.dom.selectAttr(doc, '[property="og:image"]', 'content'),
    intro: legado.dom.selectAttr(doc, '[property="og:description"]', 'content'),
    latestChapter: legado.dom.selectAttr(doc, '[property="og:novel:latest_chapter_name"]', 'content')
  };

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

tocUrl 说明

  • tocUrl 是目录页的入口 URL,传给后续的 chapterList() 函数
  • 很多站点书籍详情页和目录页是同一个 URL,此时 tocUrl = bookUrl
  • 部分站点目录页是独立 URL,需要从详情页提取
js
// 目录在独立页面
var tocUrl = legado.dom.selectAttr(doc, 'a.read-btn', 'href');
info.tocUrl = absUrl(tocUrl); // 记得转绝对路径

拼写兼容

部分站点的"最新章节"字段可能写成 lastest(拼写错误),需要兼容:

js
latestChapter: legado.dom.selectText(doc, '.latest')
            || legado.dom.selectText(doc, '.lastest')

基于 MIT 许可发布