飞书API(4):筛选数据的三种思路

截止到上一篇,终于通过飞书 API 完整获取到飞书多维表的数据。
但是,有些场景,比如数据源会出现脏数据,毕竟如果是运营过程多人协作维护的数据,要想保持数据完美简直是天方夜谭!再比如我们不需要完整的数据,只需要某个类别的数据即可,这个时候,就需要我们对数据进行筛选处理。

本文探讨三种处理思路:

  • 思路一:先读取所有数据,再处理;
  • 思路二:调接口读取时直接处理;
  • 思路三:新建视图进行筛选。

思路一:先读取所有数据,再处理

这种思路比较简单,就是在上一篇的基础上,使用 Python 进行数据处理。
上一篇,获取到的数据都以列表feishu_datas的形式返回了,采用 pandas 库来进行处理,把列表 feishu_datas 转为 DataFrame 之后。对对应的列进行筛选处理即可。
比如说只筛选出支付平台是“淘宝”的数据。
为了便于维护和对比查看,这里直接新增一个函数,该函数传入两个参数,一个是飞书的列表数据feishu_datas,一个是需要筛选的平台名称,然后在main()函数中调用它即可。

def filter_platform(feishu_datas, platform):df = pd.DataFrame(feishu_datas)df_platform = df[df.fields.apply(lambda x: x.get('支付平台')) == platform]filter_feishu_datas = df_platform.to_dict(orient='records')return filter_feishu_datas

在这里插入图片描述

如果是其他的筛选条件可以参考类似的方法执行筛选。

思路二:调接口读取时直接处理

前面在调用飞书接口的时候都是使用默认方式读取,即直接读取所有的数据,未使用非必须参数。
在非必须参数中,有一个 filter 参数,它就可以实现筛选,本思路就是使用它在调接口的时候对数据进行筛选。
官方文档如下:

  • 从文档中可以看到,filter 参数需要给:conjunction(条件之间的关系)和 conditions(条件)。
    • conjunction:当有多个条件的时候,是否同时满足所有条件(值:and)才返回数据还是满足任一个条件(值:or)即可。注意:不支持二者嵌套使用,比如 条件A and (条件B or 条件C)。
    • conditions:支持多个条件,每个条件使用大括号{}包裹,每个条件给定三个键值对,键分别是:field_name、operator 和 value,值根据需求给即可。

image.png

还是拿上面的例子,筛选支付平台是“淘宝”的数据。
该思路只需要在get_bitable_datas()函数中,将payload赋值内容改为以下代码即可。

payload = json.dumps({"filter":{"conjunction":"and","conditions":[{"field_name":"支付平台","operator":"is","value":["淘宝"]}]}})

改动图示如下:

image.png

该示例的代码是硬代码,为了更好维护,可以将变量payload的值改为参数进行传递,从函数外部传递payload_data值。

image.png

补充:观察每一页打印的数据,可以发现,接口数据也是按照所有数据进行分页,然后按页筛选数据。而不是将所有符合的数据筛选完再分页返回。

思路三:新建多维表视图进行筛选

该方法的原理和前面两种有点不同,前面两种都是通过 API 对所有数据进行筛选。该方法是先在飞书上新建视图进行筛选数据,然后通过 API 访问对应视图数据,读取时仅读取筛选后的结果。
还是以筛选支付平台是“淘宝”的数据。
先在多维表上新建一个视图,命名为“淘宝”,筛选:“支付平台=淘宝”。

image.png

然后在非必选参数中,需要指定对应的视图id(view_id),参数说明如下图:

在这里插入图片描述

view_id 的值在链接上直接获取即可:选择对应的视图,然后复制“view=”后面的字符串。

image.png

取思路二的代码,将payload_data修改为下面的值即可。

payload_data = {"view_id":"vewUjtcfIX"}

改完执行结果如下:

image.png

小结

本文探讨了三种处理多维表筛选数据的思路:

  • 思路一:获取所有数据,使用 pandas 进行数据筛选;
  • 思路二:调查询记录接口时,传递 filter 参数进行数据筛选;
  • 思路三:在多维表新建视图进行筛选,然后指定视图,读取所有数据。

附录

注:使用上一篇的 while 循环代码进行修改。
思路一完整代码:

import requests
import json
import pandas as pddef 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, page_token='', page_size=20):url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/search?page_size={page_size}&page_token={page_token}&user_id_type=user_id"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)return response.json()def filter_platform(feishu_datas, platform):df = pd.DataFrame(feishu_datas)df_platform = df[df.fields.apply(lambda x: x.get('支付平台')) == platform]filter_feishu_datas = df_platform.to_dict(orient='records')return filter_feishu_datasdef main():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'page_token = ''page_size = 5has_more = Truefeishu_datas = []while has_more:response = get_bitable_datas(tenant_access_token, app_token, table_id, page_token, page_size)if response['code'] == 0:page_token = response['data'].get('page_token')has_more = response['data'].get('has_more')# print(response['data'].get('items'))# print('\n--------------------------------------------------------------------\n')feishu_datas.extend(response['data'].get('items'))else:raise Exception(response['msg'])filter_feishu_datas = filter_platform(feishu_datas, '淘宝')return filter_feishu_datasif __name__ == '__main__':feishu_datas = main()print(feishu_datas)

思路二完整代码:

import requests
import jsondef 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, page_token='', page_size=20, payload_data={}):url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/search?page_size={page_size}&page_token={page_token}&user_id_type=user_id"payload = json.dumps(payload_data)headers = {'Content-Type': 'application/json','Authorization': f'Bearer {tenant_access_token}'}response = requests.request("POST", url, headers=headers, data=payload)# print(response.text)return response.json()def main():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'page_token = ''page_size = 5has_more = Truefeishu_datas = []payload_data = {"filter":{"conjunction":"and","conditions":[{"field_name":"支付平台","operator":"is","value":["淘宝"]}]}}while has_more:response = get_bitable_datas(tenant_access_token, app_token, table_id, page_token, page_size, payload_data)if response['code'] == 0:page_token = response['data'].get('page_token')has_more = response['data'].get('has_more')# print(response['data'].get('items'))# print('\n--------------------------------------------------------------------\n')feishu_datas.extend(response['data'].get('items'))else:raise Exception(response['msg'])return feishu_datasif __name__ == '__main__':feishu_datas = main()print(feishu_datas)

思路三完整代码:

import requests
import jsondef 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, page_token='', page_size=20, payload_data={}):url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/search?page_size={page_size}&page_token={page_token}&user_id_type=user_id"payload = json.dumps(payload_data)headers = {'Content-Type': 'application/json','Authorization': f'Bearer {tenant_access_token}'}response = requests.request("POST", url, headers=headers, data=payload)# print(response.text)return response.json()def main():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'page_token = ''page_size = 5has_more = Truefeishu_datas = []payload_data = {"view_id":"vewUjtcfIX"}while has_more:response = get_bitable_datas(tenant_access_token, app_token, table_id, page_token, page_size, payload_data)if response['code'] == 0:page_token = response['data'].get('page_token')has_more = response['data'].get('has_more')# print(response['data'].get('items'))# print('\n--------------------------------------------------------------------\n')feishu_datas.extend(response['data'].get('items'))else:raise Exception(response['msg'])return feishu_datasif __name__ == '__main__':feishu_datas = main()print(feishu_datas)

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

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

相关文章

ChatGPT研究论文提示词集合3-【数据收集】、【数据分析】和【解释与讨论】

点击下方▼▼▼▼链接直达AIPaperPass ! AIPaperPass - AI论文写作指导平台 目录 1.数据收集 2.数据分析 3.讨论与解释 4.书籍介绍 AIPaperPass智能论文写作平台 近期小编按照学术论文的流程,精心准备一套学术研究各个流程的提示词集合。总共14个步…

都2024 年了,可以卸载的VS Code 插件

在 VS Code 中,庞大的插件市场提供了丰富多样的扩展功能,以增强编码体验和效率。然而,如果你安装了很多插件,就可能会导致: 性能下降:过多的插件可能导致 VS Code 的启动速度变慢,特别是在启动或…

详解QDialogButtonBox的使用

示例图片 QDialogButtonBox 是 Qt 提供的一个方便的组件,用于在对话框中集中管理一组标准按钮,如“确定”、“取消”、“保存”、“关闭”等。它简化了按钮的布局、信号连接以及按钮行为的统一处理,使得对话框的开发更为简洁和规范。以下将…

【GlobalMapper精品教程】075:将影像的颜色赋予点云实现点云真彩色

文章目录 一、加载点云与影像数据二、将影像色彩赋予点云三、保存色彩点云四、注意事项一、加载点云与影像数据 加载本实验数据(data075.rar)中的影像、点云数据,并用Globalmapper提供的卷帘工具(快速浏览图像)查看: 启动卷帘工具,左右拖动实现卷帘效果: 影像VS点云:…

Coggle数据科学 | Coggle 4月竞赛学习:多模态图文问答

本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。 原文链接:Coggle 4月竞赛学习:多模态图文问答 Part1 内容介绍 在自然语言处理领域,大型语言模型(LLM)如GPT…

4月18号总结

java学习 网络编程 1.网络分层 网络分层是将网络通信划分为不同的逻辑层次,每一层负责特定的功能,从而实现网络通信的模块化和标准化。常用的网络分层模型包括OSI(开放系统互联)模型和TCP/IP模型。 特点和作用: 分…

UI5 快速入门教程

环境准备 node >16.8 ,VSCode,官方网址 开始 创建一个根文件夹,根文件中创建一个package.json文件 {"name": "quickstart-tutorial","private": true,"version": "1.0.0","author":…

[python数据处理系列]详解独热编码与标签编码的区别及在Pandas中的实现

目录 一、独热编码与标签编码的区别 二、创建数据集 三、独热编码实现 (一) 自动将所有分类变量进行独热编码 (二) 对指定列进行独热编码 (三) 对进行独热编码的列采用布尔型表示 四、查看数据类型 五、对数据进行独热编码后,数据变成了什么类型 一、独热编码…

Python 数据结构和算法实用指南(三)

原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者:飞龙 协议:CC BY-NC-SA 4.0 第七章:哈希和符号表 我们之前已经看过数组和列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效…

如何利用pg_dump和pg_restore迁移从一个PostgreSQL服务器到另一个服务器,同时保持一致性与高效性?

文章目录 解决方案1. 使用pg_dump导出数据2. 将导出的数据复制到目标服务器3. 使用pg_restore导入数据保持一致性与高效性的策略一致性高效性 示例代码导出数据复制数据到目标服务器在目标服务器上解压并导入数据 PostgreSQL数据库的迁移是一个常见的任务,特别是在升…

23.组件注册方式

组件注册方式 一个 Vue 组件在使用前需要先被“注册”,这样 Vue 才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册 全局注册 import { createApp } from vue import App from ./App.vue import GlobalComponent from ".…

一文搞懂对比度、清晰度、锐度、通透性怎么描述,说点能看懂的!

1.对比度是指的画面的明暗反差程度,增加对比度,画面中亮的地方会更亮,暗的地方会更暗,明暗反差增强。 2.锐度只作用于物体的边缘,但原理不同,主要是通过在边缘增加黑白相间的高对比线条“隔离带”,并不是渐变的,而是两边明暗反差非常分明的,影响范围小于清晰度,让边缘…