基于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 ZipFile模块详解
Nov 01 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
简单了解OpenCV是个什么东西
Nov 10 Python
Python获取当前公网ip并自动断开宽带连接实例代码
Jan 12 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
浅谈python标准库--functools.partial
Mar 13 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
python3 循环读取excel文件并写入json操作
Jul 14 Python
python中str内置函数用法总结
Dec 27 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
基于Vue制作组织架构树组件
2017/12/06 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
javascriptvoid(0)含义以及与"#"的区别讲解
2019/01/19 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
bpython 功能强大的Python shell
2016/02/16 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
python 性能优化方法小结
2017/03/31 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
python中的句柄操作的方法示例
2019/06/20 Python
python3 深浅copy对比详解
2019/08/12 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
JAVA程序员自荐书
2014/01/30 职场文书
技校毕业生自荐信
2014/06/03 职场文书
我的长征观后感
2015/06/09 职场文书
爱国之歌(8首)
2019/09/29 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python