飞书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.mzph.cn/news/820914.shtml

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

相关文章

【JavaWeb】Day46.Mybatis——入门

JDBC介绍 通过Mybatis可以很方便的进行数据库的访问操作。其实java语言操作数据库,只能通过一种方式:使用sun公司提供的 JDBC 规范。Mybatis框架,就是对原始的JDBC程序的封装。 JDBC: ( Java DataBase Connectivity )&#xff0c…

开源了!自从用了这个远程控制工具,从此把 TeamViewer 扔一边了【文末领项目源码】

在工作中,咱们经常要使用向日葵、TeamViewer 等远程控制工具,来远程操控项目上的主机去解决一些部署在现场的系统问题,亦或是在家偶尔加班时用家里的电脑远程公司的电脑处理工作。但不爽的是,TeamViewer 用一用试用期就过了&#…

ES 大数据量按照日期分索引存储和查询

前言 ES 通常被用来存放各种日志数据或其他大批量数据,然后做统计。 对于请求量大的系统来说,日志或其他业务数据无比庞大,需要按日期来划分索引,便于做冷热数据的迁移管理。大批量的业务数据也要根据日期来区分,提高…

Java --- 类与对象

上篇内容给大家带来了Java的语句与数组的相关内容,那么本期内容比较重要,需要读者们掌握Java面向对象编程的根本,通过这篇博客来让读者浅入理解Java类的一些基本操作。 目录 一.特点: 二.成员变量: 三.访问修饰符&a…

【JavaSE】搞定String类

前言 本篇会细致讲解String类的常见用法,让小伙伴们搞定String类~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 常用的三种字符串构造 字符串长度length 字符串比较 比较 比较字符串的内容equals…

MySQL DDL 通用语法

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

libftdi1学习笔记 4 - MPSSE SPI

目录 1. 初始化 2. SCK默认电平设置 3. GPIO控制 4. spi全双工通信 4.1 MSB/LSB 4.2 分配command缓存 4.3 spi0TransferBit 4.3 spi1TransferBit 4.4 spi2TransferBit 4.5 spi3TransferBit 4.6 写命令序列 4.7 读数据 4.8 组合实际数据 5. 验证 5.1 初始化FTDI设…

短视频底层逻辑分析

短视频底层逻辑 1.迭代模型_ev 2.Douyin的本质_ev 3.Douyin的审核机制_ev 4.平台趋势_ev 5.定位_ev 6.建立用户期待_ev 7.好内容的定义_ev 8怎么做好内容_ev 9.如何做好选题_ev 10.如何快速模仿_ev 11.账号拆解的底层逻辑_ev 12选人的重要性_ev 13.内容的包装_ev 14.打造大IP的…

【中间件】ElasticSearch简介和基本操作

一、简介 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,支持各种数据类型,包括文本、数字、地理、结构化、非结构化 ,可以让你存储所有类型的数据,能够解决不断涌现出的各种用例。其构成如下: 说明&#xff1…

Python数学建模学习-PageRank算法

1-基本概念 PageRank算法是由Google创始人Larry Page在斯坦福大学时提出,又称PR,佩奇排名。主要针对网页进行排名,计算网站的重要性,优化搜索引擎的搜索结果。PR值是表示其重要性的因子。 中心思想: 数量假设&#…

创领“浆”来:三一重工特种砂浆站引领行业绿色高效新纪元

随着我国城市化进程不断加快,国家对城市建设高度关注,国务院办公厅针对城镇老旧小区基础设施匮乏、住房条件落后、环境污染严重等突出问题印发了《关于全面推进城镇老旧小区改造工作的指导意见》,各地积极响应,因此特种砂浆也迎来…

【微信取证篇】微信收藏图片存储记录思维导图

【微信取证篇】微信收藏图片存储记录思维导图 最近在测试微信收发图片和收藏的功能,发现许多有意思的地方,**微信收藏图片缓存的文件目前发现有三个地方,都是在Fav下,名称都一样,有直接原始图片,也有加密的…

2024年nodejs调用小红书最新关注(粉丝)follow接口,api接口分析2004-04-16

一、打开chrome按f12,点击右上角的“关注”按钮,抓包位置如下: (图1 follow接口) 二、follow接口分析 1、请求地址 https://edith.xiaohongshu.com/api/sns/web/v1/user/follow 2、请求方法: POST 3、请求头: :authority: edith…

telnet不是内部或外部命令也不是可运行的程序或批处理文件

出现问题 在Windows命令行运行telnet命令,出现: ‘telnet’ 不是内部或外部命令,也不是可运行的程序,或批处理文件。 问题原因 Windows系统中的telnet客户端是关闭状态。因为Win10默认没有安装telnet功能。 解决方式 将系统中…

FPGA - 以太网UDP通信(一)

一,简述以太网 以太网简介 ​以太网是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。 ​ 以太网类型介绍 以太网是现实世界中最普遍的一种计算机网络。以太网有…

[C++][算法基础]二分图的最大匹配(匈牙利算法)

给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。 数据保证任意一条边的两个端点都不可能在同一部分中。 请你求出二分图的最大匹配…

Intel显卡驱动导致Qt opengl 渲染YUV时拉伸窗口内存泄漏

最近在使用QOpenGLWidget做YUV视频渲染,发现在拉伸窗口的时候内存暴涨,如果窗口不动则内存不变。 可以得出结论一定是resizeGL出了问题,但是其实这里代码很简单 glViewport(0, 0, w, h); 还有就是变换矩阵计算,根本没资源建立与释…

Sublime Text下载,安装,安装插件管理器,下载汉化插件

SublimeTest官网 © Sublime Text中文网 下载安装 一路点击安装即可 安装插件管理器 管理器官网安装 - 包控制 (packagecontrol.io) 手动安装将3 位置点击网址下载 再打开SublimeTest 点击 选择第一个Browse Packages..... 将会跳转到文件夹中 进入上一个文件夹 在进入…

【读点论文】YOLOX: Exceeding YOLO Series in 2021,无锚框单阶段目标检测方案,解耦检测头的分类和回归分支,优化标签分配策略

YOLOX: Exceeding YOLO Series in 2021 Abstract 在本报告中,我们介绍了YOLO系列的一些经验改进,形成了一种新的高性能探测器—YOLOX。我们将YOLO检测器切换到无锚方式,并进行其他先进的检测技术,即去耦头和领先的标签分配策略S…