飞书API 2-2:如何使用 API 建多维表

本文探讨如何通过飞书的 API 来创建多维表。

通过 API 创建的多维表,会把文件夹放到共享空间,如果不想将文件夹放到共享空间,建议手动创建。

查看创建多维表的 API

API 路径,可在飞书开放平台的服务端 API,依次查找云文档>多维表格>多维表格>创建多维表格,或者直接点击:创建多维表API

如果是在根目录,即我的空间创建多维表,传递多维表的参数名即可;如果是要在指定的文件下创建多维表,则需要多传递一个文件夹的 token 参数,示例如下:

json 复制代码
{
  "name":"一篇新的多维表格",
  "folder_token": "fldbco*****CIMltVc"
}

如何获取文件夹的 token?参考下图:

Tips:如果是使用上一篇通过 API 创建的文件夹,则可直接使用上一篇创建完文件夹返回的 token 传递给 folder_token 参数。

这里我已经创建好了,直接使用即可。

API 调试

飞书 API 调试台测试新建多维表。

我的文件夹 token 为:AYYvfPya0l60fPd9CvTcFEuFnbc,填入参数,名字就叫做飞书数据类型测试表。

调试结果是报错了,查看说明,没有云空间节点的权限。

在对应的文件查看是否有类似文档授权的方式,给应用授权,结果没找到。

查看关于云文档的权限的常见问题,找到了一个答案:需要应用启用机器人能力,然后在飞书客户端创建群组,将应用添加为群机器人。再在我的空间中找到对应的文件夹,将文件夹分享给刚刚新建的群组。
需要应用启用机器人能力。打开飞书软件,创建新的群组,将应用添加为群机器人。在飞书云文档,我的空间中找到对应的文件夹,将文件夹分享给刚刚新建的群组。

换句话说,文件夹给应用授权需要通过分享给群组,然后在群组里添加应用的机器人,怎么添加呢,需要先在应用后台开启应用的机器人能力。

具体操作见下文。

应用开启机器人能力

应用中心找到对应的应用,我的应用叫:飞书多维表数据传输,点击进入应用后台。

点击应用能力模块的添加应用能力>按能力添加>点击机器人下面的添加按钮。

添加好机器人之后会新增一个机器人的配置项,如下图标识1。机器人创建好之后,需要新建版本提交申请,如下图标识2,填写版本号、更新说明和申请理由便可提交申请。(注:下图是版本发布成功后的界面)。

创建群组并添加应用机器人

申请通过之后,便可以在群组中添加应用机器人。

先创建一个群组,打开飞书的客户端,如下图,点击创建群组。

在弹窗中配置群名称、群头像、群成员等,点击创建即可,支持创建一人群组,也就是说输入一个群名称,直接点击创建。

创建好群组后,点击群名>点击群机器人>

添加机器人

在弹窗中便可以看到应用的机器人,如果应用没有添加机器人能力,是不会在这里出现的。

直接点击添加即可。

添加完成后在聊天窗口会有一个邀请的提示,表示添加成功。

文件夹分享给群组

打开云文档空间对应的文件夹,右侧点击分享,然后将刚刚添加了应用机器人的群组添加管理权限。

成功新建多维表

配置好权限之后,在 API 调试台,再次发起创建多维表的请求,终于成功了!

请求示例代码

python 复制代码
import requests
import json

url = "https://open.feishu.cn/open-apis/bitable/v1/apps"
payload = json.dumps({
    "folder_token": "AYYvfPya0l60fPd9CvTcFEuFnbc",
    "name": "飞书数据类型测试表"
})


headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer t-g1046ff3NIZY52OTZQTQR4CBENWQLRV5KLDSZI22'
}

response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

从响应体看,该多维表会创建一个默认的数据表。

json 复制代码
{
  "code": 0,
  "data": {
    "app": {
      "app_token": "EPYFbi4ThahvLUsJ9nUchaXQnLh",
      "default_table_id": "tblu1SpDkQ4qmh7F",
      "folder_token": "AYYvfPya0l60fPd9CvTcFEuFnbc",
      "name": "飞书数据类型测试表",
      "url": "https://xxx.feishu.cn/base/EPYFbi4ThahvLUsJ9nUchaXQnLh"
    }
  },
  "msg": "success"
}

查看文件夹,新增了一个叫"飞书数据类型测试表"的多维表,所有者是对应的应用。

打开该表,可以看到有一个默认的数据表。

至此,完成了多维表的创建。

由于使用 API 创建的多维表的所有者是应用,所以对应的文件会变成一个共享文件夹,和应用一起"协作"。还需要注意的点,通过应用创建的文件夹,如果不需要了,也只能通过应用删除,尽管协作者拥有管理权限。

流程梳理与总结

使用 API 创建多维表,需要先将文件夹分享给添加应用机器人的群组,通过该方式间接将文件夹授权给应用。

首次在群组新增应用机器人,需要先在应用后台开启机器人的能力。

实际使用过程中,可以创建一个群组专门用于文件夹的授权,这样一来,之后直接把文件夹分享给对应的群组,完成授权即可。

操作流程如下:

  • 应用添加机器人和创建群组并邀请应用机器人入群视为一次性操作,此后直接调用API为新的文件夹添加协作者权限即可。

文件夹给群组添加协作者权限,需要先获取群组的 chat_id。

找到获取群信息 API 文档,如下图,在右边的调试台,点击选择群组,可以复制 chat_id。

获取到 chat_id,可以保存下来之后反复使用。

调用添加协作者权限 API,为文件夹添加群组协作者

示例代码如下:

python 复制代码
import requests
import json

url = "https://open.feishu.cn/open-apis/drive/v1/permissions/AYYvfPya0l60fPd9CvTcFEuFnbc/members?need_notification=true&type=folder"
payload = json.dumps({
    "member_id": "oc_4db36e6b4ef56960cae2544ec9ae519c",
    "member_type": "openchat",
    "perm": "full_access",
    "type": "chat"
})


headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer t-g1046g9NIJNUNPQY2XLT2V2Q5K5XPMIJTBWKRAQL'
}

response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

结合前面新建多维表的代码,将两个 API 的请求代码封装成一个函数,传递关键参数,然后返回需要值。最终参考代码如下:

python 复制代码
import requests
import json

def add_folder_permission(access_token,folder_token,chatid,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": chatid,
        "member_type": "openchat",
        "perm": "full_access",
        "type": "chat"
    })

    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"成功为 {chatid} 开通权限。关联函数:add_folder_permission。")
    else:
        msg = response.json().get("msg")
        raise f"创建文件夹失败,失败信息:{msg}。关联函数:add_folder_permission。"

def cre_bitable(access_token,bitable_name,folder_token=''):
    url = "https://open.feishu.cn/open-apis/bitable/v1/apps"
    payload = json.dumps({
    	"folder_token": folder_token,
    	"name": bitable_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:
        app = response.json().get('data').get('app')
        bitable_app_token = app.get('app_token')
        bitable_table_id = app.get('default_table_id')
        print(f"成功创建多维表,多维表 app_token:{bitable_app_token},默认数据表ID:{bitable_table_id}。关联函数:add_folder_permission。")
        return bitable_app_token,bitable_table_id
    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_token

def main():
    app_id = 'your_app_id'
    app_secret = 'your_app_secret'
    access_token = get_tenant_access_token(app_id, app_secret)
    chatid = 'your_chat_id'
    add_folder_permission(access_token,new_folder_token,chatid,permission_type='full_access')
    bitable_name = "多维表名称"
    folder_token = "your_folder_token"
    bitable_app_token,bitable_table_id = cre_bitable(access_token,bitable_name,folder_token)

if __name__ == '__main__':
    main()

小结

本文探讨了如何通过 API 创建多维表。

具体操作如下:

  • 获得文件夹的权限
    • 应用配置:在应用后台开启机器人的能力
    • 创建群组:专用于文件夹授权
    • 群组配置:添加应用机器人
    • 文件夹授权:分享给新建的群组
  • 使用 API 创建多维表

其中,应用和群组配置可以视为一次性操作,后续只需要进行文件夹给群组授权,便可以使用 API 创建多维表。

相关推荐
千澜空18 分钟前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
斯凯利.瑞恩25 分钟前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan201903131 小时前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁1 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev1 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜2 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼2 小时前
Python 大数据展示屏实例
大数据·开发语言·python