我的公眾號開發(第四步)圖文消息回覆

我的公眾號開發(第四步)圖文消息回覆

作者:JiawuZhang

出品:JiawuLab(ID:jiawulab)

實驗記錄系列是JiawuLab原創欄目,通過真實項目的操作,記錄整個實驗過程。

旨在通過一步步過程,無基礎的朋友都能直接上手。

大家好,我是JiawuZhang,本次實驗記錄的項目是——微信公眾號開發。

我的公眾號開發的第四篇文章,如果您沒看過前三篇文章,這裡是傳送門:

我的公眾號開發(第一步)簡單功能實現

我的公眾號開發(第二步)智能AI對接

我的公眾號開發(第三步)數據庫實現關鍵字回覆

希望您多多關注。

上期回顧

首先對智能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

,提前體驗完整功能,或者給我留言,說說你遇到的問題,我們一起探討。

我的公眾號開發(第四步)圖文消息回覆


分享到:


相關文章: