用 Python 和 werobot 框架开发公众号
?
From:用 Python 和 werobot 框架開發公眾號:https://www.jianshu.com/p/a517746a900f
?
WeRoBot?官方文檔?:https://werobot.readthedocs.io/zh_CN/latest/
Github :https://github.com/offu/WeRoBot
Python — WeRobot(微信公眾號開發):https://www.cnblogs.com/cxys85/p/10270277.html
?
?
安裝
?
推薦使用 pip 進行安裝:pip install werobot
?
簡單示例?Hello world
一個非常簡單的 Hello World 微信公眾號,會對收到的所有文本消息回復 Hello World
import werobotrobot = werobot.WeRoBot(token='tokenhere')@robot.text def hello_world():return 'Hello World!'robot.run()?
?
微信官方文檔
?
官方文檔地址:https://developers.weixin.qq.com/doc/
?
公眾號測試賬號,擁有所有權限:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
全局返回碼說明,可以根據返回碼信息調試接口,排查錯誤:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Global_Return_Code.html
?
?
用 Python 和 werobot 框架開發公眾號
?
自用的公眾號,由于權限少只有最簡單的功能:匹配關鍵字,回復文字、音樂、圖文
最終的效果圖:
?
完整代碼:
# coding:utf-8 # Filename:return_message5.py # 被關注回復'Hello World!' # 收到 笑話 回復糗百笑話,收到收到 電影 回復電影天堂最新電影, # 收到 blog 回復我的簡書博客,收到 音樂 回復一首音樂 # 收到 fight 回復一句話from werobot import WeRoBot import random from werobot.replies import ArticlesReply, Articlerobot = WeRoBot(token='your_token')# 明文模式不需要下面三項 # robot.config["APP_ID"]='' # robot.config["APP_SECRET"]='' # robot.config['ENCODING_AES_KEY'] = ''# 被關注 @robot.subscribe def subscribe(message):return '''Hello World! And nice to meet you. :) '''# 讀取文檔里的笑話,把前三行存在 data2 里,字符串太長公眾號會報錯 def joke_data():filename = 'qiushibaike.txt'f = open(filename, 'r')data = f.read()f.close()data1 = data.split()data2 = ''for data_i in data1[0:3]:data2 += data_i + '\n' + '\n'return data2# 讀取文檔里的電影名稱 def movie_name():filename = 'movies_name.txt'f = open(filename, 'r')data = f.read()f.close()return data# 從三首音樂里隨機選一首 def music_data():music_list = [['童話鎮', '陳一發兒', 'https://e.coka.la/wlae62.mp3', 'https://e.coka.la/wlae62.mp3'],['都選C', '縫紉機樂隊', 'https://files.catbox.moe/duefwe.mp3', 'https://files.catbox.moe/duefwe.mp3'],['精彩才剛剛開始', '易烊千璽', 'https://e.coka.la/PdqQMY.mp3', 'https://e.coka.la/PdqQMY.mp3']]num = random.randint(0, 2)return music_list[num]# 讀取 fight.txt 里的句子,隨機返回一句 def get_fighttxt():filename = 'fight.txt'f = open(filename, 'r')data = f.read()f.close()data1 = data.split()max_num = len(data1) - 1num = random.randint(0, max_num)data2 = data1[num]return data2# 匹配 笑話 回復糗百笑話 @robot.filter('笑話') def joke(message):data = joke_data()return data# 如果用 # @robot.text # def joke(message): # if message.content == "笑話": # 會報錯 # UnicodeWarning: Unicode equal comparison failed to # convert both arguments to Unicode - interpreting them as being unequal# 匹配 電影 回復電影名稱 @robot.filter('電影') def movie(message):name = movie_name()return name# blog 回復個人博客 @robot.filter('blog') def blog(message):reply = ArticlesReply(message=message)article = Article(title="v1coder",description="我的個人博客",img="https://upload.jianshu.io/users/upload_avatars/9691564/d4404291-308a-4159-b324-4ae400d8c977.png",url="https://www.jianshu.com/u/7cb04d09491e")reply.add_article(article)return reply# 匹配 音樂 回復一首歌 @robot.filter('音樂') def music(message):music1 = music_data()return music1# 匹配 fight 回復一句話 @robot.filter('fight') def fight(message):data = get_fighttxt()return data# 文本消息返回原文 @robot.text def echo(message):return message.content# 其他消息返回 @robot.handler def hello(message):return '(O_o)??'robot.config['HOST'] = '0.0.0.0' robot.config['PORT'] = 80 robot.run()?
?
分步講解:
公眾號分為企業號、服務號和訂閱號,我們這里用訂閱號,適用于個人,注冊訂閱號和購買服務器的過程不再贅述。
?
1.驗證服務器
?
在公眾號后臺配置服務器
?
填入自己的服務器地址(URL)和Token:
服務器地址可以是IP,也可以是域名,但必須以http://或https://開頭,分別支持80端口和443端口。
Token隨便填,一會代碼里用得到。
選擇明文模式,先不提交。
?
服務器上部署代碼
先安裝werobot:
pip install WeRoBot創建 hello_world.py,代碼如下:
#coding:utf-8 # Filename:hello_world.py # 驗證服務器,并且收到的所有消息都回復'Hello World!'import werobotrobot = werobot.WeRoBot(token='your token')# @robot.handler 處理所有消息 @robot.handler def hello(message):return 'Hello World!'# 讓服務器監聽在 0.0.0.0:80 robot.config['HOST'] = '0.0.0.0' robot.config['PORT'] = 80 robot.run()'your token' 處填你的Token,然后運行
python hello_world.py返回公眾號的基本配置頁面,點擊提交,如果沒有報錯就驗證成功了,最后點擊“啟用配置”
?
2.處理文本消息
?
# @robot.text 只處理文本消息 @robot.text def echo(message):return '111'?
3.匹配文本的兩種方式
?
# 第一種方式 @robot.text def joke(message):if message.content == "joke": # 如果把"joke"換成"笑話"就會報錯,這種方式不能匹配中文# 第二種方式 @robot.filter('笑話') def joke(message): # 用 @robot.filter() 可以匹配中文?
4.讀取本地文檔
?
# 以只讀的方式,讀取同目錄文檔 movies_name.txt 的內容 filename = 'movies_name.txt' f = open(filename, 'r') data = f.read() f.close() return data?
5.回復圖文消息
?
# blog 回復個人博客 from werobot.replies import ArticlesReply, Article @robot.filter('blog') def blog(message):reply = ArticlesReply(message=message)article = Article(title="v1coder", #標題description="我的個人博客", #簡介img="https://*****.png", #圖片鏈接url="https://www.jianshu.com/u/7cb04d09491e" #點擊圖片后跳轉鏈接)reply.add_article(article)return reply?
6.回復音樂
?
# 匹配 音樂 回復一首歌 @robot.filter('音樂') def music(message):# 返回一個長度為四的列表return ['都選C','縫紉機樂隊','https://files.catbox.moe/duefwe.mp3','https://files.catbox.moe/duefwe.mp3']分布講解完畢。
?
最后:
結束當前代碼運行:Ctrl + C
使程序在Linux下后臺運行 (關掉終端繼續讓程序運行)的方法:
輸入命令: nohup 你的shell命令 & 回車,使終端回到shell命令行停止程序在 Linux 后臺運行的方法:
ps x # 顯示所有進程kill 進程號 # 結束進程?
?
?
總結
以上是生活随笔為你收集整理的用 Python 和 werobot 框架开发公众号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C 和 C++ 文件操作详解
- 下一篇: 编译和使用APUE的源码