文档章节

使用python一步一步搭建微信公众平台(三)----添加用户关注后的欢迎信息与听音乐功能

Kevin_Yang
 Kevin_Yang
发布于 2014/01/31 17:12
字数 1549
阅读 28659
收藏 219

在使用python一步一步搭建微信公众平台(二)中最后我们留下了一个问题,就是单引号的content在render到xml中时,返回给用户的信息会被转码,如‘<>&’会被转为&lt;&gt;&amp;用户在收到有<>&等内容的时候都会转,非常难看,我查找了一些网页,几乎都是问如果将特殊符号转为转义,而没有说怎么转回来,最后看到说这个转码是因为在<![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)中,注意缩进

微博桌面截图_20140131151658

这样,当一个新的用户关注你后,这个微信公众账号将会自动回复你代码里写的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)


help

能过上面的两个例子已经基本上理解微信的回复走的两步,先判断消息类型(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() 随机取列表里的一个项返回给用户

music2

这样当用户输入m 后将随机挑选一首歌返回给用户

1391191607

4. 回复中还有一个是图文回复,后面的教程我想通过搭建一个豆瓣图书的查询工具来利用这个图文回复xml

回顾之前的文章

使用python一步一步搭建微信公众平台(一)

使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具

使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复

使用python一步一步搭建微信公众平台(五)----使用mysql服务来记录用户的反馈


© 著作权归作者所有

共有 人打赏支持
Kevin_Yang
粉丝 248
博文 34
码字总数 34570
作品 0
通州
加载中

评论(29)

T
Tenderzhe
博主您好 我想问一下 本来前两个功能已经实现 但是接着第三个出了问题导致前两个功能也不能正常展示 有什莫办法能让它们互不影响吗 Python初学者 跪求博主帮助
header
header
我打开链接时提示internal server error,,,怎么弄呀
Spell-Bound
Spell-Bound
博主还在吗?我都是按照博主的代码敲上去的,可是为什么关注了后什么都没有呢?博主能回复下我吗?
石梦杰
石梦杰

引用来自“焖墩儿”的评论

调试音乐功能时,报错
File "/usr/local/sae/python/lib/python2.7/site-packages/web/template.py", line 911, in compile_template
compiled_code = compile(code, filename, 'exec')
File "/data1/www/htdocs/196/hexie335/1/templates/reply_music.xml", line 2
def __template__ (toUser,fromUser,createTime,musicTitle,musicDes,musicURL)<xml>:
^
SyntaxError: invalid syntax yq26

请问如何解决啊?
我也遇到这个问题,但那是那个下标是指向createTime 请问你后来解决了没有啊
石梦杰
石梦杰
TypeError: __template__() takes exactly 6 arguments (5 given) yq34 这个报错是什么问题呢
丫头-2015
丫头-2015
开始时,不管是关注还是取消关注,都没有收到信息,debug也没有错误信息
后来发现是模板文件没对应,模板对应之后,关注已经有收到关注的信息了,但是取消关注一直收不到,还有,取消关注,公众号就不在我的通讯录里了,这个取消关注的话术,在哪接收?没搞明白……请指点迷津!


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)
xunger007
xunger007

引用来自“xunger007”的评论

请问 BCS里的音乐的URL是怎么获取到的呢?谢谢

看到了,谢谢
xunger007
xunger007
请问 BCS里的音乐的URL是怎么获取到的呢?谢谢
Khalil_Leo
Khalil_Leo

引用来自“Khalil_Leo”的评论

博主您好,我按照您的文章加入了欢迎的代码,但是测试的时候始终没有欢迎信息回复,我在模板文件夹加入了reply_event.xml,还是不管用。请问我是哪里出了问题呢?

引用来自“Kevin_Yang”的评论

看下ERROR LOG信息,如果代码都和我一样的话可能是缩进问题,直接复制粘贴很容易产生缩进问题
检查了还是不好使。。请问error log能在哪看呢
Kevin_Yang
Kevin_Yang

引用来自“Khalil_Leo”的评论

博主您好,我按照您的文章加入了欢迎的代码,但是测试的时候始终没有欢迎信息回复,我在模板文件夹加入了reply_event.xml,还是不管用。请问我是哪里出了问题呢?
看下ERROR LOG信息,如果代码都和我一样的话可能是缩进问题,直接复制粘贴很容易产生缩进问题
使用python一步一步搭建微信公众平台(五)----使用mysql服务来记录用户的反馈

经过前几篇教程的学习,相信你对于微信的操作与SAE和webpy都有了些了解,那么这次我想加一个功能,通过mysql来记录用户的反馈,如用户输入fk+内容,然后通过一个页面来显示,最终的效果如下 ...

Kevin_Yang
2014/02/14
0
20
使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具

距离上次写使用python一步一步搭建微信公众平台(一)已经有几个月了,当中自已也搭建了一个中英文互译的小应用,可是由于英文翻中文好弄,中文翻译成英文一直有问题,知道是编码的问题,但是...

Kevin_Yang
2014/01/19
0
39
使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复

通过前三篇的教程,相信大家基本上了解了微信开发的基本流程,先判断用户传入数据的类型MsgType,然后再获取用户输入的内容content,再对content进行处理,再返回给用户 现在我们来加点料,在...

Kevin_Yang
2014/02/09
0
21
一大波编程视频资料赠送(亲自整理)

为了感恩大家长久以来的关注和支持,小编准备了一些福利,整理了包含前端,Java,产品经理,微信小程序,Python,网站源码,Android应用视频教程,微信公众平台开发教程及材料等资源合集大放...

祈澈姑娘
05/08
0
0
chromium浏览器开发系列第一篇:如何获取最新chromium源码

背景: 最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧。于是乎,本文顺理成章。由于有些细节必需描述清楚,所以这次先讲如何...

ghost045
2015/03/25
0
10

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部