基于python实现微信模板消息


Posted in Python onDecember 21, 2015

我的风格,废话不多说了,直接给大家贴代码了,并在一些难点上给大家附了注释,具体代码如下所示:

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import urllib2,json
import datetime,time
from config import *
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class WechatPush():
  def __init__(self,appid,secrect,file_name):
    # 传入appid
    self.appid = appid
    # 传入密码
    self.secrect = secrect
    # 传入记录token和过期时间的文件名
    self.file_name=file_name
  def build_timestamp(self,interval):
    # 传入时间间隔,得到指定interval后的时间 格式为"2015-07-01 14:41:40"
    now = datetime.datetime.now()
    delta = datetime.timedelta(seconds=interval)
    now_interval=now + delta
    return now_interval.strftime(‘%Y-%m-%d %H:%M:%S‘)
  def check_token_expires(self):
    # 判断token是否过期
    with open(self.file_name,‘r‘) as f:
      line=f.read()
      if len(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
    if curr_time>expires_time:
      return token,"false"
    # 没过期返回true
    else:
      return token,"true"
  def getToken(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)
      with open(self.file_name,‘w‘) as f:
        f.write(content)
    except Exception,e:
      print e
    return token
  def post_data(self,url,para_dct):
    """触发post请求微信发送最终的模板消息"""
    para_data = para_dct
    f = urllib2.urlopen(url,para_data)
    content = f.read()
    return content
  def do_push(self,touser,template_id,url,topcolor,data):
    ‘‘‘推送消息 ‘‘‘
    #获取存入到过期文件中的token,同时判断是否过期
    token,if_token_expires=self.check_token_expires()
    #如果过期了就重新获取token
    if if_token_expires=="false":
      token=self.getToken()
    # 背景色设置,貌似不生效  
    if topcolor.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‘]
    #print errmsg
if __name__ == "__main__":
  def alarm(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}}
    return data
  def recover(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}}
    return data
  # data=alarm("测试的报警消息","8.8.8.8",time.ctime(),"最高级别","然并卵","挂了","大傻路赶紧处理")
  # 实例化类
  webchart=WechatPush(appid,secrect,file_name)
  url="http://www.xiaoniu88.com"
  print len(sys.argv)
  # 发送报警消息
  if len(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]
    with open("/etc/zabbix/moniter_scripts/test.log",‘a+‘) as f:
      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])
    for touser in eval("%s_%s" % ("group",sys.argv[8])):
      webchart.do_push(touser,alarm_id,url,"",data)
    for touser in group_super:
      webchart.do_push(touser,alarm_id,url,"",data)
  #发送恢复消息
  elif len(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)
    for touser in eval("%s_%s" % ("group",sys.argv[7])):
      webchart.do_push(touser,recover_id,url,"",data)
    for touser in group_super:
      webchart.do_push(touser,recover_id,url,"",data)

好了,代码到此结束了,希望以上所述关于python模板消息的相关叙述能够给大家带来帮助。哪里写的不好,还请各位大侠多多见谅,提出宝贵意见,谢谢。

Python 相关文章推荐
跟老齐学Python之??碌某?? target=
Sep 12 Python
Python编程中的反模式实例分析
Dec 08 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
python编程羊车门问题代码示例
Oct 25 Python
python实现发送邮件功能代码
Dec 14 Python
Python异常处理例题整理
Jul 07 Python
Python3 批量扫描端口的例子
Jul 25 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
python爬取某网站原图作为壁纸
Jun 02 Python
Python基于百度API识别并提取图片中文字
Jun 27 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 Python
python如何实现远程控制电脑(结合微信)
Dec 21 #Python
python从入门到精通(DAY 3)
Dec 20 #Python
python从入门到精通(DAY 2)
Dec 20 #Python
利用python代码写的12306订票代码
Dec 20 #Python
python从入门到精通(DAY 1)
Dec 20 #Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 #Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 #Python
You might like
适用于php-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
什么是python的id函数
2020/06/11 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
客服主管岗位职责
2013/12/13 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
2015年预备党员自我评价
2015/03/04 职场文书