知识点
相关文章
更多最近更新
更多荐 使用python一步一步搭建微信公众平台(三)----添加用户关注后的欢迎信息与听音乐功能
2019-03-02 00:05|来源: 网路
在使用python一步一步搭建微信公众平台(二)中最后我们留下了一个问题,就是单引号的content在render到xml中时,返回给用户的信息会被转码,如‘<>&’会被转为<>&用户在收到有<>&等内容的时候都会转,非常难看,我查找了一些网页,几乎都是问如果将特殊符号转为转义,而没有说怎么转回来,最后看到说这个转码是因为在<![CDATA[]]> 在CDATA中的内容就是为了避免发生这种由于特殊符号引起的问题,那么我们可以把render的内容不要放在这个CDATA中,那么之前的reply_text.xml就改为
$def with (toUser,fromUser,createTime,content) <xml> <ToUserName><![CDATA[$toUser]]></ToUserName> <FromUserName><![CDATA[$fromUser]]></FromUserName> <CreateTime>$createTime</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content>$content</Content> </xml>
这样以后特殊字符就是原样的输出了
好了,接着这次的内容,这次我想添加一个当用户关注后自动回复一个欢迎信息与用户回复一个'm’后随机的选一首歌给用户听。
1. 关于“事件推送”的概念,事件推送是用户的一些操作,如果关注你,取消关注你,点击自定义等操作,现在微信支持subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件)事件推送的post数据XML为
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[EVENT]]></Event> <EventKey><![CDATA[EVENTKEY]]></EventKey> </xml>
其MsgType为event,Event为subscribe(订阅)、unsubscribe(取消订阅)、CLICK,那么我们就可以通过先判断MsgType,然后再取得Event内容
if mstype == "event": mscontent = xml.find("Event").text if mscontent == "subscribe": replayText = u'''欢迎关注本微信,这个微信是本人业余爱好所建立,也是想一边学习Python一边玩的东西,现在还没有什么功能,只是弄了个翻译与豆瓣图书查询的小工具,你们有什么好的文章也欢迎反馈给我,我会不定期的分享给大家,输入help查看操作指令''' return self.render.reply_text(fromUser,toUser,int(time.time()),replayText) if mscontent == "unsubscribe": replayText = u'我现在功能还很简单,知道满足不了您的需求,但是我会慢慢改进,欢迎您以后再来' return self.render.reply_text(fromUser,toUser,int(time.time()),replayText)
将上面的代码放在weixinInterface.py的def POST(self)中,注意缩进
这样,当一个新的用户关注你后,这个微信公众账号将会自动回复你代码里写的replayText
2.既然我们在自动回复中提到了输入help来查看帮助内容,那么我们就接着写当用户输入help后返回的内容,这里就扯到另外一个概念,“关键字”回复,如果不是在开发者模式,公共账号可以自已定义的关键词有限,关键词就是用户输入了某些特别的词,相当于操作指令,微信会根据这些关键词返回的相应的内容。但是在开发者模式下,开发者几乎可以定义无限个,看你代码里怎么写了。同时,当用户发送help指令时,其MsgType为’text’,
if mstype == 'text': content=xml.find("Content").text if content == 'help': replayText = u'''1.输入中文或者英文返回对应的英中翻译\n2.输入 book 要查询的书名 返回豆瓣图书中结果\n3.输入cls清除查询记录\n4.输入m随机来首音乐听,建议在wifi下听\n5.输入python 进入python常用模块用法查询(未完成)''' return self.render.reply_text(fromUser,toUser,int(time.time()),replayText)
能过上面的两个例子已经基本上理解微信的回复走的两步,先判断消息类型(MsgType),之后再取消息内容,然后再根据内容来设定特定的回复内容,这样我们就可以建立无限多“关键词”,还是比较简单的。
3.我的help指令中有提到输入m 来随机听一首音乐,那么我们接下来搞一搞。
微信的回复消息有以下几种,回复文本消息 ;回复音乐消息 ;回复图文消息 其实只要按照官方的文档写xml,也挺简单的,音乐消息的xml为,我们根据官方文档,新建一个reply_music.xml,写入
$def with (toUser,fromUser,createTime,musicTitle,musicDes,musicURL)<xml> <ToUserName><![CDATA[$toUser]]></ToUserName> <FromUserName><![CDATA[$fromUser]]></FromUserName> <CreateTime>$createTime</CreateTime> <MsgType><![CDATA[music]]></MsgType> <Music> <Title><![CDATA[$musicTitle]]></Title> <Description><![CDATA[$musicDes]]></Description> <MusicUrl><![CDATA[$musicURL]]></MusicUrl> <HQMusicUrl><![CDATA[$musicURL]]></HQMusicUrl> </Music> <FuncFlag>0</FuncFlag></xml>
基中只要确定MusicUrl最重要,所以接下来,你需要四处搜索音乐文件,但这里建议你用自已的云存储,因为网上的音乐链接要么防盗链,要么过段时间就失效了,很影响用户体验,这里推荐使用百度的云存储BCS,具体的不在这写了,读者可以自已到上面查一查,我们只是将喜欢的音乐放到上面去,然后得到音乐的url即可,bcs注意不要设置为私有,要么微信也读不出来,这里我上传了12首,我是建立了一个以音乐url,歌名,描述为列表的列表musicList = [[url,name,des],[url,name,des],[url,name,des]]
然后引用random模块,使用random.choice() 随机取列表里的一个项返回给用户
这样当用户输入m 后将随机挑选一首歌返回给用户
4. 回复中还有一个是图文回复,后面的教程我想通过搭建一个豆瓣图书的查询工具来利用这个图文回复xml
回顾之前的文章
使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具
使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复
使用python一步一步搭建微信公众平台(五)----使用mysql服务来记录用户的反馈
转自:http://my.oschina.net/yangyanxing/blog/196956
相关问答
更多-
少儿编程的培训机构有很多,为什么身边的同事、朋友推 荐的都是核桃编程?[2022-03-11]
上课后感觉不怎么样,前面就是几十块钱进去后面就是各种推销年课,价格又高,还打电话骚扰 -
#渭南师范学院#在渭师院学的教育学,出来想去教育培训机构,大家有什么好的能不能推[2023-06-28]
生理学和心理学了解运用如何?去什么地方不重要,重要的是能够运用到您的专业,来奠定你的职业方向!从事教学工作还是教务管理工作。 -
贵阳室内设计培训哪里设计的最好,[2022-04-06]
你去贵阳艺龙居室内设计学校啊,哪里就包就业,而且在哪学过的学员都很厉害,在装修行列中都很出名,还有小班教学,白天工作,晚上也可以来学,这是我的回答,希望能帮助你。 -
金华省考面试培训班,想报个班,及荐下?[2023-02-26]
我建议选择培训班的时候一定要选择业内口碑最好的机构,这样才能顺利通过公务员考试。随着现在公务员考试的持续升温,选择好的培训机构尤为重要,汇金大厦14楼的中青不错哦有空可以去看看 -
微信公众号第三方音乐平台是怎么弄的啊?求教程[2022-06-12]
公众号开发啊,写个程序就可以了,不会就很难了,教程就是学程序,不清楚再问我 -
谁荐个基于redis秒杀系统的源码,推荐的都有分[2022-02-18]
秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘、异步处理而不是同步处理、分布式处理 用上这三招,不论秒杀时负载多大,都能轻松应对。更好的是,Redis能够满足上述 -
注册微信卡在这一步 怎么办?[2022-05-14]
检查下填写的手机号是否有误,如果有误则需要重新修改,如果还是没有建议重新开机 -
微信公众平台服务号,同步关注人的微信信息到第三平台或者数据库[2022-01-06]
刚刚看错了 这个在原理上是可以实现的 但是电话号码除外 这个需要关注的人自己提供给公众号才行