python微信公众号之关键词自动回复

  

最近忙国赛的一个项目,我得做一个微信公众号。功能就是调数据并回复给用户,需要用户发送给公众号一个关键词,通过关键词自动回复消息。

  

这时就是查询微信公众平台文档了,地址如下:文档

  

按照它的入门指南,我基本上了解了用户给公众号发送消息的一个机制,并且一旦给公众号发送消息,在开发者后台,会收到公众平台发送的一个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微信公众号之关键词自动回复