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

飞书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

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

相关文章:

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

本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹,一般是放在共享空间,如果要放在个人空间,建议手动创建。 查看 API 文档 API 路径,可在飞书开放平台的服务端 API,依次查找云文档>云空间>文件…...

【APP移动端自动化测试】第一节.环境配置和adb调试工具

文章目录 前言一、Java环境搭建二、AndroidSDK环境搭建三、Android模拟器安装四、adb调试工具基本介绍 4.1 adb构成和基本原理 4.2 adb获取包名,界面名 4.3 adb文件传输 4.4 adb获取app启动时间 4.5 adb获取手机日志 4.6 adb其他有关…...

Kotlin 协程:从基础概念到开发实践

前言 上一篇文章 深入理解Android多线程开发:场景应用与解决方案解析 针对Android开发中的多线程应用场景和相应的解决方案做了一个梳理。 总结出了Android开发中多线程编程的几个重要点: 资源复用和优化切线程任务编排并结合示例说明了Kotlin协程在处理上述问题时的优势。 …...

IPNV6

特征——升级点: 1、全球单播地址 ----IPV4地址下的公有地址 V6下没 nat 2、可聚合性 (IANA组织对全球的地址进行合理分配) 3、多宿主——一个物理接口可以同时拥有多个不同网段的IPV6地址;但不同接口不能在同一网段 4、自动配置 1&#xff…...

C++并发之锁(std::lock_guard,std::unique_lock)

目录 1 概述2 使用实例3 接口使用3.1 lock_guard3.2 adopt_lock3.3 defer_lock3.4 try_to_lock3.5 try_lock3.6 release3.7 lock3.8 call_one1 概述 锁保护是通过使互斥对象始终处于锁定状态来管理互斥对象的对象。。   在构造时,互斥对象被调用线程锁定,在析构时,互斥被解…...

FreeRTOS队列(queue)

队列(queue)可以用于"任务到任务"、 "任务到中断"、 "中断到任务"直接传输信息。 1、队列的特性 1、1常规操作 队列的简化操如下图所示,从此图可知: 队列中可以包含若干数据:队列中有若干项,这…...

Azure数据分析Power BI

Azure数据分析Power BI 一、Power BI简介二、Power BI 如何匹配角色三、Power BI 构建基块四、使用 Power BI 服务一、Power BI简介 Microsoft Power BI 是一系列的软件服务、应用和连接器,这些软件服务、应用和连接器协同工作,将不相关的数据源转化为合乎逻辑、视觉上逼真的…...

将 Python3 程序打包成 APK 并运行在 ARM 的 Android 系统中

作为一个开发者,我们经常需要将我们的 Python 程序部署到移动端,以便更好地服务于用户。然而,直接在 Android 系统上运行 Python 程序却存在一定的挑战,因为 Android 系统默认不支持 Python。这篇文章将介绍如何将 Python3 程序打…...

学习记录:VS2019+OpenCV3.4.1实现SURF库函数的调用

最近在学习opencv的使用,在参照书籍《OpenCV3编程入门》实现SURF时遇到不少问题,下面做归纳总结。 错误 LNK2019 无法解析的外部符号 “public: static struct cv::Ptr __cdecl cv::xfeatures2d::SURF::create(double,int,int,bool,bool)” (?createSUR…...

JVM-基础知识

JVM-基础知识 什么是JVM JVM是一种跨语言的平台,任何语言只要能编译成.class文件都可以被JVM运行。JVM只和.class文件有关系,和Java语言没关系。JVM是一种虚拟机规范。 java文件是如何交给JVM执行的 JVM的常见实现 HostStop:Oracle官方另外还有IBM的J9、…...

保密工作应党而生、伴党而行、为党而兴

1.(C )工作应党而生、伴党而行、为党而兴,始终是党和国家的一项重要工作。 A. 农业 B. 国防 C. 保密 D. 文化 2.机关、单位对所产生的国家秘密事项,应当按照国家秘密及其密级的具体范围的规定确定密级,同时确定&#x…...

docker login 报错: http: server gave HTTP response to HTTPS client

环境: 自建 Harbor、Docker 1. 问题分析 # 命令,这里用的是 IP,可以为域名 docker login -u test 172.16.51.182:31120 # 输入密码 Password:# 报错如下: Error response from daemon: Get "https://172.16.51.182:31120/…...

「C系列」C 文件读写

文章目录 一、C 文件读写1. 打开文件2. 写入文件3. 读取文件4. 关闭文件5. 文件读写模式6. 错误处理 二、常见问题1. 文件打开失败2. 文件读写错误3. 文件读写位置4. 缓冲区刷新 三、相关链接 一、C 文件读写 在C语言中,文件读写是通过一系列的标准库函数来完成的&…...

编程中的cos:深度解析与应用探索

编程中的cos:深度解析与应用探索 在编程的广阔天地中,cos这一数学概念扮演着举足轻重的角色。它不仅是数学函数库中的基础元素,更是图形渲染、科学计算以及数据处理等多个领域的核心工具。本文将从四个方面、五个方面、六个方面和七个方面&a…...

计算机毕业设计hadoop+spark+hive知识图谱酒店推荐系统 酒店数据分析可视化大屏 酒店爬虫 高德地图API 酒店预测系统 大数据毕业设计

流程: 1.Python爬取去哪儿网全站旅游数据约10万,存入mysql; 2.使用pandasnumpy/hadoopmapreduce对mysql中旅游数据进行数据清洗,使用高德API计算地理信息,最终转为.csv文件上传hdfs; 3.hive建库建表导入.csv文件作为数据集&#x…...

简单谈谈云服务器私网IP的存在意义及优势

云服务器是基于虚拟化技术的计算资源,可以在云平台上灵活创建和管理。为了满足不同用户的需求,云服务提供商在云服务器上分配了两种类型的IP地址:公网IP和私网IP。其中,私网IP是指在局域网内使用的内部IP地址,无法通过…...

python错题(2)

、...

禁止methtype联网

mathtype断网_如何禁止mathtype联网-CSDN博客https://blog.csdn.net/qq_41060221/article/details/128144783...

【iOS】UI学习——cell的复用及自定义cell

目录 前言cell的复用手动(非注册)自动(注册) 自定义cell总结 前言 Cell复用和自定义Cell是在开发iOS应用时常见的一种优化技巧和定制需求。   Cell复用是UITableView或UICollectionView的一个重要优化机制。当用户滚动这些视图时…...

【详细介绍下PostgreSQL】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

RLHF vs RLVR:对齐学习中的两种强化方式详解

在语言模型对齐(alignment)中,强化学习(RL)是一种重要的策略。而其中两种典型形式——RLHF(Reinforcement Learning with Human Feedback) 与 RLVR(Reinforcement Learning with Ver…...

Python异步编程:深入理解协程的原理与实践指南

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…...

生信服务器 | 做生信为什么推荐使用Linux服务器?

原文链接&#xff1a;生信服务器 | 做生信为什么推荐使用Linux服务器&#xff1f; 一、 做生信为什么推荐使用服务器&#xff1f; 大家好&#xff0c;我是小杜。在做生信分析的同学&#xff0c;或是将接触学习生信分析的同学&#xff0c;<font style"color:rgb(53, 1…...

React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)

React React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#xff0c;详细解释 用户: React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#x…...

Unity-ECS详解

今天我们来了解Unity最先进的技术——ECS架构&#xff08;EntityComponentSystem&#xff09;。 Unity官方下有源码&#xff0c;我们下载源码后来学习。 ECS 与OOP&#xff08;Object-Oriented Programming&#xff09;对应&#xff0c;ECS是一种完全不同的编程范式与数据架构…...

qt 双缓冲案例对比

双缓冲 1.双缓冲原理 单缓冲&#xff1a;在paintEvent中直接绘制到屏幕&#xff0c;绘制过程被用户看到 双缓冲&#xff1a;先在redrawBuffer绘制到缓冲区&#xff0c;然后一次性显示完整结果 代码结构 单缓冲&#xff1a;所有绘制逻辑在paintEvent中 双缓冲&#xff1a;绘制…...