当前位置: 首页 > news >正文

飞书知识库备份

目录

1、创建应用,添加机器人能力,添加应用为知识库管理员。方法如图:

2、获取到知识空间ID。

3、Java代码(递归调用)


1、创建应用,添加机器人能力,添加应用为知识库管理员。方法如图:

2、获取到知识空间ID。

3、Java代码(递归调用)

package xyz.jangle.feishu.test; import java.io.File; import java.nio.charset.StandardCharsets; import java.util.concurrent.TimeUnit; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.gson.JsonParser; import com.lark.oapi.Client; import com.lark.oapi.core.utils.Jsons; import com.lark.oapi.service.drive.v1.model.DownloadFileReq; import com.lark.oapi.service.drive.v1.model.DownloadFileResp; import com.lark.oapi.service.wiki.v2.model.ListSpaceNodeReq; import com.lark.oapi.service.wiki.v2.model.ListSpaceNodeResp; /** * 知识空间(知识库)备份 * @author jangle * @email 274676957@qq.com * 2025年12月17日 上午10:38:34 */ public class FeishuZSKMain { Client client; public FeishuZSKMain() { super(); client = Client.newBuilder("App ID", "App Secret").build(); } /** * 1.遍历知识库 * 2025年12月17日 上午11:03:47 @author jangle * @param spaceId 知识空间ID * @param parentNodeToken 上级token * @param path 文件路径 * @throws Exception */ public void getListSpaceNode(String spaceId,String parentNodeToken,String path,String pageToken) throws Exception { // 创建请求对象 ListSpaceNodeReq req = ListSpaceNodeReq.newBuilder() .spaceId(spaceId) .pageSize(50) .pageToken(pageToken) .parentNodeToken(parentNodeToken) .build(); // 发起请求 ListSpaceNodeResp resp = client.wiki().v2().spaceNode().list(req); // 处理服务端错误 if (!resp.success()) { System.out.println(String.format("code:%s,msg:%s,reqId:%s, resp:%s", resp.getCode(), resp.getMsg(), resp.getRequestId(), Jsons.createGSON(true, false).toJson(JsonParser.parseString(new String(resp.getRawResponse().getBody(), StandardCharsets.UTF_8))))); return; } // 业务数据处理 // System.out.println(Jsons.DEFAULT.toJson(resp.getData())); String json = Jsons.DEFAULT.toJson(resp.getData()); JSONObject data = JSONObject.parseObject(json); JSONArray items = data.getJSONArray("items"); for (int i = 0; i < items.size(); i++) { JSONObject item = items.getJSONObject(i); if(item.getBoolean("has_child")) { // 有子集,则向下遍历 // System.out.println("has_child:"+item.getBoolean("has_child")); // System.out.println("obj_token:"+item.getString("obj_token")); // System.out.println("title:"+item.getString("title")); // System.out.println("node_token:"+item.getString("node_token")); getListSpaceNode(spaceId, item.getString("node_token"), path+"/"+item.getString("title"),""); }else { try { // Files.createDirectories(Paths.get(path));// 创建目录 File dir = new File(path); if(!dir.exists()) { System.out.println("创建目录:"+path); dir.mkdirs(); } // System.out.println(path+"/"+item.getString("title")); String title = item.getString("title"); File file = new File(path+"/"+title); // if(title.contains(".") && !Files.exists(Paths.get(path,title))) { // if("file".equals(item.getString("obj_type")) && !Files.exists(Paths.get(path,title))) { if("file".equals(item.getString("obj_type")) && !file.exists()) { System.out.println("下载:"+title); downloadFile(item.getString("obj_token"), path+"/"+title); // 下载 } } catch (Exception e) { e.printStackTrace(); } } } if(data.getBoolean("has_more")) { getListSpaceNode(spaceId, parentNodeToken, path, data.getString("page_token")); } } /** * 2.下载文件 * 2025年12月17日 上午11:14:01 @author jangle * @param objToken 文件token * @param filepath 文件下载路径 */ private void downloadFile(String objToken,String filepath) { for(int i=0;i<3;i++) { try { // 创建请求对象 DownloadFileReq req = DownloadFileReq.newBuilder() .fileToken(objToken) .build(); // 发起请求 DownloadFileResp resp = client.drive().v1().file().download(req); // 处理服务端错误 if (!resp.success()) { System.out.println(String.format("code:%s,msg:%s,reqId:%s, resp:%s", resp.getCode(), resp.getMsg(), resp.getRequestId(), Jsons.createGSON(true, false).toJson(JsonParser.parseString(new String(resp.getRawResponse().getBody(), StandardCharsets.UTF_8))))); return; } // 业务数据处理 resp.writeFile(filepath); return; } catch(Exception e) { e.printStackTrace(); try { TimeUnit.SECONDS.sleep(1 * (i + 1)); } catch (InterruptedException ie) { ie.printStackTrace(); Thread.currentThread().interrupt(); return; } } } } /** * 0.主程序入口 * 2025年12月17日 上午10:38:34 @author jangle * @param args */ public static void main(String[] args) { FeishuZSKMain main = new FeishuZSKMain(); try { main.getListSpaceNode("732***********14146", "", "D:/filepath",""); } catch (Exception e) { e.printStackTrace(); } } }
http://www.cnnetsun.cn/news/136277.html

相关文章:

  • BookmarkHub:告别浏览器书签混乱的智能同步神器
  • 51、保障系统安全:从漏洞扫描到灾难恢复的全面指南
  • DearPyGUI:为什么这款Python GUI框架正在重新定义界面开发?
  • Matlab模拟OAM螺旋谱展开,包括光束本征态、各类湍流、衍射、干涉下的OAM谱分布
  • 【核工业Agent故障处理全攻略】:揭秘高危场景下的7大应急响应策略
  • AI视频字幕生成工具:5步配置与实战应用全攻略
  • 如何快速上手SM3-PHP:5分钟掌握PHP国密加密的完整指南
  • 重构智慧书-第19条:事情刚开始时,不要让人抱过高期望。
  • 塔防无敌塔防小游戏Linux部署演示
  • leetcode 3652(定长滑动窗口/前缀和)
  • Vim插件管理器VAM:零基础小白也能轻松驾驭的终极神器
  • 30、Linux迁移案例:企业与政府的开源实践
  • 模块化多电平换流器(MMC)仿真分析:双闭环控制与最近电平逼近调制
  • Nacos3.1.1部署(Docker)
  • 【稀缺资料】20年经验专家解密:云边 Agent 延迟优化的3层架构设计
  • 跨领域Agent协同架构设计,5个真实工业场景中的落地实践案例
  • 半导体设备通信开发实战:基于secsgem的工业自动化解决方案
  • 【Java毕设全套源码+文档】基于springboot的钢材销售管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 26、Unix系统管理与实用技巧
  • [HZNUCTF 2023 preliminary]ppppop
  • 2025年国内主流的德国SAP系统官方授权实施代理商有哪些?
  • 服务器性能优化实战:从资源瓶颈定位到极致调优(附租赁服务器适配指南)
  • 三相异步电动机交流调速系统:原理、应用与优化控制策略
  • 3、数据科学命令行入门指南
  • Wireshark抓包模式选择:5个关键场景与实战技巧
  • 10、数据探索与可视化全攻略
  • 小学生学C++编程 (自定义函数(二))
  • GPT-5.2国内稳定接入实战:中转调用方案全解析(适配中小团队Python栈)
  • macOS存储空间告急?iSCSI Initiator终极解决方案助你突破存储瓶颈
  • 5分钟快速掌握:用node-qrcode打造专业级二维码