今天突然看到了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() # 運行代碼