API是个好东西,特别是restful API是个好东西,我不是开发也就不展开讲了,我喜欢新的东西,也喜欢捯饬新的东西,最好是别人没写过的,如果都写了也就没啥意思了~~~
好吧,进入正题。我想达到下面的效果,微信公众号已经变成生活的一部分了~
通过一些自定义的指令,通过发送微信的方式,直接以文本的格式回复得到我们需要的消息
注:因为这是本人用的没有认证的个人公众号的问题,所以不能很方便的通过接口上传图片,所以上面也就简单的显示了文本的自动回复方式,为毛不用公司企业号?因为我们公司走流程太麻烦了T_T这里就自动回复随便用~~~
如果你是企业号或者认证了的公众号,理论上权限多的不要要的~~~
首先是微信公众号的申请~
略。。。
再是web框架的选取,这里用的python的flask,好用的不要不要的
因为其简单。
第一步简答的微信后台认证
进入登录后台--->开发-->基本配置--->修改配置
配置好url地址,以及令牌,加密秘钥自动生成即可,加密机密选择兼容。
但是怎么配置url地址,以及怎么让微信回调呢?大家可以百度一下,这里直接给出代码。
#coding:utf-8 from flask import Flask,render_template,request,make_response import time import hashlib app = Flask(__name__) app.debug = True @app.route("/wechat",methods = ["GET","POST"]) def wechat_auth(): if request.method == 'GET': if len(request.args) > 3: token = '你的令牌Token' query = request.args signature = query['signature'] timestamp = query['timestamp'] nonce = query['nonce'] echostr = query['echostr'] s = [timestamp, nonce, token] s.sort() s = ''.join(s) sha1str = hashlib.sha1(s).hexdigest() if sha1str == signature: return make_response(echostr) else: return make_response("认证失败") else: return "认证失败"
微信会通过GET的方式来验证是否可用。
熟悉web.py的可参考:http://my.oschina.net/yangyanxing/blog/159215
熟悉flask的可参考:http://blog.csdn.net/linhan8/article/details/8746110
上面的代码,能够让你通过验证,验证之后你就可以启用了~~
但是现在是没什么用的,因为通过验证只是第一步嘛,我们要的是自动回复特定的信息。
注:这里只讲文本回复,语音,图文之类的需要参考微信开发文档。
首先是最简单的,发送过来什么消息,我们原样回复过去。
在上面的基础上,变成如下内容
#coding:utf-8 from flask import Flask,render_template,request,make_response import time import hashlib import xml.etree.ElementTree as ET app = Flask(__name__) @app.route("/wechat2",methods = ["GET","POST"]) def wechat_auth(): if request.method == 'GET': if len(request.args) > 3: token = 'youerning' query = request.args signature = query['signature'] timestamp = query['timestamp'] nonce = query['nonce'] echostr = query['echostr'] s = [timestamp, nonce, token] s.sort() s = ''.join(s) sha1str = hashlib.sha1(s).hexdigest() if sha1str == signature: return make_response(echostr) else: return make_response("认证失败") else: return "认证失败" else: rec = request.stream.read() xml_rec = ET.fromstring(rec) to_user = xml_rec.find("ToUserName").text from_user = xml_rec.find("FromUserName").text content = xml_rec.find("Content").text xml_rep = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>" response = make_response(xml_rep % (from_user,to_user,str(int(time.time())),content)) response.content_type = "application/xml" return response
好吧~~其实,上面的代码其实基本上copy的,因为上面推荐的文章讲的够清晰了,我没必要狗尾续貂了。
如果上面一切正常,那么你研究下面的内容了,我们需要一个API,有一篇写的不错,关于restful APi的文章,如下
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
要完成一套的,我们必须要有一个中心,这个中心囊括一切可囊括的资源,监控,管理,日志上面的。通过这个中心,提供一个API可以让其他部分调取。。。
所以上面的代码,我们要修改回复的内容就是content变量对应的内容。
所以,在将salt,zabbix,elk部分在分别封装成模块以便导入,那么这个中心就差不多了,至少一部分差不多了我也没写完,而不成熟的zabbix那一部分其实在上一篇文章已经说过了,这里就不重复了~~~
后记:我说我我要写一个运维APP来着,但是那只是一个APP,我们要的应该是运维的一套,而这一套是基于一个中心的,这个中心我暂时认为是一个强大的API,通过这个API 我能够获取各个平台的聚合的资源,比如监控资源,日志资源,控制资源,权限资源等等。。。资源池的这个词真是太妙了,大的框架,大的项目总有资源池这样的一个概念,希望笔者后面能做成这个池子~~~有了这个池子,不管是做运维平台还是运维APP都是水到渠成的事了,好吧~~~~吹牛的一篇文章