目录
一、准备
二、开始
三、全部代码
四、总结
需要bs4库、requests库、time库(python自带)、wxauto库。
如果没有的话请用pip安装。
在本示例中,使用的是wxauto,所以只能识别桌面上显示的微信窗口,一旦微信窗口最小化,便无法使用。解决办法:可以在GitHub上找到wxauto的后台版本,下载安装即可。
pip install bs4
pip install wxauto
pip install requests
1.先把各种库导入进来,requests是用来获取回答的,bs4用于解析返回的回答,wxauto用于沟通微信:
from requests import *
from bs4 import BeautifulSoup
from wxauto import WeChat
import time
2.规定一下wxauto库的简称,以便后期使用,在这里,我使用的简称是wx,当然,如果您想,只要符合变量规则就可以:
wx = WeChat()
3.python自动监视,当最后一条消息发生变动时触发命令,这样,当有新信息收到时就会自动运行下面的命令:
while True:#无限循环
#比较,自动观察是否有新消息
msg1 = wx.GetLastMessage
time.sleep(3)
msg2 = wx.GetLastMessage
if msg1 != msg2:#当前后不同时,运行下面的命令
4.打印msg2会发现形成了一个列表,如('name','message','time'),我们只需要信息,所以只需要列表的第2位。之后再加上青云客的API,get到返回结果,再用BeautifulSoup解析得到的html,可以观察到返回的是一串html代码,选取字符串中的第38位到倒数第20位,最后使用wxauto的SendMsg发送即可。
url1 = msg2[1]
url2 = "http://api.qingyunke.com/api.php?key=free&appid=0&msg="
url = url2 + url1
ret = get(url)
soup = str(BeautifulSoup(ret.text, 'lxml'))
ans = str(soup[38:-20])
wx.SendMsg("robot:" + ans)
·在本示例中,使用的wxauto里的函数,全部建立在您已经打开微信窗口的基础上,所以,您需要打开微信窗口,并且选择好与谁聊天,之后运行您编写的py代码,一旦Ta给您发消息,机器人便能自动在微信中回复。
但是,我们会发现,当您的网速较慢时,可能会导致消息回复不及时,这时可能就会导致软件崩溃,所以,当您使用时可以再添加一个try命令,当网速过慢导致无法得到正确回复时,不会崩溃,这就适用于自己搭建一个简易服务器。
try:
url1 = msg2[1]
url2 = "http://api.qingyunke.com/api.php?key=free&appid=0&msg="
url = url2 + url1
ret = get(url)
soup = str(BeautifulSoup(ret.text, 'lxml'))
ans = str(soup[38:-20])
wx.SendMsg("robot:" + ans)
except:
wx.SendMsg("robot:与服务器通讯异常,请重试")
当然,如果您搭建的服务器是基于windows的,也可以用pyinstaller打包成exe。这样便于使用,当然,也可以应用在其他无python环境的windows电脑上。
方法:
cmd:
cd (文件路径)
pyinstaller -F (文件名)
之后就是等待pyinstaller自动打包即可,打包完成后的exe文件会被储存到dist文件夹中,直接复制出来即可。如果上面的步骤没有做错,那么dist文件夹中只会有一个.exe文件,如果出现了许多文件,那就证明您在使用pyinstaller时没有加上-F(打包为单个文件)。
from requests import *
from bs4 import BeautifulSoup
from wxauto import WeChat
import time
wx = WeChat()
while True:
msg1 = wx.GetLastMessage
time.sleep(3)
msg2 = wx.GetLastMessage
if msg1 != msg2:
url1 = msg2[1]
url2 = "http://api.qingyunke.com/api.php?key=free&appid=0&msg="
url = url2 + url1
ret = get(url)
soup = str(BeautifulSoup(ret.text, 'lxml'))
ans = str(soup[38:-20])
wx.SendMsg("robot:" + ans)
2023.1.28 改进:
from requests import *
from bs4 import BeautifulSoup
from wxauto import WeChat
import time
wx = WeChat()
while True:
msg1 = wx.GetLastMessage
time.sleep(3)
msg2 = wx.GetLastMessage
if msg1 != msg2:
url1 = msg2[1]
url2 = "http://api.qingyunke.com/api.php?key=free&appid=0&msg="
url = url2 + url1
try:
ret = get(url)
soup = str(BeautifulSoup(ret.text, 'lxml'))
ans = str(soup[38:-20])
wx.SendMsg("robot:" + ans)
except:
wx.SendMsg("error")
在本示例中,我们知道了一个新的python库--wxauto,同时,我们也知道了怎么get url,当然,本示例中的api您也可以用来开发一个新的代码,让它做更多有意义的事情。