python查询接口数据脚本

#! /usr/bin/env python3.9
#--*-- coding:utf-8 --*--

import pandas as pd
import pymysql
from sqlalchemy import create_engine
import os,sys,logging,argparse,traceback
from common import ConfigData,initLogger
import urllib,datetime,time
from dateutil.relativedelta import relativedelta
import urllib.parse
import urllib.request as request
import json

#推送数据
def sendUrl(msgAmount,cnfIp,cnfPort):
    logger.info("开始推送金额数据")
    url = "http://{interip}:{interport}/cloudService/flowRevenueAmount".format(
        interip = cnfIp,
        interport = cnfPort
    ) 
    time=datetime.datetime.now().strftime("%Y-%m-%d")
    headers={
   'Content-Type': 'application/json;charset=UTF-8',
   'User-Agent': 'Mozilla/5.0'
    }
    params = {
        "sysCode" : "cloudService",
        "date" : time,
        "flowMsgAmount" : msgAmount
    }
    query_string = json.dumps(params).encode('utf-8')
    try:
        req=request.Request(url=url,data=query_string,headers=headers)
        with request.urlopen( req ) as response:
            response_text = response.read()
            logger.info(response_text)
    except:
        logger.error("error : %s" % traceback.format_exc())
    logger.info("推送金额数据结束")

#计算总的短信金额
def selectSum(bTotal,aTotal,cnfIp,cnfPort):
    logger.info("计算短信总金额")
    time=datetime.datetime.now().strftime("%Y-%m-%d")
    headers={
    'Content-Type': 'application/json;charset=UTF-8',
    'User-Agent': 'Mozilla/5.0'
    }
    #计算短信总量
    smsTotal=int(bTotal)+int(aTotal)
    amountTotal=int(smsTotal) * 0.08
    msgAmount=str(amountTotal)
    logger.info(msgAmount)
    try:
        sendUrl(msgAmount,cnfIp,cnfPort)
    except:
        logger.error("error : %s" % traceback.format_exc())
    logger.info("计算总金额结束")

#b短信数量
def bSmstotal(bIp,bPort,aTotal,cnfIp,cnfPort):
    logger.info("查询b短信数量")
    burl = "http://{bip}:{bport}/getSmsTotal".format(
        bip = bIp,
        bport = bPort
    )
    time=datetime.datetime.now().strftime("%Y-%m-%d")
    headers={
    'Content-Type': 'application/json;charset=UTF-8',
    'User-Agent': 'Mozilla/5.0'
    }
    try:
        shreq=request.Request(burl,headers=headers)
        with request.urlopen( shreq ) as response:
            response_b = response.read()
            bTotal_json = json.loads(response_b)
            bTotal = bTotal_json['data']
            logger.info(bTotal)
        selectSum(bTotal,aTotal,cnfIp,cnfPort)
    except:
        #logger.error("error : %s" % traceback.format_exc())
        bTotal = 0
        selectSum(bTotal,aTotal,cnfIp,cnfPort)
    logger.info("查询b结束")

#a短信数量
def aSmstotal(aIp,aPort,bIp,bPort,cnfIp,cnfPort):
    logger.info("查询a环境短信数量")
    aurl = "http://{asmsip}:{asmsport}/getSmsTotal".format(
        asmsip = aIp,
        asmsport = aPort
    )
    time=datetime.datetime.now().strftime("%Y-%m-%d")
    headers={
    'Content-Type': 'application/json;charset=UTF-8',
    'User-Agent': 'Mozilla/5.0'
    }
    try:
        areq=request.Request(aurl,headers=headers)
        with request.urlopen( areq ) as response:
            response_a = response.read()
            aTotal_json = json.loads(response_a)
            aTotal = aTotal_json['data']
            logger.info(aTotal)
        bSmstotal(bIp,bPort,aTotal,cnfIp,cnfPort)
    except:
        #logger.error("error : %s" % traceback.format_exc())
        aTotal = 0
        bSmstotal(bIp,bPort,aTotal,cnfIp,cnfPort)
    logger.info("查询a结束")

#接收default.xml文件的参数
def interNal(cnf):
    logger.info("传入各个接口的IP和端口信息")
    try:
        bIp=cnf.b_ip
        bPort=cnf.b_port
        aIp=cnf.a_ip
        aPort=cnf.a_port
        cnfIp=cnf.inter_ip
        cnfPort=cnf.inter_port
        aSmstotal(aIp,aPort,bIp,bPort,cnfIp,cnfPort)
    except:
        logger.error("error : %s" % traceback.format_exc())
    logger.info("流程结束")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='event parse')
    parser.add_argument('-f', dest='conffile', action='store',
    required=True,help='configure file')
    args = parser.parse_args()
    conffile = args.conffile
    cnf = ConfigData()
    cnf.load(conffile)
    logger=initLogger(cnf.log_startDayPath,cnf.log_level,cnf.log_backupNum)
    interNal(cnf)

脚本思路:一层一层传递参数,main--->interNal--->aSmstotal--->bSmstotal--->selectSum--->sendUrl

每个函数执行具体的操作,两个查询数量的函数有异常捕获,异常时传递数量为0,最后会推送到接口

posted @ 2023-10-30 17:44  菜菜陈  阅读(54)  评论(0)    收藏  举报