微信公衆號配置
網上大部分都是用itchat插件。微信公衆號官網上的代碼複製下來格式會亂掉。對於python這樣嚴格依賴格式的語言簡直是噩夢。這裏沒有使用itchat,而是使用request直接post請求圖靈api
後臺配置
Python配置
[官方文檔]
安裝依賴庫:
1、[Python2.7] python3版本的web.py有一些bug,無法使用。安裝完以後配置環境變量。用pip安裝依賴庫
pip install web.py
pip install hashlib
pip install time
pip install requests
主入口:Main.py
# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle #引入Handle.py模塊,這個模塊在之後寫。urls = (
'/wx', 'Handle',
)if __name__ == '__main__':
app = web.application(urls, globals())
app.run()
處理文件:Handle.py
# -*- coding=utf-8 -*-
import hashlib
import reply
import receive
import web
import robot #robot.py在之後寫即可
class Handle(object):
def GET(self):
try:
data = web.input()
if len(data) == 0:
return "hello, this is handle view"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = "微信公衆號上的token值"list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
map(sha1.update, list)
hashcode = sha1.hexdigest()
if hashcode == signature:
return echostr
else:
return ""
except Exception as Argument:
return Argument
def POST(self):
try:
webData = web.data()
print("Handle Post webdata is ", webData)
recMsg=receive.parse_xml(webData)
if isinstance(recMsg, receive.Msg):
toUser = recMsg.FromUserName
fromUser = recMsg.ToUserName
if recMsg.MsgType=='text':
content = recMsg.Content
rpyMsg= robot.get_response(content)
print rpyMsg
replyMsg = reply.TextMsg(toUser, fromUser,rpyMsg)
return replyMsg.send()
if recMsg.MsgType == 'image':
mediaId = recMsg.MediaId
replyMsg = reply.ImageMsg(toUser, fromUser, mediaId)
return replyMsg.send()
else:
print("none handler yet")
return "success"
except Exception as Argument:
print Argment
return "fail"
回覆接口:reply.py
# -*- coding=utf-8 -*-
import time
class Msg(object):
def __init__(self):
pass
def send(self):
return "success"
class TextMsg(Msg):
def __init__(self, toUserName, fromUserName, content):
self.__dict = dict()
self.__dict['ToUserName'] = toUserName
self.__dict['FromUserName'] = fromUserName
self.__dict['CreateTime'] = int(time.time())
self.__dict['Content'] = content
def send(self):
XmlForm = """
<xml>
<ToUserName><![CDATA[{ToUserName}]]></ToUserName>
<FromUserName><![CDATA[{FromUserName}]]></FromUserName>
<CreateTime>{CreateTime}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{Content}]]></Content>
</xml>
"""
return XmlForm.format(**self.__dict)
class ImageMsg(Msg):
def __init__(self, toUserName, fromUserName, mediaId):
self.__dict = dict()
self.__dict['ToUserName'] = toUserName
self.__dict['FromUserName'] = fromUserName
self.__dict['CreateTime'] = int(time.time())
self.__dict['MediaId'] = mediaId
def send(self):
XmlForm = """
<xml>
<ToUserName><![CDATA[{ToUserName}]]></ToUserName>
<FromUserName><![CDATA[{FromUserName}]]></FromUserName>
<CreateTime>{CreateTime}</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[{MediaId}]]></MediaId>
</Image>
</xml>
"""
return XmlForm.format(**self.__dict)
註冊免費的小機器人
在[圖靈機器人官網](http://www.tuling123.com)註冊自己的小機器人,並記住你的apikey
請求圖靈機器人api接口:robot.py
# -*- coding=utf-8 -*-
import requestsKEY = "圖靈機器人官網的apikey"
def get_response(msg):
apiUrl = 'http://www.tuling123.com/openapi/api'
data = {
'key' : KEY,
'info' : msg,
'userid' : '機器人名',
}
try:
r = requests.post(apiUrl, data=data).json()
return r.get('text').encode("utf-8")
except:
return msg
return msg
最後,運行主入口
python main.py
效果測試:
個人微信公衆號: