在使用python一步一步搭建微信公衆平臺(二)中最後咱們留下了一個問題,就是單引號的content在render到xml中時,返回給用戶的信息會被轉碼,如‘<>&’會被轉爲<>&用戶在收到有<>&等內容的時候都會轉,很是難看,我查找了一些網頁,幾乎都是問若是將特殊符號轉爲轉義,而沒有說怎麼轉回來,最後看到說這個轉碼是由於在<![CDATA[]]> 在CDATA中的內容就是爲了不發生這種因爲特殊符號引發的問題,那麼咱們能夠把render的內容不要放在這個CDATA中,那麼以前的reply_text.xml就改成php
$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>
這樣之後特殊字符就是原樣的輸出了python
好了,接着此次的內容,此次我想添加一個當用戶關注後自動回覆一個歡迎信息與用戶回覆一個'm’後隨機的選一首歌給用戶聽。mysql
1. 關於「事件推送」的概念,事件推送是用戶的一些操做,若是關注你,取消關注你,點擊自定義等操做,如今微信支持subscribe(訂閱)、unsubscribe(取消訂閱)、CLICK(自定義菜單點擊事件)事件推送的post數據XML爲sql
<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)中,注意縮進微信公衆平臺
這樣,當一個新的用戶關注你後,這個微信公衆帳號將會自動回覆你代碼裏寫的replayTextdom
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),以後再取消息內容,而後再根據內容來設定特定的回覆內容,這樣咱們就能夠創建無限多「關鍵詞」,仍是比較簡單的。post
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一步一步搭建微信公衆平臺(二)----搭建一箇中英互譯的翻譯工具