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


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

    查看创建多维表的 API

    API 路径,可在飞书开放平台的服务端 API,依次查找云文档>多维表格>多维表格>创建多维表格,或者直接点击:创建多维表API
    如果是在根目录,即我的空间创建多维表,传递多维表的参数名即可;如果是要在指定的文件下创建多维表,则需要多传递一个文件夹的 token 参数,示例如下:

    {
      "name":"一篇新的多维表格",
      "folder_token": "fldbco*****CIMltVc"
    }
    

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

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

    API 调试

    飞书 API 调试台测试新建多维表。
    我的文件夹 token 为:AYYvfPya0l60fPd9CvTcFEuFnbc,填入参数,名字就叫做飞书数据类型测试表。
    image.png

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

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

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

    应用开启机器人能力

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

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

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

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

    申请通过之后,便可以在群组中添加应用机器人。
    先创建一个群组,打开飞书的客户端,如下图,点击创建群组。
    image.png

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

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

    添加机器人
    image.png

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

    直接点击添加即可。
    image.png

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

    文件夹分享给群组

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

    成功新建多维表

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

    请求示例代码

    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)
    

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

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

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

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

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

    流程梳理与总结

    使用 API 创建多维表,需要先将文件夹分享给添加应用机器人的群组,通过该方式间接将文件夹授权给应用。
    首次在群组新增应用机器人,需要先在应用后台开启机器人的能力。
    实际使用过程中,可以创建一个群组专门用于文件夹的授权,这样一来,之后直接把文件夹分享给对应的群组,完成授权即可。
    操作流程如下:

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

    文件夹给群组添加协作者权限,需要先获取群组的 chat_id。
    找到获取群信息 API 文档,如下图,在右边的调试台,点击选择群组,可以复制 chat_id。
    image.png

    获取到 chat_id,可以保存下来之后反复使用。
    调用添加协作者权限 API,为文件夹添加群组协作者
    image.png

    示例代码如下:

    
    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 的请求代码封装成一个函数,传递关键参数,然后返回需要值。最终参考代码如下:

    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 创建多维表。

  • 相关阅读:
    vue+Django接入钉钉登录
    eclipse导入Tomcat9源码
    Spring IOC中bean的生命周期
    Anaconda - 操作系统安装程序 简要介绍
    rabbitmq3
    Kubernetes - Kubernetes详解;安装部署(一)
    Android Canvas的使用
    LeetCode 775. 全局倒置与局部倒置
    大事件!请注意!AIGC正在疯狂“污染”学术界
    openlayers点线面测量、绘制设计实现
  • 原文地址:https://blog.csdn.net/qq_45476428/article/details/139730906