作者:JiawuZhang
出品:JiawuLab(ID:jiawulab)
實驗記錄系列是JiawuLab原創欄目,通過真實項目的操作,記錄整個實驗過程。
旨在通過一步步過程,無基礎的朋友都能直接上手。
大家好,我是JiawuZhang,本次實驗記錄的項目是——微信公眾號開發。
我的公眾號開發的第四篇文章,如果您沒看過前三篇文章,這裡是傳送門:
希望您多多關注。
上期回顧
首先對智能AI機器人進行優化,讓機器人更聰明。
然後通過pymysql庫,對MySQL數據庫進行了基礎操作學習。
最後通過改造代碼,實現了關鍵字回覆的功能並上線。
細心的你,可能會發現,粉絲每發一條信息,都會查詢一次數據庫,有些信息根本不需要查詢,同時對數據庫壓力太大,
而且最後截圖演示中,關鍵字回覆的不只是文字,是像卡片一樣的樣式,
本期,我將進行代碼再改造,讓數據庫輕鬆點,同時引入一個新的消息回覆類型-圖文回覆。
本期知識點
1、圖文消息回覆
2、數據庫輕鬆點
3、日誌功能
關鍵字回覆體驗
上期我們使用數據庫實現了關鍵字回覆的功能,不知道你有沒有試過,好不好用
反正我使用下來非常好用,可以在服務器不重新啟動的情況下,增加多組新的關鍵字
比如原先我設置的關鍵字,只有下面兩組,有朋友也測試過
然後我昨天將前三篇文章也加入進去,現在是這樣的
只需要回覆第一步、第二步、第三步,就能得到下面的回覆
是不是很方便呢,一旦有新的關鍵字需要增加,都可以馬上增加,你也可以上手試試看。
圖文消息回覆
大家從上面圖片可看到,我用到的是一種卡片型的回覆,不再是純文字的
這就是本期將要學到的一種新的類型——圖文消息回覆
官方文檔中也有提及這種類型,如下截圖:
消息管理-被動回覆用戶消息-回覆圖文消息,有對該類型進行表述
從截圖可以看到,圖文消息體,我們單獨拿出來研究一下
消息體分析:
MsgType的消息類型為news,一種新的類型,還記得前面我們分析消息回覆原理講到的嗎?
如果你不記得了,請查看——
我的公眾號開發(第二步)智能AI對接上面表格中寫明瞭,消息體的各項參數說明,我們從中可以得到如下結論
1、ArticleCount,我們是發送文本、圖文,所以只能回覆1條圖文消息,所以我們只能設置為1
2、發送圖文消息,我們需要有四條內容,分別是Title、Description、PicUrl、Url,對應著標題、描述、圖片地址、鏈接
所以需要按照上期文章——數據庫實現關鍵字回覆——來改造數據庫
綜合上述,本期需要解決兩個問題,才能實現圖文消息回覆,分別是新類型news和數據庫改造,我們來實現吧
新回覆類型news
當收到粉絲髮來的一條文本關鍵字,服務器根據關鍵字返回類型為news的圖文消息給粉絲
對於接收程序receive來說,還是文本消息,不用改造
我們需要改造的是回覆程序reply,增加新類型news,如下
這裡我說明一點:回覆程序從Handle程序傳遞參數content,這是一個包含標題、描述、圖片地址、鏈接的元組
所以需要在參數content的創建中,也按照這個順序來,否則會出現錯誤
完成了回覆程序reply的改造後,我們來對Handle程序中POST方法進行改造
本次更改很簡單,只需要將備註點前面的TextMsg改為NewsMsg即可
這樣就能調用圖文消息回覆,不過有個問題產生,mydb文件中mycontent()函數返回的並不是包含標題、描述、圖片地址、鏈接的元組
所以我們需要對mydb中的mycontent()函數進行改造
數據庫改造
改造mycontent()函數前,需要改造數據庫,
原先我們創建的數據表中,只有keyword和reply兩項內容
而圖文回覆需要五項內容,keyword、Title、Description、PicUrl、Url,所以我們需要重新創建一個數據表
創建數據表還記得嗎,我這裡將SQL語句給出來
後續操作按照上期文章介紹的執行即可,你可以動手試試
數據表有了,添加數據的兩種方式,
一是代碼添加,如下
二是使用mySQL可視化軟件直接添加,如下圖:
兩種方法各有優勢,你可以選擇自己合適的方式進行
關於圖片地址,我的方法是,先將圖片上傳到素材中,再將圖片地址複製出來
數據表有了,添加數據的方式也說了,我們進行代碼改造mycontent()函數
前面提到的,按照'標題'、'描述'、'圖片地址'、'鏈接'的順序返回data數據
保存文件後,重新啟動服務器,就可以實現圖文消息回覆了,你也動手試試看,是不是很有成就感。
讓數據庫輕鬆點
上期結尾處,我們提到,粉絲每發一條消息,都要查詢一次數據庫,而且本期又改造成了圖文回覆
查詢數據庫的次數和耗時,都有所增加,那我們應該怎麼減輕數據庫的壓力呢?
這裡我的方法是,將數據表中關鍵字全部提出來,然後先用粉絲的消息與關鍵字列表做判斷
如果在關鍵字列表中,再從數據庫中將'標題'、'描述'、'圖片地址'、'鏈接'等信息都取出來,發給粉絲
當然,如果你有更好的辦法,自己進行實現,也可以分享在留言處,讓大家都學習一下
這裡按照我的方法進行,在mydb文件中新建一個mykeyword函數
然後將mykeyword函數加到Handle類中
保存文件後,重啟服務器就好了,這樣數據庫會輕鬆點,同時因為有數據池的存在,多人同時消息回覆也能輕鬆解決。
日誌功能
前面三期,我們每保存完改造後的代碼,都是使用的python3 main.py 80進行服務器啟動
這會造成一個問題,當退出後,服務就不再繼續了,而且沒有日誌,不方便查看問題
所以本期,我們只用一條命令,就可以解決上述問題
我們在服務器命令行界面,先cd到main.py所在的文件夾
輸入這條命令:
nohup python3 main.py 80 > wx.log 2>&1 &
服務就啟動了,並且常駐在後臺運行,我們退出服務器,程序也會一直運行
然後將服務器的日誌保存在wx.log文件中
我們打開wx.log文件看看,命令是:
vi wx.log
就能查看到wx.log中的日誌信息了
裡面會根據你在程序中設置的print信息,以及各IP訪問你的服務器的信息,你可以試試
現在日誌功能有了,而且服務在後臺靜默運行,我們只要多增加相應的關鍵字回覆就好。
如果你有不明白的,請關注公眾號:
JiawuLab,給我留言,我會一一解答。下一步預告
本期我們新增圖文消息回覆,並且讓數據庫更輕鬆,最後也擁有了日誌功能。
現在已經擁有了很完整的功能,只需要日後根據運營情況,進行完善相關功能就行。
那下一步做什麼呢?還記得我們最開始選擇的開發基礎配置嗎?
對了,明文模式,也就是說,所有粉絲髮來的信息和我們回覆的消息,都是明文的
如果有人進行數據包攔截,不用解密,就能全部看到,這樣很危險。
所以下一步,我們將實現最重要,也是必須為安全著想的功能——消息加密。
本期記錄到此結束,感謝您的閱讀。如果您喜歡這期文章,請點贊,支持一下。
歡迎您關注公眾號:JiawuLab ,提前體驗完整功能,或者給我留言,說說你遇到的問題,我們一起探討。