监控飞书报警信息并生成Excel文件 1.0.0

文档关键字

Python调用飞书API、获取飞书群消息、生成飞书电子文档、发送消息到飞书群聊


飞书API接口文档地址

开发文档 - 飞书开放平台 (feishu.cn)

脚本生成文档展示

背景

        项目上线了“接口性能监控功能”,结合上以前开发的飞书报警功能,当用户使用项目功能,发起接口请求,如果项目耗时超过了预设的阈值,将会发送报警消息到对应的群聊中,目的是统计、监控性能不达标的接口,方便后面排期优化。

        但是由于这个功能已经上线了一段时间,而优化的排期工作还没有安排,导致报警群已经堆积了大量的消息,想要人工整理报警信息已经是不现实的事情,所以开发了Python脚本,可以一键获取全量的历史消息,且部署到服务器的定时任务中,每天定时增量拉取报警信息,并生成飞书云文档(电子文档)到指定云文档目录下,方便部门成员预览。

待解决问题

  1. 获取指定飞书群消息
  2. 生成飞书云文档到指定云文档地址
  3. 将云文档地址发送到指定群聊

问题解决思路

        以上问题在阅览飞书API文档后发现都可以实现,那么问题其实变得非常简单,只需要发送HTTP请求,整理数据格式就可以了。

1、读取飞书群消息

https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/listhttps://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/list2、创建电子文档

https://open.feishu.cn/document/ukTMukTMukTM/uQTNzUjL0UzM14CN1MTNhttps://open.feishu.cn/document/ukTMukTMukTM/uQTNzUjL0UzM14CN1MTN3、写入数据

https://open.feishu.cn/document/ukTMukTMukTM/uIjMzUjLyIzM14iMyMTNhttps://open.feishu.cn/document/ukTMukTMukTM/uIjMzUjLyIzM14iMyMTN4、将生成的文档地址发送到指定群

https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/createhttps://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/create

预计节省工时

        如果通过手工整理全量报警消息,我们四个环境“dev、test、uat、prd”四个报警群,假设每个报警群1000条数据来算,一个人需要至少2小时才能整理好报警信息,即节省至少2小时/人的工时。再加上每天看到一条报警信息就要誊到文档中一条信息,这个工时、精力简直不可估量。

脚本运行思路

  1. 根据传入参数,判断拉取群消息的时间范围;第一次拉取全量数据,后面部署到定时任务,每天晚上拉取当天的数据。
  2. 获取部署了“飞书应用”的群聊
  3. 循环获取历史群消息
  4. 按照指定格式整理Excel行数据对象
  5. 云文档中指定文件夹位置创建Excel文档
  6. 发送文档地址到指定群聊(部门群)
  7. 向文档中循环写入数据

飞书API使用注意事项

1、想要使用飞书API,需要基于飞书应用之上,所以要先创建飞书应用

2、脚本使用到的接口,都需要申请对应的权限

 3、一些接口要开通机器人功能,例如获取消息功能,只需要将机器人开关打开即可

4、飞书API接口每次调用都需要生成应用token,应用token则是根据应用的ID、密钥调用接口实现,ID、密钥可以从“凭证与基础信息中获取”

 5、获取群消息接口想要调用成功,需要将应用添加到对应的群聊中

6、想要在指定目录下创建文档,需要将“添加了应用的群聊”添加到文件夹的协作者中 

7、飞书API的每个接口,可以看作是 我们正常手动操作的对应步骤,这么说有点抽象,意思是,想要调用接口C,必须先要按顺序执行接口A、接口B;例如,我想要向文档中写入数据,那么①先要创建文档、②创建SHEET页、③添加空白行、④才是向空白行中写入数据

脚本地址

https://github.com/MaverickGao/python_utils/blob/feature_20221029/utils/feishu_pormance_alarm.py

【案例】 【案例】Python飞书机器⼈编辑表格 飞书机器⼈编辑表格 #!/usr/bin/env python # -*- coding: utf-8 -*- from .config import * import requests import json class Bot: def __init__(self, app): self.app = app # app为机器⼈ self.table = None # 共享⽂档的table_id self.sheet = None # 共享⽂档的sheet_id self.token = self.get_token() self.header = { "Authorization": self.token, "Content-Type": "application/json; charset=utf-8" } def get_token(self): """获取应⽤token""" url = url_api['url_token'] headers = {"Content-Type": "text/plain"} r = requests.post(url, headers=headers, json=self.app) return "Bearer " + json.loads(r.text)['tenant_access_token'] def use(self, table, sheet): self.table = table self.sheet = sheet return self def add_data(self, sheet_range="", values=[]): """增加数据,原始数据下移""" data = { "valueRange": { "range": self.sheet + sheet_range, "values": values } } r = requests.post(urls['插⼊数据'] % self.table, headers=self.header, json=data) return r.text def del_data(self, major=0, start_index=1, end_index=1): """删除数据""" data = { "dimension": { "sheetId": self.sheet, "majorDimension": ['ROWS', 'COLUMNS'][major], "startIndex": start_index, "endIndex": end_index } } r = requests.delete(urls['删除数据'] % self.table, headers=self.header, json=data) return r.text def union_cell(self, sheet_range, major=0): """合单元格""" url = urls['合单元格'] % self.table data = { "range": self.sheet + sheet_range, "mergeType": ['MERGE_ALL', 'MERGE_ROWS', 'MERGE_COLUMNS'][major] } r = requests.post(url, headers=self.header, json=data) return r.text def split_cell(self, sheet_range): """拆分单元格""" data = { "range": self.sheet + sheet_range } r = requests.post(urls['拆分单元格'] % self.table, headers=self.header, json=data) return r.text def set_style(self, sheet_range, kind): def set_style(self, sheet_range, kind): """设置单元格格式""" data = { "appendStyle": { "range": self.sheet + sheet_range, "style": self.style_list(kind) } } r = requests.put(urls['设置单元格格式'] % self.table, headers=self.header, json=data) return r.text def phone_to_open_id(self, mobile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值