基于.Net Core实现的飞书文档一键导出服务(支持多系统)
feishu-doc-export
一个支持Windows、Mac、Linux系统的飞书文档一键导出服务,仅需一行命令即可将飞书知识库的全部文档同步到本地电脑。导出速度嘎嘎快,实测700多个文档导出只需25分钟,且程序是后台挂机运行,不影响正常工作。
动机
最近也是公司办公软件从飞书切换回了企业微信,自然就产生了一些文档要迁移的问题,由于文档量过多(大概有700多个),无论是从飞书手动下载为Word或PDF格式的文档,还是将内容复制到本地新建Markdown文件都是一件极为繁琐的事情。于是便找到了两个GitHub上已有的飞书文档导出工具Feishu2MD和feishu-backup,但是他们都有一些问题不太满足我的需求。
现有方案的不满足
feishu-backup:
官方地址:dicarne/feishu-backup: 用于备份飞书文档,可以将飞书文档转成markdown下载。 (github.com)
因为它是网页版,下载速度太慢。有一次使用线上版选择了其中一个飞书文档节点下的所有文档(大概200-300个),下载了1个多小时还没有好,可能是卡死了。
因为它的下载方式是把选择的全部文档打包成压缩包后才会在浏览器返回给你,如果这个等待的过程中途断网或者电脑卡顿要重启,那你就白等那么长时间了。
因为它不支持下载表格类型的文档。
feishu2md:
官方地址:Wsine/feishu2md: 一键命令下载飞书文档为 Markdown (github.com)
我虽然没用实际使用过它,但我阅读它的官方文档后发现它的核心问题是一次只能下载一个文档。
我的需求
- 一次导出知识库下的所有文档,包含文档和表格
- 导出的文档目录结构保持和原飞书文档一致
- 导出速度不要太慢
- 对于文档导出的格式没有要求,
docx和xlsx即可
基于以上的种种原因呢,我决定自己动手写一个满足自己需求的程序来解决这个问题。这里我使用的是支持跨平台的.net core进行开发,最终打包程序可支持在windows、linux、mac系统上运行。这里将不赘述具体的实现过程,直接展示最终的效果图吧。
如何使用
获取AppId和AppSecret
- 进入飞书开发者后台,创建企业自建应用,信息随意填写。进入应用的后台管理页
- (重要)打开权限管理,开通需要的权限:云文档>开通以下权限(注意有分页)
- 查看新版文档
- 查看、评论和下载云空间中所有文件
- 查看、评论和导出文档
- 查看、评论、编辑和管理云空间中所有文件
- 查看、评论、编辑和管理多维表格
- 查看、编辑和管理知识库
- 查看、评论、编辑和管理电子表格
- 导出云文档
- 打开添加应用能力,添加机器人
- 版本管理与发布中创建一个版本,并申请发布上线
- 等待企业管理员审核通过
- 如果只是为了测试,可以选择测试企业和人员,创建测试企业,绑定应用,切换至测试版本
- 进入测试企业创建知识库和文档
- 为机器人添加知识库的访问权限,具体步骤如下:
- 在飞书桌面客户端中创建一个新的群组或直接使用已有的群组
- 为群组添加群机器人,选择上面步骤中自己创建的应用作为群机器人
- 打开知识库,如果你是知识库管理员,则可以看见知识空间设置。打开知识空间设置>成员管理>添加成员,选择刚刚建立的群组
- 回到开发者平台,打开凭证与基础信息,获取
App ID和App Secret
下载程序
v0.0.2.1版本为第一个正式发布版本,从
v0.0.2.1往后迭代的每一个版本都将提供免安装的可执行程序。下载地址:(Releases)feishu-doc-export
windows-x64系统,下载
feishu-doc-export-win-x64.zipmac-osx-x64系统,下载
feishu-doc-export-mac-osx-x64.ziplinux-x64系统,下载
feishu-doc-export-linux-x64.zip
下载并解压即可得到程序可执行文件,windows环境的可执行文件为feishu-doc-export.exe,linux和mac环境的可执行文件为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
执行效果图如下:

逐步执行
第一步,(win,mac)双击运行程序,输入飞书自建应用的配置,并输入文档要导出的目录位置。
mac和linux仍需执行命令sudo chmod +x ./feishu-doc-export来将文件设置为可执行文件。mac可能会出现不受信任的执行程序,需要手动覆盖“隐私与安全性”设置中的设置。linux则只能通过命令行输入.\feishu-doc-export而不带参数的方式执行
第二步,选择知识库后自动导出

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

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

总结
自己动手,丰衣足食,有趣且实用。不过目前我的方案不支持的功能有以下几点,以后有空了再增强
- 不支持将文档导出为
Markdown格式 - 不支持单独导出一个文档
- 不支持单独导出某个子节点下的所有文档
所以呢,目前我写的这个程序只适用于不要求将文档导出为Markdown的群体使用。
基于.Net Core实现的飞书文档一键导出服务(支持多系统)的更多相关文章
- 如何使用 Core Plot 的 API 帮助文档
Core Plot 可是 iOS 下绝好的图表组件,虽说它的相关资料不甚丰富,特别是中文的,英文的还是有几篇不错的文章,不过 Core Plot 自身提供的 API 帮助文档,以及代码示例其实很有用的 ...
- asp.net core web api 生成 swagger 文档
asp.net core web api 生成 swagger 文档 Intro 在前后端分离的开发模式下,文档就显得比较重要,哪个接口要传哪些参数,如果一两个接口还好,口头上直接沟通好就可以了,如果 ...
- ABBYY 识别结果的文档怎么导出
使用ABBYY FineReader Pro for Mac OCR文字识别软件识别文档时,识别结果可以保存至一个文件.复制到剪贴板或通过电子邮件发送.可以执行下列操作:导出整个文档.仅导出所选页面. ...
- Java文档注释导出帮助文档和项目的jar包导入和导出。
1.1 文档注释导出帮助文档 在eclipse使用时,可以配合文档注释,导出对类的说明文档,从而供其他人阅读学习与使用. 通过使用文档注释,将类或者方法进行注释用@简单标注基本信息.如@au ...
- word文档的导出(用freemarker模板导出)(桃)
1.将要导出的word文档另存为xml格式的 2.用文档编辑器打开(如:notepad++),将要展示的数据用${name}的形式替换,“name”对应数据库中的字段 3.根据模板生成 package ...
- asp.net core 使用 swagger 生成接口文档
参考地址:http://www.cnblogs.com/daxnet/p/6181366.html http://www.jianshu.com/p/fa5a9b76f3ed 微软参考文档:https ...
- .net core 使用 swagger 生成接口文档
微软参考文档:https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs= ...
- ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现
from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https ...
- .NET Core和Swagger 生成 Api 文档
测试/生产环境的BUG 这里更新一下在本地调试正常,在INT/PROD上抛错,错误信息为: */**/*.xml(Swagger json file) 文件找不到,在startup 里builder ...
- .NET Core和Swagger 生成 Api 文档转
阅读目录 1.引用 2.打开startup.cs文件 3.设置XML注释 4.运行结果 5.主要问题的解决办法 6.可以自定义UI 前言 最近写了好多Web api, 老大说太乱了,要整理一下,使用S ...
随机推荐
- day01-Redis入门
Redis入门 1.初始Redis 1.1认识NoSQL SQL(关系型数据库) NoSQL(非关系型数据库) 数据结构 结构化(Structured) 非结构化 数据关联 关联的(Relationa ...
- Ubuntu-管理开机自启动服务
1. 管理服务启停工具 systemctl -- 将应用程序抽象为一个service,然后对这个service进行创建.启停.状态查看.配合journalctl进行日志管理 子命令 效果 start ...
- 容器云平台监控告警体系(五)—— Prometheus发送告警机制
1.概述 在Prometheus的架构中告警被划分为两个部分,在Prometheus Server中定义告警规则以及产生告警,Alertmanager组件则用于处理这些由Prometheus产生的告警 ...
- 机器学习04-(决策树、集合算法:AdaBoost模型、BBDT、随机森林、分类模型:逻辑回归)
机器学习04 机器学习-04 集合算法 AdaBoost模型(正向激励) 特征重要性 GBDT 自助聚合 随机森林 分类模型 什么问题属于分类问题? 逻辑回归 代码总结 波士顿房屋价格数据分析与房价预 ...
- NC23054 华华开始学信息学
题目链接 题目 题目描述 因为上次在月月面前丢人了,所以华华决定开始学信息学.十分钟后,他就开始学树状数组了.这是一道树状数组的入门题: 给定一个长度为 \(N\) 的序列 \(A\) ,所有元素初值 ...
- Redis缓存穿透、击穿、雪崩
文章目录 缓存穿透 缓存雪崩 缓存击穿 代码实战部分 缓存击穿实战代码封装 缓存穿透解决 Redis目前是非常流行的缓存数据库,缓存穿透.缓存击穿.缓存雪崩是常见的面试题,也是非常重要的问题. 缓存穿 ...
- Git&GitHub简介与入手(三)
五.eclipse中的git使用 1.eclipse中本地库操作 (检测显示创建成功): (设置本地库范围签名): (一些git里的图标,保存着不同内容): https://github.com/gi ...
- 2021-07-09:股票问题6。给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付
2021-07-09:股票问题6.给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用.你可以无限次地完成交易,但是你每笔交易都需要付 ...
- vue全家桶进阶之路31:Vue3 数据和方法的双向绑定ref、reactive、toRefs
ref 在 Vue 3 中,你可以使用 setup 函数来定义组件的数据和方法.在 setup 函数中,你可以使用 ref.reactive 和 computed 等 Vue 3 的响应式 API 来 ...
- 2023.5.16 总结 AT_abc260_g
atcoder AT_abc260_g 题意 一个点 O 可以影响到其它点,能影响到的点的坐标满足:(\((u, v)\) 为当前点的坐标,\((x, y) 为能影响到的点的坐标\)) \(u\le ...