前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 又到了學Python時刻~激不激動,開不開森 ! web版的微信有專門的實時收發消息api,可以用Python直接調用,但是現在基本上登錄不了web版微信,所以就用不了了。 但這不是還有windows版的微信嗎,於是在基於前輩寫好的第三方庫,今天我們來實 ...
前言
嗨嘍,大家好呀~這裡是愛看美女的茜茜吶
又到了學Python時刻~激不激動,開不開森 !
web版的微信有專門的實時收發消息api,可以用Python直接調用,但是現在基本上登錄不了web版微信,所以就用不了了。
但這不是還有windows版的微信嗎,於是在基於前輩寫好的第三方庫,今天我們來實現一下實時收發信息,實現自動聊天機器人。
效果展示
微信實時收發消息
1、第三方庫
基於第三方pc-wechat-hook-http-api
實現微信實時收發消息。
需要註意的是,此庫基於3.6.0.18
版本微信。下載對應版本微信後,直接覆蓋安裝,這樣可以保留聊天記錄。
2、開啟註入dll
想要實時獲取微信消息,需要劫持響應的入口。這一部分內容我們無需過多關心技術細節,只需傻瓜式點擊一下即可。
從pc-wechat-hook-http-api
官方地址下載到如下三個文件。
將HPSocket4C.dll
文件複製到微信目錄下(例如E:\Tencent\WeChat[3.6.0.18])
點擊Daen
註入器.exe
文件:
其中:
1.文件目錄是指微信安裝路徑,參考上圖。
2.DLL
路徑指的是DaenWxHook.dll
文件的完整路徑。
3.進程參數直接使用預設即可。其中圖中8089
指本地用於接收微信實時消息的http serve
r埠。8055
指的是dll
開啟的http server
埠,發送消息時只需往這個埠post
數據即可。
點擊註入並啟動,登錄微信即可。
3、實時收發消息
實時收發消息官方文檔:https://www.apifox.cn/apidoc/project-1222856/doc-1012539
接收微信消息
對於實時接收消息,簡單來說,就是在本地創建一個http server
,埠與進程參數一致
即預設地址為:http://localhost:8089/wechat/。我們通過使用flask
庫創建http server
from flask import Flask, request import json import requests app = Flask(__name__) def on_rcv_chatroom_msg(from_wxid, msg): print("收到群消息") def on_rcv_p2p_txt(from_wxid, msg_txt): print("收到文本消息", from_wxid, msg_txt) @app.route('/wechat/', methods=['get', 'post']) def wechat(): data = request.stream.read() data = data.decode('utf-8') data = json.loads(data) type = data['type'] if type == 'D0003': data = data['data'] msg = data['msg'] from_wxid = data['fromWxid'] if "@chatroom" in from_wxid: on_rcv_chatroom_msg(from_wxid, msg) else: on_rcv_p2p_txt(from_wxid, msg) return '' if __name__ == '__main__': app.run(debug=True, port=8089)
發送微信消息
對於發送消息來說,往指定的埠(預設8055)post消息即可:
import json import requests def send_msg(wxid, is_img, msg): if is_img: payload = {"type": "Q0010", "data": {"wxid": wxid, "path": msg}} else: payload = {"type": "Q0001", "data": {"wxid": wxid, "msg": msg}} headers = { 'User-Agent': 'apifox/1.0.0 (https://www.apifox.cn)', 'Content-Type': 'application/json' } # 請求url url = 'http://127.0.0.1:8055/DaenWxHook/client/' # 請求參數 # 調用post response = requests.post(url, json=payload, headers=headers) # response 響應對象 # 獲取響應狀態碼 print('狀態碼:', response.status_code) # 獲取響應頭 print('響應頭信息:', response.headers) # 獲取響應正文 print('響應正文:', response.text) def send_txt_msg(wxid, txt): send_msg(wxid, False, txt) def send_img_msg(wxid, img_path): send_msg(wxid, True, img_path)
如上,分別實現了發送文本消息與圖片消息函數。
自動聊天機器人
聊天機器人我們同樣站在巨人肩膀上,使用青雲客提供的api,實現自動對話。
需要註意的是:青雲客的機器人是女性,且名稱為菲菲,如果想自定義名稱,我們直接將回覆的文本中的菲菲替換成自定義的名稱即可
實現代碼如下:
完整源碼、素材加Q裙:261823976獲取~ def talk_with_robot(msg, robot_name=None): url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(urllib.parse.quote(msg)) html = requests.get(url) rt = html.json()["content"] rt = rt.replace("{br}","\n") if robot_name is not None: rt = rt.replace("菲菲", robot_name) return rt