renyunkang / yuque-exporter

A tool for exporting Yuque documents as markdown.
GNU General Public License v2.0
173 stars 26 forks source link

一个小tips,下载制定的知识库 #16

Open markyun opened 5 months ago

markyun commented 5 months ago

因为我的知识库文档内容太多,整体下载会卡死或超时。

可以在 getAllBooks 函数中,拿到 bookData 数据后,进行判断,只下载需要的 books 知识库。 code:if (object.books[i].id ===id) {

通过 https://www.yuque.com/api/mine/book_stacks 接口获取 全部 bookData内容,得到book_id。

通过 https://www.yuque.com/api/catalog_nodes?book_id=xxx + id 可以得到当前知识库的全部文章列表 getBookDetail 内容。

Tiang-88 commented 4 months ago

可以给一个详细的步骤吗?

markyun commented 4 months ago

可以给一个详细的步骤吗?

关键code

for (const object of bookData) { for (let i = 0; i < object.books.length; i++) { if (booksId && object.books[i].id ===booksId) { const book = new Book(object.books[i].id, delNonStdChars(object.books[i].name), object.books[i].slug); console.log("book",book); book.root = await getBookDetail(page, book); book.user_url = object.books[i].user.login books.push(book);
}

    }
}
fgc346 commented 1 month ago

根据知识库名称下载特定知识库的步骤

获取知识库的数据结构

  "id": *********,
  "type": "Book",
  "slug": "isowbw",
  "name": "**********",
  "user_id": *********,
  "description": null,
  "items_count": 1,
  "likes_count": 0,
  "watches_count": 0,
  "creator_id": ********,
  "abilities": {
    "read": true,
    "update": true,
    "modify_setting": true,
    "destroy": true,
    "share": true,
    "read_private": true,
    "create_doc": true
  },

重点关注的字段

关键代码修改

修改文件的路径

src/toc.js

具体代码修改

因为我的知识库全部改成了英文名称,因此,我使用知识库名称过滤。

    for (const object of bookData) {
       // 定义要导出的知识库名称,
        var book_name = "*****";
       // 也可以根据知识库的id过滤,也是由知识库名称找到对应的知识库ID。
        var book_id = "****";
        for (let i = 0; i < object.books.length; i++) {
            // 筛选出 特定的知识库,根据知识库名字进行过滤
            if (book_name == object.books[i].name)
           // if (book_id == object.books[i].id)
            {
              const book = new Book(object.books[i].id, delNonStdChars(object.books[i].name), object.books[i].slug);
              // console.log(`Books information is: `, JSON.stringify(object.books[i]));

              // break;
              // continue;
              book.root = await getBookDetail(page, book);
              book.user_url = object.books[i].user.login
              books.push(book);
            }
        }
    }

效果

当执行 node main.js之后,就只下载特定的知识库。