基于.Net Core实现的飞书所有文档一键导出服务(支持多系统)

news2024/10/6 12:28:21

feishu-doc-export

一个支持Windows、Mac、Linux系统的飞书文档一键导出服务,仅需一行命令即可将飞书知识库的全部文档同步到本地电脑。导出速度嘎嘎快,实测700多个文档导出只需25分钟,且程序是后台挂机运行,不影响正常工作。

动机

最近也是公司办公软件从飞书切换回了企业微信,自然就产生了一些文档要迁移的问题,由于文档量过多(大概有700多个),无论是从飞书手动下载为Word或PDF格式的文档,还是将内容复制到本地新建Markdown文件都是一件极为繁琐的事情。于是便找到了两个GitHub上已有的飞书文档导出工具Feishu2MDfeishu-backup,但是他们都有一些问题不太满足我的需求。

现有方案的不满足

feishu-backup:

官方地址:dicarne/feishu-backup: 用于备份飞书文档,可以将飞书文档转成markdown下载。 (github.com)

  1. 因为它是网页版,下载速度太慢。有一次使用线上版选择了其中一个飞书文档节点下的所有文档(大概200-300个),下载了1个多小时还没有好,可能是卡死了。

  2. 因为它的下载方式是把选择的全部文档打包成压缩包后才会在浏览器返回给你,如果这个等待的过程中途断网或者电脑卡顿要重启,那你就白等那么长时间了。

  3. 因为它不支持下载表格类型的文档。

feishu2md:

官方地址:Wsine/feishu2md: 一键命令下载飞书文档为 Markdown (github.com)

我虽然没用实际使用过它,但我阅读它的官方文档后发现它的核心问题是一次只能下载一个文档。

我的需求

  • 一次导出知识库下的所有文档,包含文档和表格
  • 导出的文档目录结构保持和原飞书文档一致
  • 导出速度不要太慢
  • 对于文档导出的格式没有要求,docxxlsx即可

基于以上的种种原因呢,我决定自己动手写一个满足自己需求的程序来解决这个问题。这里我使用的是支持跨平台的.net core进行开发,最终打包程序可支持在windowslinuxmac系统上运行。这里将不赘述具体的实现过程,直接展示最终的效果图吧。

如何使用

获取AppId和AppSecret

  • 进入飞书开发者后台,创建企业自建应用,信息随意填写。进入应用的后台管理页
  • (重要)打开权限管理,开通需要的权限:云文档>开通以下权限(注意有分页)
    • 查看新版文档
    • 查看、评论和下载云空间中所有文件
    • 查看、评论和导出文档
    • 查看、评论、编辑和管理云空间中所有文件
    • 查看、评论、编辑和管理多维表格
    • 查看、编辑和管理知识库
    • 查看、评论、编辑和管理电子表格
    • 导出云文档
  • 打开添加应用能力,添加机器人
  • 版本管理与发布中创建一个版本,并申请发布上线
    • 等待企业管理员审核通过
    • 如果只是为了测试,可以选择测试企业和人员,创建测试企业,绑定应用,切换至测试版本
      • 进入测试企业创建知识库和文档
  • 为机器人添加知识库的访问权限,具体步骤如下:
    • 在飞书桌面客户端中创建一个新的群组或直接使用已有的群组
    • 为群组添加群机器人,选择上面步骤中自己创建的应用作为群机器人
    • 打开知识库,如果你是知识库管理员,则可以看见知识空间设置。打开知识空间设置>成员管理>添加成员,选择刚刚建立的群组
  • 回到开发者平台,打开凭证与基础信息,获取 App IDApp Secret

下载程序

v0.0.2.1版本为第一个正式发布版本,从v0.0.2.1往后迭代的每一个版本都将提供免安装的可执行程序。下载地址:(Releases)feishu-doc-export

  • windows-x64系统,下载feishu-doc-export-win-x64.zip

  • mac-osx-x64系统,下载feishu-doc-export-mac-osx-x64.zip

  • linux-x64系统,下载feishu-doc-export-linux-x64.zip

下载并解压即可得到程序可执行文件,windows环境的可执行文件为feishu-doc-export.exelinuxmac环境的可执行文件为feishu-doc-export没有后缀。

命令行执行

在可执行文件的目录打开终端,命令行所有参数如下:

请填写以下所有参数:
  --appId           飞书自建应用的AppId.
  --appSecret       飞书自建应用的AppSecret.
  --spaceId         飞书导出的知识库Id(可为空,或者不传此参数).
  --exportPath      文档导出的目录位置.
  • win环境

    # 指定知识库导出
    ./feishu-doc-export.exe --appId=111111 --appSecret=2222222  --spaceId=333333 --exportPath=E:\temp\测试飞书文档
    # 不指定知识库导出
    ./feishu-doc-export.exe --appId=111111 --appSecret=222222 --exportPath=E:\temp\测试飞书文档
    
  • linux环境和mac环境

    **注意!!!**首次使用时需要将文件授权为可执行文件

    # 将文件授权为可执行文件
    sudo chmod +x ./feishu-doc-export
    

    执行时最好使用sudo,否则可能出现权限不足,导致在保存文档时无法创建文件目录

    # 执行不指定知识库的导出
    sudo ./feishu-doc-export --appId=111111 --appSecret=222222 --exportPath=/home/ubuntu/feishu-document
    

执行效果图如下:

逐步执行

  1. 第一步,(win,mac)双击运行程序,输入飞书自建应用的配置,并输入文档要导出的目录位置。

    maclinux仍需执行命令sudo chmod +x ./feishu-doc-export来将文件设置为可执行文件。

    mac可能会出现不受信任的执行程序,需要手动覆盖“隐私与安全性”设置中的设置。linux则只能通过命令行输入.\feishu-doc-export而不带参数的方式执行

  2. 第二步,选择知识库后自动导出

    在这里插入图片描述

  3. 第三步,对比飞书原文档的目录结构

耗时测试

700多个文件导出到本地总耗时25分钟

总结

自己动手,丰衣足食,有趣且实用。不过目前我的方案不支持的功能有以下几点,以后有空了再增强

  • 不支持将文档导出为Markdown格式
  • 不支持单独导出一个文档
  • 不支持单独导出某个子节点下的所有文档

所以呢,目前我写的这个程序只适用于不要求将文档导出为Markdown的群体使用。

开源地址

点击跳转到源码地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫爬取top250中排名、评分、导演等展示可视化界面

源代码4千字报告 需要源代码数据库可视化数据4千字报告加我qq

基于matlab评估单相机校准的准确性(附源码)

一、前言 相机校准是使用特殊校准模式的图像估计相机参数的过程。参数包括相机内在系数、失真系数和相机外在系数。校准相机后,有几种方法可以评估估计参数的准确性: 绘制相机的相对位置和校准模式 计算重投影误差 计算参数估计误差 二、校准相机 …

Spring Boot 数据访问框架介绍及使用

Spring Boot 数据访问框架介绍及使用 Spring Boot 是一个流行的 Java 应用程序框架,它提供了许多工具和库,帮助开发人员快速构建高效的应用程序。其中,Spring Boot 数据访问框架是其中一个重要的组件,它提供了许多不同的选项&…

短视频抖音多账号管理系统源码搭建开发(路径一)

一、开发环境 目录 一、开发环境 二、短视频账号矩阵系统源码功能构建模型 短视频抖音多账号管理系统源码搭建开发,视频抖音多账号管理系统源码的开发环境配置非常重要。 1、首先,确保您的计算机已经安装了适当的开发工具,如Java SDK、An…

(css)文字与底部对齐

(css)文字与底部对齐 修改前: 修改后: 代码: .AITip {height: 11%;color: #01ffff;font-size: 24px;//主要属性display: flex;justify-content: center;align-items: flex-end;line-height: 1; }解决参考:https://blog.csdn.n…

多家快递如何跟踪物流信息,并快速掌握了每条物流信息时间差呢

对于很电商商家朋友们他平时一般都是发多家快递,多家快递公司的物流信息处理和管理是一个挑战。很多公司在处理这些信息时需要耗费大量人力和时间,为了提高工作效率和降低成本,需要采用一些高效的管理和利用方法。例如使用第三方的工具来&…

路由的介绍

目录 路由器的转发原理:路由表 路由——指示路由器去往未知网段的方法 路由器的转发原理:路由表 当一个数据包来到路由器,路由器将基于数据包中的目标IP地址查询自身的路由表,如果路由表中有相应的记录,则无条件根据…

Windows系统显示语言的修改及“我们无法获取此Windows显示语言”报错的处理

本文介绍在Windows 10操作系统中,修改系统的显示语言的方法;并解决在这一过程中,出现的“很抱歉,我们无法获取此Windows显示语言”报错问题。 本文就以将原本系统语言的中文修改为英文为例,介绍具体的方法。首先&#…

java 8 stream流之大数据篇

如果你会任意一门语言的stream流,没道理不会大数据开发。 俗话说男追女隔座山,女追男隔层纱。 如果说零基础学大数据,感觉前面是一座山,那么只要你会java或者任意一门语言的stream流,那大数据就只隔了一层纱。 本文以…

gazebo软件创造.world文件。

Gazebo可以创造数据。在Gazebo中创建一个机器人世界,不仅可以仿真机器人的运动功能,还可以仿真机器人的传感器数据。 背景:我是个新接触ros2的小白,变学习试用成功后分享狭窄的片面知识,必然不全,请多包含。…

高精度算法

&#xff08;一&#xff09;算法笔记 &#xff08;二&#xff09;算法的代码 2.1 大数加法的运算 #include<iostream> #include<vector> using namespace std;vector<int> add(vector<int> &a,vector<int> &b){if(a.size()<b.size(…

vue3+elementui-plus实现一个接口上传多个文件

首先&#xff0c;先使用element-plus写好上传组件&#xff0c;变量的定义我在这里就省略了都 <el-form-item prop"file" label"附件"><el-uploadstyle"width:100%"class"upload-demo"dragref"upload-demo"action&…

aardio - 【库】printer打印操作库

封装一些常用的绘图、文本功能&#xff0c;可以方便的进行打印。 绘制单位为毫米&#xff0c;精确度为0.01毫米。 库文件下载&#xff1a; http://chengxu.online → aardio资源下载 → printer.rar 打印效果&#xff1a; 示例代码&#xff1a; import console; impor…

在Django中使用xlrd读取excel表格数据

目录 方法一&#xff1a;按行读取 方法二&#xff1a;按表头与表数据一一对应的关系 方法三&#xff1a;按列的方式读取 之前有说到如何在Django中读取数据库数据写入到excel中 今天来说说如何读取excel中的数据&#xff0c;&#xff08;读取后就可以写入到数据库中了&#…

大数据分析平台选型全攻略:关注这五点绝不会错过!

大数据时代&#xff0c;选择适合的大数据分析平台已然成为企业成功的关键条件之一。企业在选择大数据分析平台时需要关注平台的适用性、可扩展性、可靠性、易用性和价格等五个方面。同时&#xff0c;需要结合自身的业务需求和预算进行综合考虑&#xff0c;这样才能在众多的大数…

ubuntu常用软件安装、异常处理

1.ubuntu更换源 打开以下文件&#xff1a; sudo gedit /etc/apt/sources.list 在文件中添加如下内容 #中科大源 deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main re…

在SpringBoot中整合RabbitMQ(19版idea)

首先呢就需要我们在RabbitMQ的可视化端口创建一个虚拟机,我创建的为 xm 1.创建SpringBoot项目 到这里SpringBoot项目就创建成功了 2.创建测试类 Testpublic void testConnection() throws Exception {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory…

MySQL高级整理

MySQL体系结构 Client Connectors&#xff1a; 接入方支持的协议。Management Serveices & Utilities&#xff1a; 系统管理和控制工具&#xff0c;mysqldump、 mysql复制集群、分区管理等。Connection Pool&#xff1a; 连接池&#xff0c;管理缓冲用户连接、用户名、密码…

IPv6 学习笔记

文章目录 一、概念和现状二、适用场景三、地址分配四、检查是否连接到IPv6网络五、查询本机的IPv6地址六、访问IPv6资源的方法 一、概念和现状 IPv6是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#xff09;的缩写&#xff0c;是互联网工程任务组&#x…

原型链与作用域链

在 JavaScript 中使用构造函数来新建一个对象的&#xff0c;每一个构造函数内部都有一个 prototype 属性&#xff0c;属性值是一个对象&#xff0c;这个对象包含了可以由该构造函数的所有实例共享的属性和方法。当使用构造函数新建一个对象后&#xff0c;在这个对象的内部将包含…