工具1-获取监控的业务数据(二)

2022-03-30  本文已影响0人  软件开发技术修炼

背景:
由于公司打卡规则是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

下篇讲解:如何与钉钉群打通

上一篇下一篇

猜你喜欢

热点阅读