国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > Python 微信公眾號(hào)開(kāi)發(fā)從0開(kāi)始避坑指南

Python 微信公眾號(hào)開(kāi)發(fā)從0開(kāi)始避坑指南

時(shí)間:2023-05-21 14:48:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-05-21 14:48:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

Python 微信公眾號(hào)開(kāi)發(fā)從0開(kāi)始避坑指南: 作為一個(gè) Python 愛(ài)好者,不把 Python 代碼和微信結(jié)合起來(lái)玩一玩,只能說(shuō)是自絕于時(shí)代。但自從騰訊對(duì)基于網(wǎng)頁(yè)版微信的微信自動(dòng)化狠下殺手后,我們就只能把眼光投向微信公眾號(hào)了。

從實(shí)踐上說(shuō),微信公眾號(hào)的開(kāi)發(fā)不過(guò)是一個(gè)應(yīng)用層面的苦力活,但實(shí)際操作時(shí),你會(huì)發(fā)現(xiàn)無(wú)數(shù)的深坑,尤其是那 print 后面還不帶 () 的古董級(jí)開(kāi)發(fā)文檔,簡(jiǎn)直令人發(fā)指。

希望這篇文章能夠幫助各位 hobbyist coder 節(jié)約寶貴的生命。

1. 微信公眾號(hào)申請(qǐng)

這部分省略。大約15分鐘,可以弄出一個(gè)無(wú)認(rèn)證的個(gè)人訂閱號(hào)。夠了。




2. 云服務(wù)器準(zhǔn)備

2.1 云服務(wù)器選擇

你的云服務(wù)器需要具備兩個(gè)條件:

(1)能跑 python,虛擬服務(wù)器一般就不行

(2)獨(dú)立 IP, 也就是說(shuō)要具備公網(wǎng)帶寬

經(jīng)過(guò)一番比較,考慮到最關(guān)鍵的一個(gè)因素—— 窮,最后我購(gòu)買(mǎi)了阿里云的乞丐版。一年大概90多塊錢(qián)。

云服務(wù)器的系統(tǒng)軟件配置,如果你選擇困難,建議操作系統(tǒng)選 CentOS,版本選 8。




歡迎加入云開(kāi)發(fā)大軍。




2.2 云服務(wù)器配置

服務(wù)器選擇 SSH 加證書(shū)的連接方式。根據(jù)網(wǎng)站的教程,準(zhǔn)備好軟件:

(1)Putty 用于 SSH 遠(yuǎn)程鏈接你的云服務(wù)器

(2)FileZilla 用于與你的云服務(wù)器下載上傳文件,相信我,這是最方便的選擇

配置好你的服務(wù)器,15分鐘后,服務(wù)器鏈接成功。







2.3 下載 Python3

非常簡(jiǎn)單:

sudo dnf install python3 pip 也會(huì)同時(shí)安裝,使用時(shí)記得加上3,像 python3,pip3 install 這樣。

幾個(gè)基本的庫(kù),web.py lxml python requests pillow等等,也要記得裝好,公眾號(hào)開(kāi)發(fā)文檔中有提到。




3. 連接微信公眾號(hào)與云服務(wù)器

3.0 文件傳輸確認(rèn)

在編輯文件前,首先確認(rèn)你的 FileZilla 的 SSH 文件傳送是否OK,進(jìn)入站點(diǎn)管理器做好設(shè)置。

當(dāng)然,如果你覺(jué)得直接在遠(yuǎn)程連接的客戶(hù)端上直接使用 Vim 編輯代碼毫無(wú)壓力可以忽略這一步。




3.1 云服務(wù)器上搭建簡(jiǎn)易網(wǎng)站應(yīng)用

[root@xxxxxxxxx~]# python3 main.py 80從開(kāi)發(fā)文檔中開(kāi)始抄代碼 main.py ,上傳至云服務(wù)器。在 Putty 中輸入上面的命令。其中的 “80” 指的是端口 80。執(zhí)行命令后,根據(jù)文檔指引,在瀏覽器打開(kāi)你的網(wǎng)址,可以看到:

hello, this is handle view確認(rèn)你的網(wǎng)站應(yīng)用搭建成功。




3.2 通過(guò) Token 驗(yàn)證云服務(wù)器

仔細(xì)的閱讀開(kāi)發(fā)文檔,稍微修改 main.py,記得刪除 main.py 中的 Handle 類(lèi)(這是一個(gè)小坑)。

然后創(chuàng)建、編輯 handle.py 這時(shí)你會(huì)迎來(lái)第一個(gè)巨坑。

list = [token, timestamp, nonce] list.sort() sha1 = hashlib.sha1() map(sha1.update, list) # <-- 巨坑1號(hào) hashcode = sha1.hexdigest() print "handle/GET func: hashcode, signature: ", hashcode, signature if hashcode == signature: return echostr else: return ""上述代碼中的這一句:

map(sha1.update, list)需要修改為:

sha1.update(list[0].encode('utf-8')) sha1.update(list[1].encode('utf-8')) sha1.update(list[2].encode('utf-8'))運(yùn)行:

[root@xxxxxxxxx~]# python3 main.py 80在公眾號(hào)的配置頁(yè)面點(diǎn)“提交”,然后點(diǎn)擊“啟動(dòng)”。




這里值得注意的是,此處的 Token 和后面要用到的 Access Token 不是一回事。新手不要搞混了。這里的 Token 只是用于驗(yàn)證你的開(kāi)發(fā)(云)服務(wù)器。




4. 代碼開(kāi)發(fā)的幾個(gè)心得

4.1 注意各種 python2 與 python3 的區(qū)別

一個(gè)一個(gè)錯(cuò)誤的修正,保持耐心、好奇和搜索的暢通




4.2 確保 IP 白名單

在實(shí)際的調(diào)試中,必須要確保你的 IP 在白名單中。這里的 IP 包括你自己本地 IP —— 如果你移動(dòng)著,那么這個(gè) IP 可能有很多個(gè),還包括你的云服務(wù)器 IP。雖然這是廢話(huà),但是也會(huì)成為一個(gè)坑。

IP 如何獲取呢?不用獲取。直接利用微信公眾號(hào)接口調(diào)試工具來(lái)調(diào)試。

如果不在白名單里,它會(huì)提示你 :

IP (xxx.xxx.xxx.xxx) is not in the whitelist這時(shí)把它提醒你的 IP 添加至白名單即可。




4.3 確保云服務(wù)器上程序的后臺(tái)運(yùn)行

每次通過(guò)以下的命令:

[root@xxxxxxxxx~]# python3 main.py 80啟動(dòng)你心愛(ài)的程序后,一旦 Putty 關(guān)閉,遠(yuǎn)程連接斷開(kāi)后,程序就會(huì)自動(dòng)停止。你說(shuō)這不是坑爹嗎?如果本地一直要開(kāi)著窗口,那還叫什么價(jià)值一百元的云計(jì)算?

所以在你確定程序已經(jīng)能夠順利運(yùn)行時(shí),你需要這樣一個(gè)處理:

[root@xxxxxxxxx~]# nohup python3 main.py 80 &運(yùn)行后,可以看到:

appending output to nohup.out表示你的程序已經(jīng)成功運(yùn)行在云服務(wù)器的后臺(tái)。如果日后你需要停止程序則需要使用:

ps -aux來(lái)查找到 python3 main.py 80 的 PID ,然后使用 kill PID 來(lái)刪除。關(guān)于 Linux 這一塊的操作,可以參考這篇文章來(lái)學(xué)習(xí)。




5. 處理消息

5.0 未認(rèn)證訂閱號(hào)可以處理臨時(shí)(即臨時(shí)上傳)素材嗎?

答案是可以,這也幾乎是未認(rèn)證訂閱號(hào)的處理極限了。除此以外,群發(fā)消息,自定義菜單,素材庫(kù)調(diào)用都不行。




5.1 圖片消息處理

終于迎來(lái)了具體的開(kāi)發(fā)。文本的處理非常簡(jiǎn)單,基本上照著開(kāi)發(fā)文檔碼字就可以了。配合網(wǎng)上一些免費(fèi)的 API 可以實(shí)現(xiàn)一些有(wu)趣(liao)的效果。







這里的一個(gè)巨坑是關(guān)于臨時(shí)圖片素材的處理。這里的關(guān)鍵是上傳圖片后,獲取 Media_Id。這個(gè)上傳操作需要通過(guò)

request.post 來(lái)實(shí)現(xiàn)。具體的操作可以參考以下過(guò)程

def get_id(img): #img is bytes-data _token = gt.get_token() _url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token=' + _token + '&type=image' #print('url=', _url) payload = { 'file':('upload.jpg', img, 'image/jpg') } m = MultipartEncoder(payload) headers = { 'Content-Type':m.content_type, 'other-keys':'other-values' } _id = requests.post(_url, headers=headers, data=m).json() print('post request returns:', _id) _id = _id['media_id'] #print(_id) return _id最后讓我們來(lái)一個(gè)綜合應(yīng)用。

【需求】用戶(hù)發(fā)送一張圖片給公眾號(hào),例如拍攝的一頁(yè)數(shù)學(xué)作業(yè),后臺(tái)通過(guò) OCR 處理后自動(dòng)批改,返回一張批改后的圖片。
就是如上圖這樣(令人捉急的正確率)。

處理的邏輯是:

具體代碼在:

說(shuō)了這么多,各位,來(lái)談?wù)勑捏w驗(yàn)一下吧!








關(guān)鍵詞:指南,公眾

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉