基于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简单实现计算过期时间的方法
Jun 09 Python
谈谈Python进行验证码识别的一些想法
Jan 25 Python
Python打包可执行文件的方法详解
Sep 19 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
python日志模块logbook使用方法
Sep 19 Python
python获取整个网页源码的方法
Aug 03 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
详解如何用Python实现感知器算法
Jun 18 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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写MySQL数据 实现代码
2009/06/15 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
js 创建书签小工具之理论
2011/02/25 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
解读Django框架中的低层次缓存API
2015/07/24 Python
Python实现读取并保存文件的类
2017/05/11 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
Python数据结构之单链表详解
2017/09/12 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
python重试装饰器的简单实现方法
2019/01/31 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
Pytorch释放显存占用方式
2020/01/13 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
印刷工程专业应届生求职信
2013/09/29 职场文书
外贸业务员求职信范文
2013/12/12 职场文书
办公室前台岗位职责
2014/01/04 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
社区党员先进事迹
2014/01/22 职场文书
数学教研活动总结
2014/07/02 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
百万英镑观后感
2015/06/09 职场文书
结婚司仪主持词
2015/06/29 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
配置Kubernetes外网访问集群
2022/03/31 Servers