WeRoBot是最新的服務(wù)很多的開(kāi)發(fā)微信公眾號(hào)的一款基于Python的微信機(jī)器人框架,里面的功能也是非常的強(qiáng)大的,最新的版本更是新加以及修復(fù)了很多你需要的功能!
WeRoBot怎么用 使用說(shuō)明
首先看看怎么用
[python] view plain copy 在CODE上查看代碼片派生到我的代碼片
from .weixin import handler as HD
@HD.subscribe
def subscribe(xml):
return "welcome to brain"
@HD.unsubscribe
def subscribe(xml):
print "leave"
return "leave brain"
上面處理了關(guān)注和取關(guān)事件,通過(guò)裝飾器處理的還算透明。
處理文本消息,回復(fù)圖文消息如下:
[python] view plain copy 在CODE上查看代碼片派生到我的代碼片
@HD.text
def text(xml):
content = xml.Content
if content == "111":
return {"Title":"美女", "Description":"比基尼美女", "PicUrl":"http://9smv.com/static/mm/uploads/150411/2-150411115450247.jpg", "Url":"http://9smv.com/beauty/list?category=5"}
elif content == "222":
return [
["比基尼美女", "比基尼美女", "http://9smv.com/static/mm/uploads/150411/2-150411115450247.jpg", "http://9smv.com/beauty/list?category=5"],
["長(zhǎng)腿美女", "長(zhǎng)腿美女", "http://9smv.com/static/mm/uploads/150506/2-150506111A9648.jpg", "http://9smv.com/beauty/list?category=8"]
]
elif content == "push":
Helper.send_text_message(xml.FromUserName, "推送消息測(cè)試")
return "push ok"
return "hello world"
如何文本是111或222,我們回復(fù)圖文消息,如何使push,我們使用客服接口推送消息,其它返回“hello world"
一般我們會(huì)使用oauth網(wǎng)頁(yè)授權(quán)獲取用戶的openid,如果是多個(gè)鏈接都需要通過(guò)oauth處理,代碼會(huì)很難看,通過(guò)裝飾器可以很好的處理這個(gè)問(wèn)題。
[python] view plain copy 在CODE上查看代碼片派生到我的代碼片
def sns_userinfo_callback(callback=None):
"""網(wǎng)頁(yè)授權(quán)獲取用戶信息裝飾器
callback(openid, userinfo):
return user
"""
def wrap(func):
@wraps(func)
def inner(*args, **kwargs):
request = args[0] #django第一個(gè)參數(shù)request
openid = request.COOKIES.get('openid')
userinfo = None
if not openid:
code = request.GET.get("code")
if not code:
current = "http://"+ request.get_host() + request.get_full_path()
return redirect(WeixinHelper.oauth2(current))
else:
data = json.loads(WeixinHelper.getAccessTokenByCode(code))
access_token, openid, refresh_token = data["access_token"], data["openid"], data["refresh_token"]
#WeixinHelper.refreshAccessToken(refresh_token)
userinfo = json.loads(WeixinHelper.getSnsapiUserInfo(access_token, openid))
else:
ok, openid = Helper.check_cookie(openid)
if not ok:
return redirect("/")
request.openid = openid
if callable(callback):
request.user = callback(openid, userinfo)
response = func(request)
return response
return inner
return wrap
sns_userinfo = sns_userinfo_callback()
在所有需要用戶openid的函數(shù)前使用sns_userinfo裝飾器就可以了,callback函數(shù)接收openid,userinfo,返回用戶實(shí)例,這樣
就可以使用request.user獲取當(dāng)前用戶
[python] view plain copy 在CODE上查看代碼片派生到我的代碼片
@sns_userinfo
def oauth(request):
"""網(wǎng)頁(yè)授權(quán)獲取用戶信息"""
resp = HttpResponse(request.openid)
resp.set_cookie("openid", Helper.sign_cookie(request.openid))
return resp
使用oauth需要保存cookie,不然每次用戶請(qǐng)求都需要授權(quán),需要走一遍完整的oauth流程,拖慢整體響應(yīng)。
WeRoBot 中文版更新日志
增加對(duì)消息加解密的支持
重寫(xiě) werobot.messages, 完善對(duì) Event 的支持
將微信消息的 id 屬性重命名為 message_id
增加 werobot.reply.SuccessReply
增加 werobot.reply.ImageReply
增加 werobot.reply.VoiceReply
增加 werobot.reply.VideoReply
刪除 werobot.reply.create_reply()
為 werobot.reply.WeChatReply 增加 process_args 方法
為 werobot.robot.BaseRoBot 增加 parse_message 方法
為 werobot.robot.BaseRoBot 增加 get_encrypted_reply 方法
刪去了 Reply 中過(guò)時(shí)的 flag
修復(fù) werobot.session.filestorage.FileStorage 在 PyPy 下的兼容性問(wèn)題
增加 werobot.session.sqlitestorage.SQLiteStorage
將默認(rèn)的 SessionBackend 切換為 werobot.session.sqlitestorage.SQLiteStorage
將圖文消息單個(gè)消息的渲染函數(shù)放到 werobot.replies.Article 內(nèi)
取消對(duì) Python2.6, Python3.3 的支持
增加與 Django 1.6+, Flask, Bottle, Tornado 集成的支持
替換 inspect.getargspec()
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版