今天突然看到了PyWeChatSpy ,众所周知,微信网页版不能登录,之前的微信机器人都不能用了,用以下代码,可以实现自动回复。详情可以去github搜,注意微信的版本,目前好像只支持2.8.0.133
我在别人的基础上修改了一下代码,具体如下:
from PyWeChatSpy import WeChatSpy
import random
import re
import json
import requests
import time
# 只支持2.8.0.133
userid = str(1)
# 1 可以替换成任何长度小于32的字符串哦
apikey = str('e75a3b457d4b48eabea084b0b1006a2a')
# 这里的apikey,记得替换成你自己的apikey(图灵机器人)
# 指定某些给我发了--start的用户才自动回复。输入--stop停止自动回复
friends = []
def my_parser(data):
if data["type"] == 5: # 判断是微信消息数据
for msg in data["data"]:
if (msg["self"] == 0):
# 遍历微信消息
print(msg["content"])
if msg["msg_type"] == 10000: # 判断是微信拍一拍系统提示
m = re.search('.*?拍了拍我。', msg["content"])
if m: # 判断为拍一拍
image_path = f"./images/{random.randint(1, 4)}.jpg" # 随机选一张回复用的图片
itchat.send_file(msg["wxid1"], image_path)
itchat.send_text(msg["wxid1"], "我可能在学习吧(自动回复)")
elif msg["msg_type"] == 1: # 判断为文本消息
if (re.search('.*?@chatroom', msg["wxid1"]) == None): # 判断不是群消息
if (msg["content"] == '--start'): #输入--start 开始机器人
friends.append(msg['wxid1'])
itchat.send_text(msg["wxid1"], "机器人打开。", )
continue
if (msg["content"] == '--stop'): #输入--stop 关闭机器人
friends.remove(msg['wxid1'])
itchat.send_text(msg["wxid1"], "机器人关闭。", )
continue
print(msg)
m = re.search('在吗', msg["content"])
if msg["wxid1"] in friends: # 如果在friends数组中就自动回复,不在就不回复
if m:
itchat.send_text(msg["wxid1"], "我是机器人,有事请留言。", )
# print(msg["msg_type"])
# print(msg["self"])
# print(msg["wxid1"])
# print(data["pid"])
else:
api = r'http://openapi.tuling123.com/openapi/api/v2'
# 创建post提交的数据
data = {
"perception": {
"inputText": {
"text": msg["content"]
}
},
"userInfo": {
"apiKey": apikey,
"userId": userid,
}
}
# 转化为json格式
jsondata = json.dumps(data)
# 发起post请求
response = requests.post(api, data=jsondata)
# 将返回的json数据解码
robot_res = json.loads(response.content)
# 提取对话数据
print(robot_res["results"][0]['values']['text'])
# content = msg["content"]
# 输入对话内容
# robot(content)
itchat.send_text(msg["wxid1"], '[' + robot_res["results"][0]['values']['text'] + '(自动回复)]')
itchat = WeChatSpy(parser=my_parser) # 实例化WeChatSpy类
if __name__ == '__main__':
itchat.run() # 运行代码