个人微信公众号搭建Python实现 -个人公众号搭建-处理消息和事件(14.3.4)
@
1.消息处理
现在只处理text文本消息
没有关键字的就交给qingyunke机器人去应付,这是一个免费的对话api
从配置文件中读取关键字信息,如果存在某个关键字就返回对应的
返回的时候要传之前用户的信息,所以这里就直接把微信服务器发送过来的xml文件转为dict传过来
返回给用户信息时,如果是文字就不做处理的读取配置信息的内容
如果发现关键字对应的信息以pic_开头,说明返回的是图片(这里使用了切片)
import ReturnMessage
import json
from requests import request
def Processing(xml_dict,msg_type,SET):
if msg_type == "text":
return Text(xml_dict,SET)
else:
return Others(xml_dict)
def Text(xml_dict,SET):
Content = str.lower(xml_dict.get("Content"))
Copyright = SET["MAIN"]
#使用run启动,keyword.json对应着run的目录
with open(r\'../resource/KeyWord.json\', \'r\', encoding="utf-8") as f:
KeyWord = json.load(f)
if Content in KeyWord.keys():
if KeyWord[Content][0:4] == "pic_":
return ReturnMessage.ReturnPic(xml_dict,KeyWord[Content][4:])
else:
return ReturnMessage.ReturnText(xml_dict,Copyright +"\n\n"+ KeyWord[Content])
else:
url = "http://api.qingyunke.com/api.php?key=free&appid=0&msg=%s" % Content
rep = request("get", url)
msg_ = rep.content.decode()
dict = json.loads(msg_)
return ReturnMessage.ReturnText(xml_dict,dict["content"])
def Others(xml_dict):
return ReturnMessage.ReturnException(xml_dict)
2.事件处理
这里就只处理订阅事件,返回一个欢迎信息
import ReturnMessage
def Processing(xml_dict,Event):
if Event == "subscribe":
return Subscribe(xml_dict)
elif Event == "unsubscribe":
Unsubscribe(xml_dict)
else:
return Others(xml_dict)
def Subscribe(xml_dict):
return ReturnMessage.ReturnText(xml_dict,"欢迎订阅")
def Unsubscribe(xml_dict):
pass
def Others(xml_dict):
return ReturnMessage.ReturnException(xml_dict)
3.返回处理
一共有三个方法,一是返回自定义文字,二是返回固定文字,三是返回图片
这里都是查看的官方文档去构造的返回数据
将dict转化为xml返回给微信服务器
返回图片的时候,是返回图片的id(用永久素材的id)
import time
def ReturnText(xml_dict,text):
resp_dict = {
"xml":{
"ToUserName":xml_dict.get("FromUserName"),
"FromUserName":xml_dict.get("ToUserName"),
"CreateTime":int(time.time()),
"MsgType":"text",
"Content":text
}
}
return resp_dict
def ReturnException(xml_dict):
resp_dict = {
"xml":{
"ToUserName":xml_dict.get("FromUserName"),
"FromUserName":xml_dict.get("ToUserName"),
"CreateTime":int(time.time()),
"MsgType":"text",
"Content":"目前只支持文字类型"
}
}
return resp_dict
def ReturnPic(xml_dict,id):
resp_dict = {
"xml":{
"ToUserName":xml_dict.get("FromUserName"),
"FromUserName":xml_dict.get("ToUserName"),
"CreateTime":int(time.time()),
"MsgType":"image",
"Image":{"MediaId":id}
}
}
return resp_dict
关于作者
个人博客网站
个人GitHub地址
个人公众号: