飞书API(2):通过 Python 读取多维表数据

2024-06-09 1206阅读

上一篇介绍了怎么通过官方的控制台调用飞书的 API 读取多维表数据,本篇介绍怎么通过 Python 读取多维表数据。

通过 Python 读取多维表主要分两步:

  • 第一步是获取 access_token;
  • 第二步是拿 access_token 读取数据。

    先说第二步,因为这一步比较简单。

    1、使用 Python 读取多维表数据

    1.1 获取 demo

    上一篇介绍了怎么查看接口文档并调试 API,接着往下讲。

    官方查询多维表数据记录的 API 链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app-table-record/search

    打开 API 调试台,如果打不开从飞书开放平台右上角进去

    飞书API(2):通过 Python 读取多维表数据

    在 API 调试台,找到【查询记录】的接口,索引是云文档>多维表格>记录>查询记录。也可以直接在 API 列表下搜索。

    飞书API(2):通过 Python 读取多维表数据

    先获取下 access_token,左边 tenant_access_token 下点击刷新符号

    飞书API(2):通过 Python 读取多维表数据

    上篇的多维表链接为:https://xxxxxxxxxx.feishu.cn/base/PtRdbPjCFa5Og5sry0lcD1yPnKg?table=tblVBqxDbGXOJZPv&view=vewjgHC22S,其中 PtRdbPjCFa5Og5sry0lcD1yPnKg 就是 app_token,tblVBqxDbGXOJZPv 就是 table_id,vewjgHC22S 就是 view_id。

    本次依旧使用该表单进行测试,填写必填参数 app_token 和 table_id 即可开始调试。

    飞书API(2):通过 Python 读取多维表数据

    成功获取到数据

    飞书API(2):通过 Python 读取多维表数据

    然后点击“示例代码”,可以看到几种主流语言的参考代码。点击“Python - Requests”,鼠标移到代码区域,可以看到右边有一个复制的符号,点它复制代码,然后本地新建一个 Python 文件便可以测试通过requests请求多维表数据。

    飞书API(2):通过 Python 读取多维表数据

    1.2 本地调试

    在本地执行代码,结果如下,可成功获取到多维表数据。

    注意:需要安装第三方包 requests。如果没有自行安装:命令行输入:pip install requests。

    飞书API(2):通过 Python 读取多维表数据

    简单修改下代码,将 tenant_access_token、app_token 和 table_id 通过变量替换,使得变得更通用,更容易维护。

    """注意:需要修改 tenant_access_token、app_token 和 table_id"""
    import requests
    import json
    tenant_access_token = 't-g1043vmpMSGVOXBVWYATGQCV6NL43NBK2U7OHKM7'
    app_token = 'PtRdbPjCFa5Og5sry0lcD1yPnKg'
    table_id = 'tblVBqxDbGXOJZPv'
    url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/search"
    payload = json.dumps({})
    headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {tenant_access_token}'
    }
    response = requests.request("POST", url, headers=headers, data=payload)
    print(response.text)
    

    2、获取 access_token

    为什么要频繁获取 tenant_access_token,因为一个 tenant_access_token 的有效期只有 2 小时。如果使用过期的 tenant_access_token,将无法请求到数据。

    2.1 请求数据

    到目前为止,每次需要读取数据都是在 API 调试台手动获取 tenant_access_token,为了使得程序更加自动化,需要去掉手动获取 tenant_access_token 的操作。

    查看飞书的 API 文档,可以看到有一个接口可以获取到 tenant_access_token。

    飞书API(2):通过 Python 读取多维表数据

    文档链接:自建应用获取 tenant_access_token。

    从文档中可以看到,需要 2 个参数:应用的 app_id 和 app_secret。

    应用 app_id 和 app_secret 的获取,可以从开发者后台点击应用名称,然后进入到详情页获取

    飞书API(2):通过 Python 读取多维表数据

    飞书API(2):通过 Python 读取多维表数据

    在 API 调试台找到对应的 API 名称【自建应用获取 tenant_access_token】,请求体输入应用的 app_id 和 app_secret,点击开始调试便可获取到 tenant_access_token。

    飞书API(2):通过 Python 读取多维表数据

    同样,点击“示例代码”>“Python - Requests”>复制代码。

    飞书API(2):通过 Python 读取多维表数据

    然后在本地跑代码,结果如下,可成功获取到 tenant_access_token。

    飞书API(2):通过 Python 读取多维表数据

    2.2 处理数据

    通过 2.1 请求到的数据,还不能直接使用,需要对数据进行预处理,提取响应体中tenant_access_token的值。

    提取方法相对比较简单,将返回的对象response转为字典结构,然后通过键tenant_access_token直接取即可。参考如下:

    response.json()['tenant_access_token']
    

    飞书API(2):通过 Python 读取多维表数据

    3、合并代码

    分别将获取 tenant_access_token 和获取多维表数据的代码封装成一个函数,然后将关键的参数提取出来通过函数的参数进行传递,最终参考代码如下:

    import requests
    import json
    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)
        # print(response.text)
        return response.json()['tenant_access_token']
    def get_bitable_datas(tenant_access_token, app_token, table_id):
        url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/search"
        payload = json.dumps({})
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Bearer {tenant_access_token}'
        }
        response = requests.request("POST", url, headers=headers, data=payload)
        print(response.text)
        
    app_id = 'your_app_id'
    app_secret = 'your_app_secret'
    tenant_access_token = get_tenant_access_token(app_id, app_secret)
    app_token = 'your_app_token'
    table_id = 'your_table_id'
    get_bitable_datas(tenant_access_token, app_token, table_id)
    

    执行结果参考:

    飞书API(2):通过 Python 读取多维表数据

    4、小结

    使用 Python 自动读取多维表主要分两步:

    • 第一步是取应用的 app_id 和 app_secret 获取临时 tenant_access_token,传递给第二步;
    • 第二步是取 tenant_access_token 加上 多维表的标识(app_token、table_id)读取数据。

      注意一点,如果是使用应用第一次读取某个多维表,需要在多维表为应用开启读取权限,详情参考上篇【3、创建多维表,并设置应用操作多维表的权限】。

      飞书API(2):通过 Python 读取多维表数据

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]