我的風格,廢話不多說了,直接給大家貼代碼了,并在一些難點上給大家附了注釋,具體代碼如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
#!/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模板消息的相關敘述能夠給大家帶來幫助。哪里寫的不好,還請各位大俠多多見諒,提出寶貴意見,謝謝。