文档章节

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

Kevin_Yang
 Kevin_Yang
发布于 2014/01/31 17:12
字数 1549
阅读 29155
收藏 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
粉丝 253
博文 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
微信公众平台完整开发教程(系列教程)每天更新一章(详情看目录)想让继续更新的留个言

微信已然成了一种生活方式:群聊、语音、视频,照片/视频/位置共享,支付和商店有了,还能通过公众账号来获取各种资源……如今的微信就是在日中天的状态(最新估值已达 600 亿),公众平台带...

MIANMIANLIFE
2015/12/17
3.5K
3

没有更多内容

加载失败,请刷新页面

加载更多

Kafka+Flink 实现准实时异常检测系统

1.背景介绍 异常检测可以定义为“基于行动者(人或机器)的行为是否正常作出决策”,这项技术可以应用于非常多的行业中,比如金融场景中做交易检测、贷款检测;工业场景中做生产线预警;安防...

架构师springboot
23分钟前
3
0
DecimalFormat 类基本使用

/* * DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度 * 0 表示如果位数不足则以 0 填充 * # 表示只要有可能就把数字拉上这个位置 * */ public static void main(String[] args){...

嘴角轻扬30
40分钟前
3
0
This APT has Super Cow Powers.

在Debian/Ubuntu上,apt包管理器内嵌着一个彩蛋. 如果你在命令行界面输入 apt help 在最后一行能找到This APT has Super Cow Powers. 说明该apt具有超级牛力 牛力是个什么梗? 则说明你的系统...

taadis
57分钟前
2
0
起薪2万的爬虫工程师,Python需要学到什么程度才可以就业?

爬虫工程师的的薪资为20K起,当然,因为大数据,薪资也将一路上扬。那么,Python需要学到什么程度呢?今天我们来看看3位前辈的回答。 1、前段时间快要毕业,而我又不想找自己的老本行Java开发...

糖宝lsh
今天
9
0
携手开发者共建云生态 首届腾讯云+社区开发者大会在京举办

本文由云+社区发表 北京时间12月15日,由腾讯云主办,极客邦科技、微信、腾讯TEG协办的首届腾讯云+社区开发者大会在北京朝阳悠唐皇冠假日酒店举办。在会上,腾讯云发布了重磅产品开发者平台以...

腾讯云加社区
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部