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,最后会推送到接口
浙公网安备 33010602011771号