基于python实现微信模板消息
我的风格,废话不多说了,直接给大家贴代码了,并在一些难点上给大家附了注释,具体代码如下所示:
#!/usr/bin/envpython #-*-coding:utf-8-*- importurllib2,json importdatetime,time fromconfigimport* importsys reload(sys) sys.setdefaultencoding("utf-8") classWechatPush(): def__init__(self,appid,secrect,file_name): #传入appid self.appid=appid #传入密码 self.secrect=secrect #传入记录token和过期时间的文件名 self.file_name=file_name defbuild_timestamp(self,interval): #传入时间间隔,得到指定interval后的时间格式为"2015-07-0114:41:40" now=datetime.datetime.now() delta=datetime.timedelta(seconds=interval) now_interval=now+delta returnnow_interval.strftime(‘%Y-%m-%d%H:%M:%S‘) defcheck_token_expires(self): #判断token是否过期 withopen(self.file_name,‘r‘)asf: line=f.read() iflen(line)>0: expires_time=line.split(",")[1] token=line.split(",")[0] else: return"","true" curr_time=time.strftime(‘%Y-%m-%d%H:%M:%S‘) #如果过期返回false ifcurr_time>expires_time: returntoken,"false" #没过期返回true else: returntoken,"true" defgetToken(self): #获取accessToken url=‘https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=‘+self.appid+"&secret="+self.secrect try: f=urllib2.urlopen(url) s=f.read() #读取json数据 j=json.loads(s) j.keys() #从json中获取token token=j[‘access_token‘] #从json中获取过期时长 expires_in=j[‘expires_in‘] #将得到的过期时长减去300秒然后与当前时间做相加计算然后写入到过期文件 write_expires=self.build_timestamp(int(expires_in-300)) content="%s,%s"%(token,write_expires) withopen(self.file_name,‘w‘)asf: f.write(content) exceptException,e: printe returntoken defpost_data(self,url,para_dct): """触发post请求微信发送最终的模板消息""" para_data=para_dct f=urllib2.urlopen(url,para_data) content=f.read() returncontent defdo_push(self,touser,template_id,url,topcolor,data): ‘‘‘推送消息‘‘‘ #获取存入到过期文件中的token,同时判断是否过期 token,if_token_expires=self.check_token_expires() #如果过期了就重新获取token ifif_token_expires=="false": token=self.getToken() #背景色设置,貌似不生效 iftopcolor.strip()==‘‘: topcolor="#7B68EE" #最红post的求情数据 dict_arr={‘touser‘:touser,‘template_id‘:template_id,‘url‘:url,‘topcolor‘:topcolor,‘data‘:data} json_template=json.dumps(dict_arr) requst_url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token content=self.post_data(requst_url,json_template) #读取json数据 j=json.loads(content) j.keys() errcode=j[‘errcode‘] errmsg=j[‘errmsg‘] #printerrmsg if__name__=="__main__": defalarm(title,hostname,timestap,level,message,state,tail): """报警函数""" color="#FF0000" data={"first":{"value":title},"keyword1":{"value":hostname,"color":color},"keyword2":{"value":timestap,"color":color},"keyword3":{"value":level,"color":color},"keyword4":{"value":message,"color":color},"keyword5":{"value":state,"color":color},"remark":{"value":tail}} returndata defrecover(title,message,alarm_time,recover_time,continue_time,tail): """恢复函数""" re_color="#228B22" data={"first":{"value":title},"content":{"value":message,"color":re_color},"occurtime":{"value":alarm_time,"color":re_color},"recovertime":{"value":recover_time,"color":re_color},"lasttime":{"value":continue_time,"color":re_color},"remark":{"value":tail}} returndata #data=alarm("测试的报警消息","8.8.8.8",time.ctime(),"最高级别","然并卵","挂了","大傻路赶紧处理") #实例化类 webchart=WechatPush(appid,secrect,file_name) url="http://www.xiaoniu88.com" printlen(sys.argv) #发送报警消息 iflen(sys.argv)==9: title=sys.argv[1] hostname=sys.argv[2] timestap=sys.argv[3] level=sys.argv[4] message=sys.argv[5] state=sys.argv[6] tail=sys.argv[7] print"sys.argv[1]"+sys.argv[1] print"sys.argv[2]"+sys.argv[2] print"sys.argv[3]"+sys.argv[3] print"sys.argv[4]"+sys.argv[4] print"sys.argv[5]"+sys.argv[5] print"sys.argv[6]"+sys.argv[6] print"sys.argv[7]"+sys.argv[7] print"sys.argv[8]"+sys.argv[8] withopen("/etc/zabbix/moniter_scripts/test.log",‘a+‘)asf: f.write(title+"\n") f.write(hostname+"\n") f.write(timestap+"\n") f.write(level+"\n") f.write(message+"\n") f.write(state+"\n") f.write(tail+"\n") f.write("%s_%s"%("group",sys.argv[8])+"\n") data=alarm(title,hostname,timestap,level,message,state,tail) group_name="%s_%s"%("group",sys.argv[8]) fortouserineval("%s_%s"%("group",sys.argv[8])): webchart.do_push(touser,alarm_id,url,"",data) fortouseringroup_super: webchart.do_push(touser,alarm_id,url,"",data) #发送恢复消息 eliflen(sys.argv)==8: title=sys.argv[1] message=sys.argv[2] alarm_time=sys.argv[3] recover_time=sys.argv[4] continue_time=sys.argv[5] tail=sys.argv[6] print"sys.argv[1]"+sys.argv[1] print"sys.argv[2]"+sys.argv[2] print"sys.argv[3]"+sys.argv[3] print"sys.argv[4]"+sys.argv[4] print"sys.argv[5]"+sys.argv[5] print"sys.argv[6]"+sys.argv[6] print"sys.argv[7]"+sys.argv[7] data=recover(title,message,alarm_time,recover_time,continue_time,tail) fortouserineval("%s_%s"%("group",sys.argv[7])): webchart.do_push(touser,recover_id,url,"",data) fortouseringroup_super: webchart.do_push(touser,recover_id,url,"",data)
好了,代码到此结束了,希望以上所述关于python模板消息的相关叙述能够给大家带来帮助。哪里写的不好,还请各位大侠多多见谅,提出宝贵意见,谢谢。