Python基于Windows版微信做一个聊天机器人
前言
哈喽大家好!又到了学Python时刻~
效果展示
微信实时收发消息
1、第三方库
2、开启注入dll
从pc-wechat-hook-http-api官方地址下载到如下三个文件。
点击Daen注入器.exe文件:
其中:
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,实现自动对话。需要注意的是,青云客的机器人是女性,且名称为菲菲,如果想自定义名称,我们直接将回复的文本中的菲菲替换成自定义的名称即可,实现代码如下:
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}","
")
if robot_name is not None:
rt = rt.replace("菲菲", robot_name)
return rt
给大家推荐一套2022最新的爬虫教程,涵盖大部分常见案例,非常实用!
