Skip to content

acyumi/xdoc

Repository files navigation

XDoc文档导出器

本程序按 Apache 2.0 协议提供,作者不保证其适用性,使用风险由用户自行承担。

2、如何使用?

以下使用说明以windows为例,其他系统请自行变通使用

windows中建议使用 PowerShell (win11默认终端)执行本程序,gitbash 显示有点问题,效果没那么好

2.1、下载程序

Releases 地址中下载相应系统的可执行程序

OS 架构 程序
windows amd64 xdoc.exe
windows arm64 xdoc.arm64.exe
linux amd64 xdoc
linux arm64 xdoc.arm64.exe
macos amd64 xdoc.darwin
macos arm64 xdoc.arm64.darwin

2.2、查看帮助信息

# 主命令帮助信息
.\xdoc
.\xdoc -h
.\xdoc --help

# 子命令帮忙信息
.\xdoc export -h
.\xdoc export --help
.\xdoc help export
.\xdoc export feishu -h
.\xdoc export feishu --help
.\xdoc help export feishu

截图和录屏可能是旧版本的,请以实际版本的为准,关键功能不会有太大差别

image-20250326231938537

image-20250326232643462

2.3、指定配置文件执行

# 在当前目录生成config.yaml配置文件
# 配置文件生成后,请自行修改配置才能使用
.\xdoc -g

# 使用当前目录的config.yaml(无参时的默认指向)
# 需要打开配置中的飞书导出开关,即export.feishu.enabled=true
.\xdoc export

# 指定当前目录下的local.yaml
.\xdoc export --config ./local.yaml

# 使用当前目录的config.yaml(无参时的默认指向)
# 如果export.feishu.enabled=false,也可以直接指向第三级命令feishu来执行
.\xdoc export feishu

使用yaml配置文件,参考如下

export:
  list-only: false
  feishu:
    enabled: true
    app-id: "cli_xxx"
    app-secret: "xxx"
    urls:
      - "https://xxx.feishu.cn/wiki/xxx"
    dir: "/xxx/docs"

更多参数及说明详见项目中的 config-template

2.4、指定命令行参数执行

# 指定四大必填参数,下载完成后自动退出
.\xdoc export feishu -q --app-id cli_xxxxx --app-secret xxxxxxx --dir E:\tmp\xxxx --urls https://xxx.feishu.cn/wiki/xxx
.\xdoc export feishu -quit-automatically --app-id cli_xxxxx --app-secret xxxxxxx --dir E:\tmp\xxxx --urls https://xxx.feishu.cn/wiki/xxx
.\xdoc export feishu -q --app-id=cli_xxxxx --app-secret=xxxxxxx --dir=E:\tmp\xxxx --urls=https://xxx.feishu.cn/wiki/xxx

# 只列出待下载的文档树,不进行下载
.\xdoc export feishu -l --app-id cli_xxxxx --app-secret xxxxxxx --dir E:\tmp\xxxx --urls https://xxx.feishu.cn/wiki/xxx
.\xdoc export feishu --list-only --app-id cli_xxxxx --app-secret xxxxxxx --dir E:\tmp\xxxx --urls https://xxx.feishu.cn/wiki/xxx

# 下载完成后不自动退出
.\xdoc export feishu --app-id cli_xxxxx --app-secret xxxxxxx --dir E:\tmp\xxxx --urls https://xxx.feishu.cn/wiki/xxx
.\xdoc export feishu -q=false --app-id cli_xxxxx --app-secret xxxxxxx --dir E:\tmp\xxxx --urls https://xxx.feishu.cn/wiki/xxx

2.5、导出效果演示

注意:

如图中所示,因为程序按用户的传参执行导出下载,可能会创建多层目录和同时下载多个文件

如果杀毒软误报,请允许操作即可

PixPin_2025-03-27_02-04-50

执行过程长截图:

image-20250327020738655

报错处理:

image-20250327153758125

3、功能说明

  • 支持生成程序需要的配置文件,便捷使用
  • 支持通过浏览器直接复制url下载文档及其子文档
    • 通过url自动判断是云文档还是知识库的文档
  • 支持指定导出文件的类型
  • 支持指定本地目录用于保存导出文件,自动创建目录
    • 云文档有目录,知识库没有(它的目录也是一个文档)
    • 导出云文档时,自动创建实际读取到的目录
      • 将不合法的目录字符串替换为下划线,如/替换为_
    • 导出知识库时,按文档层级自动创建目录,目录名为非叶子节点文档的标题
      • 自动创建的目录与源文档保存在同一级
      • 将不合法的目录字符串替换为下划线,如/替换为_
  • 读取知识库文档树时,如果超时(目前为60秒),则执行失败
    • 有些企业的知识库下的文档数量庞大,递归整棵树的用时会非常久
    • 请自行缩小范围,比如取知识库中某个节点的URL重新执行
  • 碰到不支持导出的文档,会在打印的文档树中展示出来
  • 导出过程会产生一个名为document-tree.json的文件,这是程序保留文件,以后的功能应该会用到,请不要使用它,可以删除

4、如何创建飞书应用和授权?

4.1、创建飞书应用

进入 飞书开发者后台 https://open.feishu.cn/app , 按如下步骤进行操作

image-20250326235427032

image-20250326235607066

image-20250326235827412

image-20250326235952612

image-20250327000142778

4.2、应用授权访问API

飞书的权限有应用对API的访问权限,还有应用对文档的访问权限

如图所示,两种权限中的任何一种未得到授权,则无法下载对应的文档

flowchart TD
飞书应用 --> API1已授权
飞书应用 --> API2已授权
API1已授权 & API2已授权 --> 文档1已授权
API1已授权 & API2已授权 --> 文档2已授权
subgraph  
    API1已授权
    API2已授权
    API3未授权
end
subgraph  
    文档1已授权
    文档2已授权
    文档3未授权
    文档4未授权
end
Loading

这里先讲授权API

程序使用的API涉及以下几个权限,请在权限管理中申请,待发布生效

现在飞书应用权限分为应用身份权限和用户身份权限,一般使用应用身份权限即可

权限名称 权限代码 对应API
查看云空间中文件元数据 drive:drive.metadata:readonly 获取文件元数据
查看、评论和下载云空间中所有文件 drive:drive:readonly 获取文件夹中的文件清单、下载文件
查看知识库 wiki:wiki:readonly 获取知识空间信息、获取知识空间节点信息、获取知识空间子节点列表
导出云文档 drive:export:readonly 创建导出任务、查询导出任务结果、下载导出文件
- - 其他权限todo,待我校验后回来补上

可以用以下JSON批量导入权限、或者也可以自行按上面列表一个一个地搜索添加

{
  "scopes": {
    "tenant": [
      "drive:drive.metadata:readonly",
      "drive:drive:readonly",
      "drive:export:readonly",
      "wiki:wiki:readonly"
    ],
    "user": []
  }
}

image-20250327005316875

image-20250327005358082

image-20250327005419942

导入成功,等创建应用版本进行发布上线

image-20250327005454001

4.3、创建版本发布上线

image-20250327002352713

image-20250327010213361

image-20250327011424005

image-20250327010323873

下面是企业管理员的操作,如果你不是管理员,嗯,那就催单吧

image-20250327011329263

image-20250327010714649

image-20250327010956145

4.4、将机器人添加到群中

注意:机器人所在的应用必须创建过版本并且申请上线(如果需要审批还需要审批通过)后才可以使用

image-20250327000606182

image-20250327000855589

image-20250327011129963

image-20250327011147582

image-20250327011221139

4.5、应用授权访问文档

飞书的权限有应用对API的访问权限,还有应用对文档的访问权限,这里是讲授权文档

因为应用需要一个机器人做为文档访问的角色,所以前面的操作都是为了应用授权访问文档做的准备工作

image-20250327012227747

image-20250327012256040

image-20250327012603183

5、如何获取下载URL

直接从浏览器的地址栏上复制即可

可以是云空间的目录、文档地址,也可以是知识库的文档地址

image-20250327012927709

6、想自己打包构建?

自行按项目要求安装相应的go版本

然后将代码克隆到本地,使用项目中的builder.sh脚本进行构建

因为是shell脚本,windows下可使用gitbash执行

# 初始化
./builder.sh init

# 跑一下单测流程,假设有PR,要求单测覆盖率达到90%
./builder.sh test

# 构建
./builder.sh build

7、后续开发计划?

先做功能,再美化,UI这一块我再努力搞搞,后面一点点地修之

开发的初期,是设想着能照顾到飞书、jira等云文档的导出、下载、导入、上传的

但是光搞飞书的就挺费时费神的,而且还是基于飞书的文档非常全面好用的情况下

( 好吧,每天早上起床灰常困难,精力当然没以前旺盛了 )

其他云文档的功能随缘添加吧,大家可以关注一下,我应该不会这么快就归档这个项目

About

飞书文档导出器(又不仅是导出器?)

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published