最近忙国赛的一个项目,我得做一个微信公众号。功能就是调数据并回复给用户,需要用户发送给公众号一个关键词,通过关键词自动回复消息。
这时就是查询微信公众平台文档了,地址如下:文档
按照它的入门指南,我基本上了解了用户给公众号发送消息的一个机制,并且一旦给公众号发送消息,在开发者后台,会收到公众平台发送的一个xml,所以通过编写Python脚本进行xml的解析与自动发送功能。
如果用户给公众号发送一段文本消息,比如“你好”,那么后台就会收到一个xml为:
& lt; xml> & lt; ToUserName> & lt; ! [CDATA[公众号]]祝辞& lt;/ToUserName> & lt; FromUserName> & lt; ! [CDATA[粉丝号]]祝辞& lt;/FromUserName> & lt; CreateTime> 1460541339 & lt;/CreateTime> & lt; MsgType> & lt; ! [CDATA[文本]]祝辞& lt;/MsgType> & lt; Content> & lt; ! [CDATA[你好]]祝辞& lt;/Content> & lt;/xml> >之前注意这里面有一些标记对于我们开发者来说是非常有用的:ToUserName, FromUserName MsgType,内容
所以我们只要知道了这些信息,我们就能做到自动回复的功能。
我们发现这个MsgType为“文本”,而微信中的MsgType有“文本”(文本),“形象”(图像),“声音”(语音),“视频”(视频),“shortvideo”(短视频),“位置”(位置),“链接”(链接),“事件”(事件)
首先我们写一个main.py文件
main.py
# - * -编码:utf - 8 - * #文件名:main.py 导入web 从办理进口处理 url=( ‘/wx’,‘处理’, ) if __name__==癬_main__”: 应用=网络。应用程序(url,全局变量()) app.run ()然后写一个receive.py,作为接受用户发送过来的数据,并解析xml,返回数据的脚本。
receive.py
进口xml.etree。ElementTree在等 def parse_xml (web_data): 如果len (web_data)==0: 回来没有 xmlData=https://www.yisu.com/zixun/ET.fromstring (web_data) msg_type=xmlData.find (MsgType)。text 如果msg_type==拔谋尽? #打印(文本) 返回TextMsg (xmlData) elif msg_type==巴枷瘛? 返回ImageMsg (xmlData) elif msg_type==拔恢谩? #打印(位置) 返回LocationMsg (xmlData) elif msg_type==笆录? #打印(“事件”) 返回EventMsg (xmlData) 类事件(对象): def __init__(自我,xmlData): 自我。ToUserName=xmlData.find (ToUserName)。text 自我。FromUserName=xmlData.find (FromUserName)。text 自我。CreateTime=xmlData.find (CreateTime)。text 自我。MsgType=xmlData.find (MsgType)。text 自我。Eventkey=xmlData.find (Eventkey)。text 类味精(对象): def __init__(自我,xmlData): 自我。ToUserName=xmlData.find (ToUserName)。text 自我。FromUserName=xmlData.find (FromUserName)。text 自我。CreateTime=xmlData.find (CreateTime)。text 自我。MsgType=xmlData.find (MsgType)。text 自我。是否=xmlData.find(是否)。text 类TextMsg(味精): def __init__(自我,xmlData): 味精。__init__(自我,xmlData) 自我。内容=xmlData.find(“内容”).text.encode (“utf - 8”) 类ImageMsg(味精): def __init__(自我,xmlData): 味精。__init__(自我,xmlData) 自我。PicUrl=xmlData.find (PicUrl)。text 自我。MediaId=xmlData.find (MediaId)。text 类LocationMsg(味精): def __init__(自我,xmlData): 味精。__init__(自我,xmlData) 自我。Location_X=xmlData.find (Location_X)。text 自我。Location_Y=xmlData.find (Location_Y)。text 类EventMsg(味精): def __init__(自我,xmlData): 事件。__init__(自我,xmlData) 自我。事件=xmlData.find(“事件”)。text其中,我们使用xml.etree.ElementTree,这是一个简单而有效的用户解析和创建XML数据的API。而fromstring()就是解析XML的函数,然后通过标签进行找到(),即可得到标记内的内容。
同时还要写一个答复。py,作为自动返回数据的脚本。
刚才提到了,用户给公众号发送消息,公众号的后台会接收到一个xml,那么如果公众号给用户发送消息呢,其实也就是公众号给用户发送一个xml,只是ToUserName, FromUserName换了一下而已,内容自己定。& lt; xml> & lt; ToUserName> & lt; ! [CDATA[粉丝号]]祝辞& lt;/ToUserName> & lt; FromUserName> & lt; ! [CDATA[公众号]]祝辞& lt;/FromUserName> & lt; CreateTime> 1460541339 & lt;/CreateTime> & lt; MsgType> & lt; ! [CDATA[文本]]祝辞& lt;/MsgType> & lt; Content> & lt; ! [CDATA[测试]]祝辞& lt;/Content> & lt;/xml>python微信公众号之关键词自动回复