背景:
由于公司打卡规则是15min采点一次,采点即定位,如定位异常会不计算在工时内,除非进行异常申诉;
大多同事经常因为不小心杀掉app进程、或打电话引起网络异常等原因,引起采点异常;
故想出监控采点接口,通过打通钉钉群及jenkins,及时监控到异常,得以立马打开app恢复正常
import requests
import json
import time
def login():
'''
:return: 获取token,userId
'''
url = "https://{url}/api/ideal-new-user/api/public/user/login"
headers = {"Content-Type": "application/json"}
parameters = {"phoneId": "1557235××××", "password": "Tao189781"}
s = requests.session()
res = s.post(url,headers = headers, data = json.dumps(parameters),verify=False)
res = res.json()
token = res['data']['accessToken']
userId = res['data']['userId']
return userId,token
第一步:获取userId,此处有几点接口基础知识:
本来想着获取token,因为就2个接口;后面懒得传参,直接用session
1、requests.session():维持会话,可以在跨请求时保持某些参数,就是免传token、cookies
使用方式:实例化session: s = requests.session(),再使用session发起请求
2、传data参数进行json.dumps、url是https请求,需带上verify=False
3、提取参数方式:res['data']['userId']
def get_point(userId):
'''
:param userId: 获得参数
:return: 返回异常采点值
'''
# attendDate = 2022 - 03 - 30
url = "https://{url}/api/ideal-new-attend/api/attend/date/attendPonitList"
# time = datetime.now() #当前时间年月日时分秒
date = time.strftime("%Y-%m-%d") #输出格式年月日
headers = {"Content-Type": "application/json"}
parameters = {"attendDate":date,"type":1,"userId":userId}
res = requests.get(url,params=parameters,headers=headers,verify=False)
res1 = res.json()['data']['attendDatePointDTOList']
# print(res1)
for num, item in enumerate(res1):
# 异常点时间
appPonitTime = item['appPonitTime']
# 状态
type = item['type']
# 是否异常
valid = item['valid']
# print(appPonitTime,type,valid)
if not valid:
resp = {
"时间点": appPonitTime,
"状态": type,
"采点是否正常": valid
}
yield resp
第二步:关联参数userId,获取监控数据
此处说明几点:
1、date = time.strftime("%Y-%m-%d") ,获取当前年月日
2、遍历列表中的字典:for num, item in enumerate(res1):
res1 = [{'key':'a','value':'b'},{},{}]
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
enumerate(X, [start=0])
函数中的参数X可以是一个迭代器(iterator)或者是一个序列,start是起始计数值,默认从0开始。X可以是一个字典。(注意观察下面的输出结果)
for i,item in enumerate(b, start=10):
print(i,item)
output:
10 1
11 2
12 3
3、 valid = True, if not valid:如果False,输出
4、yield ,看做return之后再把它看成生成器(generator)的一部分(带yield的函数才是真正的迭代器)
这篇挺详细挺一针见血的解释了yield
https://blog.csdn.net/mieleizhi0522/article/details/82142856
下篇讲解:如何与钉钉群打通
网友评论