閑著沒事總想搞點事情,這不是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 server埠,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__) # Python學習交流原始碼獲取群:279199867 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,實作自動對話,需要注意的是,青云客的機器人是女性,且名稱為菲菲,如果想自定義名稱,我們直接將回復的文本中的菲菲替換成自定義的名稱即可,實作代碼如下:
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
給大家推薦一套2022最新的爬蟲教程,涵蓋大部分常見案例,非常實用!
代碼總是學完就忘記?100個爬蟲實戰專案!讓你沉迷學習丨學以致用丨下一個Python大神就是你!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501778.html
標籤:其他
上一篇:JPA 入門實戰(1)--簡介
