飞书API 2-1:如何通过 API 创建文件夹?

本文探讨如何通过飞书的 API 来创建文件夹。
通过 API 创建的文件夹,一般是放在共享空间,如果要放在个人空间,建议手动创建。

查看 API 文档

API 路径,可在飞书开放平台的服务端 API,依次查找云文档>云空间>文件夹>新建文件夹,或者直接点击新建文件夹API。
使用该 API 需要申请新的权限:创建云空间文件夹
image.png

申请权限

到应用中心找到对应的应用,我的应用叫:飞书多维表数据传输,点击进入应用后台,进行权限申请。
image.png

在权限管理>API权限>搜索:文件夹>找到“创建云空间文件夹”,点击“开通权限”。
Tips:我开通不需要审核,所以开通即发布。不用审批的权限,其实可以不用到应用后台申请,可以直接在接口文档的右侧 API 调试窗口或者在 API 调试台直接勾选权限,然后点击批量开通。而在企业中,一般是需要审核的。如果需要审核,则就需要到应用后台操作:勾选申请开通的权限,然后创建一个新的版本发布,等待审核。
image.png

创建文件夹

有权限之后,发起调试便可成功创建文件夹。
image.png

响应体信息:

{"code": 0,"data": {"token": "PFGpfPdFclWaEAdVUXFciHqKnxf","url": "https://xxx.feishu.cn/drive/folder/PFGpfPdFclWaEAdVUXFciHqKnxf"},"msg": "success"
}

发起请求代码参考如下:

import requests
import jsonurl = "https://open.feishu.cn/open-apis/drive/v1/files/create_folder"
payload = json.dumps({"folder_token": "","name": "测试项目"
})headers = {'Content-Type': 'application/json','Authorization': 'Bearer 【your_access_token】'
}response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

文件夹创建好了,但是刷新我的云文档空间,看不到新建的文件夹???
通过响应体返回的链接进去看看,竟然还得申请权限!!文件夹归属应用所有,作为空间所有者,还需要向应用申请权限才能够查看?
image.png

应用不是一个实体的号,申请完谁来审批?试试看。
没有意外,在飞书客户端没有任何提醒,在应用后台也没有任何提醒。

添加协作者

直接申请权限时走不通,那应该会有添加协作者的 API。
在云文档的权限的常见问题中,找到了答案,可以通过调用增加协作者权限给个人 email 用户授予文档的访问权限。
image.png

不过这个是文档,文件夹呢?先看看增加协作者权限文档,发现这是一个大而全的接口,包含了文档、电子表格、云空间文件、知识库节点、多维表格、新版文档、文件夹、思维笔记、妙记、幻灯片等节点的权限开通。
使用该接口给自己的账号开权限,配置参考如下:
image.png

发起调试,执行成功。
image.png

刷新我的空间,发现在共享空间多了一个测试项目,没错就是刚刚应用创建的。
image.png

请求代码示例如下:

import requests
import jsonurl = "https://open.feishu.cn/open-apis/drive/v1/permissions/PFGpfPdFclWaEAdVUXFciHqKnxf/members?need_notification=true&type=folder"
payload = json.dumps({"member_id": "your_openid","member_type": "openid","perm": "full_access","type": "user"
})headers = {'Content-Type': 'application/json','Authorization': 'Bearer 【your_access_token】'
}response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

如何获取openid?

找到“通过手机号或邮箱获取用户 ID”的 API,user_id_type 选择 openid,在“选择成员”界面勾选对应的用户可以复制成员 ID。
image.png

如果要通过调接口获取,需要申请对应的权限:通过手机号或邮箱获取用户 ID。
image.png

如果是创建之后直接给开发者开通管理权限,可以固定使用指定的开发人员的唯一标识(可以是openid、union_id、user_id),如果是需要传递一个名单进行开通,则需要调用该接口获取用户的唯一标识进行开通协作权限。

发起请求示例代码如下:

import requests
import jsonurl = "https://open.feishu.cn/open-apis/contact/v3/users/batch_get_id?user_id_type=open_id"
payload = json.dumps({"include_resigned": false,"mobiles": ["your_mobile"]
})headers = {'Content-Type': 'application/json','Authorization': 'Bearer 【your_access_token】'
}response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

流程总结

创建文件夹之后需要增加协作者,增加协作者需要协作者的唯一标识,所以需要通过手机号或邮箱获取用户的唯一标识,最终的结构如下:

将三个 API 的请求代码封装成一个函数,传递关键参数,然后返回需要值。

import requests
import jsondef cre_folder(access_token,folder_name,folder_token=''):url = "https://open.feishu.cn/open-apis/drive/v1/files/create_folder"payload = json.dumps({"folder_token": folder_token,"name": folder_name})headers = {'Content-Type': 'application/json','Authorization': f'Bearer {access_token}'}response = requests.request("POST", url, headers=headers, data=payload)code = response.json()['code']if code == 0:token = response.json().get("data").get("token")print(f"成功新建文件夹!文件夹 token 为:{token}。关联函数:cre_folder。")return tokenelse:msg = response.json().get("msg")raise f"创建文件夹失败,失败信息:{msg}。关联函数:cre_folder。"def get_userid(access_token,mobile):"""mobile 可以是单个手机号,或者一个手机号的列表,手机号必须是字符串,不带区号。"""url = "https://open.feishu.cn/open-apis/contact/v3/users/batch_get_id?user_id_type=open_id"if isinstance(mobile, str):mobile = [mobile]payload = json.dumps({"include_resigned": False,"mobiles": mobile})headers = {'Content-Type': 'application/json','Authorization': f'Bearer {access_token}'}response = requests.request("POST", url, headers=headers, data=payload)code = response.json()['code']if code == 0:userid = response.json().get("data").get("user_list")print(f"成功通过手机号获取用户的唯一标识:{userid}。关联函数:get_userid。")return useridelse:msg = response.json().get("msg")raise f"创建文件夹失败,失败信息:{msg}。关联函数:get_userid。"def add_folder_permission(access_token,folder_token,userid,permission_type='full_access'):"""permission_type:view(阅读)、edit(编辑)、full_access(管理)"""url = f"https://open.feishu.cn/open-apis/drive/v1/permissions/{folder_token}/members?need_notification=true&type=folder"payload = json.dumps({"member_id": userid,"member_type": "openid","perm": "full_access","type": "user"})headers = {'Content-Type': 'application/json','Authorization': f'Bearer {access_token}'}response = requests.request("POST", url, headers=headers, data=payload)code = response.json()['code']if code == 0:print(f"成功为 {userid} 开通权限。关联函数:add_folder_permission。")else:msg = response.json().get("msg")raise f"创建文件夹失败,失败信息:{msg}。关联函数:add_folder_permission。"def get_tenant_access_token(app_id, app_secret):url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"payload = json.dumps({"app_id": app_id,"app_secret": app_secret})headers = {'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)tenant_access_token = response.json()['tenant_access_token']print(f'成功获取tenant_access_token:{tenant_access_token}。关联函数:get_table_params。')return tenant_access_tokendef main():app_id = 'your_app_id'app_secret = 'your_app_secret'access_token = get_tenant_access_token(app_id, app_secret)folder_token = ''folder_name = '一个测试项目'new_folder_token = cre_folder(access_token,folder_name,folder_token)mobile = '157xxxxxxxx'user_infos = get_userid(access_token,mobile)for user_info in user_infos:userid = user_info['user_id']print(f"为用户:{user_info['mobile']}{userid})开权限。")add_folder_permission(access_token,new_folder_token,userid,permission_type='full_access')if __name__ == '__main__':main()

小结

本文探讨了如何通过 API 创建文件夹并且给指定的用户开通协作权限。
具体操作如下:

  • 申请权限:创建云空间文件夹、通过手机号或邮箱获取用户 ID
  • 调用获取 access_token 的 API
  • 调用创建文件夹的 API
  • 调用获取用户 ID 的 API
  • 调用添加协作者的 API

思路相对比较简单,但实际操作比较繁琐。

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

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

相关文章

Iptables深入浅出

1、iptables的基本概念 众所周知iptables是Linux系统下自带免费的包过滤防火墙。其实不然,iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”…

C++中全局变量、函数与静态变量、函数的区别

1、全局变量、局部变量、静态全局变量、静态局部变量的区别 (1)从作用域看: 1)全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用 extern 关键字再次声明这个全局变量。 2)…

05-5.3.1_1 二叉树的先中后序遍历

👋 Hi, I’m Beast Cheng👀 I’m interested in photography, hiking, landscape…🌱 I’m currently learning python, javascript, kotlin…📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

大家来决定:python-office运行时的提示信息,要不要删除?

​ 大家好,这里是程序员晚枫,今天想请大家投票决定一下:运行python-office时的下面这种中文提示信息,要不要全部都取消了?👇 为什么加这个提示? 我是在2022年发布的这个开源项目,并…

算法排序之冒泡排序及优化

public class Bubbling {public static void main(String[] args) {// 定义需要排序的数组int[] arr {0,1,21,2,31,12,5,8};// 冒泡排序方法bubbleSort(arr);bubbleOptSort(arr);}/*** 冒泡排序* param arr 数组*/public static void bubbleSort(int[] arr){// i0,…

cmake aux_source_directory详解

在 CMake 中,aux_source_directory 命令用于将指定目录中的源文件列表添加到一个变量中。这对于需要自动发现目录中所有源文件的情况非常有用,特别是在构建测试或动态加载模块时。 基本语法 aux_source_directory(dir variable)dir:源文件所…

Lua 只读表

Lua 的 table 建立只读机制,保护 table 不能被随意修改。 建立只读机制 Lua 的 table 通常情况下是可以随意修改字段的值,或者新增字段。 如果想要建立只读机制,保护表只能读取,而不能被随意修改,可以利用元表。 禁…

Python编程环境搭建

简介: Python环境安装比较简单,无需安装其它依赖环境,主要步骤为: 1. 下载并安装Python对应版本解释器 2. 下载并安装一个ide编码工具 一、下载并安装Python解释器 1.1 下载 官网地址:Welcome to Python.org 选择…

一次数据库连接泄漏导致的响应迟缓

数据库连接池泄漏其实非常普遍,本文简单记一次数据库连接池泄漏问题,排查和思考。 问题与分析 问题:服务器上的负载激增, Postgres 查询的时间和CPU消耗都异常飙升。 分析:经过调试,得出以下分析&#x…

Java云HIS医院管理系统源码 B/S架构 一体化电子病历系统源码 基于云端SaaS平台源码,采用B/S(Browser/Server)架构

“云”指系统采用云计算的技术和建设模式,具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生,由原来医院 (Hospital)到现在的医疗卫生 (Healthcare),拓展了 H的内涵与外延。云 HIS 重新定义了医院信息系统…

[Python学习篇] Python条件语句

if 语法: if 条件: 条件成立执行的代码1 条件成立执行的代码2 ...... 示例: if False:print("条件成立我执…

【笔记】为什么不同硬件的1T实际硬盘容量硬盘是954GB或者931GB?

问题描述 不管是电脑还是移动硬盘,厂家描述的1T硬盘容量都不是计算机知识领域内真正的1T大小,硬盘容量实际是小于1TB的。 另外还发现对于1TB的不同厂家设备有着实际不同的磁盘容量,比如为什么有的1T电脑硬盘是954GB,而移动硬盘是…

9、Spring之Bean生命周期~依赖注入(总)

9、Spring之Bean生命周期~依赖注入(总) 依赖注入spring有几种依赖注入方式源码解析 依赖注入 spring有几种依赖注入方式 从类型角度区分,分两种:手动和自动 手动注入:通过XML中定义Bean时,可手动注入 &l…

用Python分析《三国演义》中的人物关系网

用Python分析《三国演义》中的人物关系网 三国演义获取文本文本预处理分词与词频统计引入停用词后进行词频统计构建人物关系网完整代码 三国演义 《三国演义》是中国古代四大名著之一,它以东汉末年到晋朝统一之间的历史为背景,讲述了魏、蜀、吴三国之间…

git 删除已经不存在于远程仓库中的本地分支

git 删除远程仓库中已经不存在的本地远程分支跟踪副本 git fetch --prune 是一个Git命令,它用于从远程仓库获取并更新所有分支的引用,同时删除那些已经不存在于远程仓库中的本地分支。请注意,这个命令不会直接删除你正在工作的本地分支&…

流行跨链桥总结

本贴主要总结出现的新跨链桥,简介,及其项目主页,持续更新 1.Cbridge cBridge引入了一流的跨链Token桥接体验,为用户提供了深度流动性,为不想运营cBridge节点的cBridge节点运营商和流动性提供商提供了高效且易于使用的…

zabbix自定义监控mysql状态和延迟

zabbix自定义监控mysql状态和延迟 文章目录 zabbix自定义监控mysql状态和延迟zabbix自定义监控mysql状态配置主从配置自定义监控添加监控项添加触发器模拟测试异常 zabbix自定义监控mysql延迟配置自定义监控添加监控项添加触发器测试 zabbix自定义监控mysql状态 配置主从 1.安…

Java 面试题:Java 中接口和抽象类有什么区别

在 Java 编程中,接口(Interface)和抽象类(Abstract Class)是面向对象编程的重要组成部分。它们都提供了一种机制,允许开发者定义抽象的、可以在具体类中实现的行为。然而,接口和抽象类在结构和用…

FreeRTOS简单内核实现5 阻塞延时

文章目录 0、思考与回答0.1、思考一0.2、思考二0.3、思考三 1、创建空闲任务2、实现阻塞延时3、修改任务调度策略4、提供延时时基4.1、SysTick4.2、xPortSysTickHandler( )4.3、xTaskIncrementTick( ) 5、实验5.1、测试5.2、待改进 0、思考与回答 0.1、思考一 为什么 FreeRTO…

C++移动语义

C语言如何实现类似C移动语义 在 C 语言中,没有直接支持移动语义的语法或特性,因为 C 语言相对于 C 来说更为底层,缺乏像 C 那样的语言特性和标准库。然而,你可以通过手动管理内存来实现类似移动语义的效果。 移动语义的主要目的…