什么?python做了一个尬聊机器人,这不得学习一波~

打印 上一主题 下一主题

主题 885|帖子 885|积分 2655

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐
又到了学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 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
  1. from flask import Flask, request
  2. import json
  3. import requests
  4. app = Flask(__name__)
  5. def on_rcv_chatroom_msg(from_wxid, msg):
  6.     print("收到群消息")
  7. def on_rcv_p2p_txt(from_wxid, msg_txt):
  8.     print("收到文本消息", from_wxid, msg_txt)
  9. @app.route('/wechat/', methods=['get', 'post'])
  10. def wechat():
  11.     data = request.stream.read()
  12.     data = data.decode('utf-8')
  13.     data = json.loads(data)
  14.     type = data['type']
  15.     if type == 'D0003':
  16.         data = data['data']
  17.         msg = data['msg']
  18.         from_wxid = data['fromWxid']
  19.         if "@chatroom" in from_wxid:
  20.             on_rcv_chatroom_msg(from_wxid, msg)
  21.         else:
  22.             on_rcv_p2p_txt(from_wxid, msg)
  23.     return ''
  24. if __name__ == '__main__':
  25.     app.run(debug=True, port=8089)
复制代码
 
发送微信消息
对于发送消息来说,往指定的端口(默认8055)post消息即可:
  1. import json
  2. import requests
  3. def send_msg(wxid, is_img, msg):
  4.     if is_img:
  5.         payload = {"type": "Q0010", "data": {"wxid": wxid, "path": msg}}
  6.     else:
  7.         payload = {"type": "Q0001", "data": {"wxid": wxid, "msg": msg}}
  8.     headers = {
  9.         'User-Agent': 'apifox/1.0.0 (https://www.apifox.cn)',
  10.         'Content-Type': 'application/json'
  11.     }
  12.     # 请求url
  13.     url = 'http://127.0.0.1:8055/DaenWxHook/client/'
  14.     # 请求参数
  15.     # 调用post
  16.     response = requests.post(url, json=payload,
  17.                              headers=headers)  # response 响应对象
  18.     # 获取响应状态码
  19.     print('状态码:', response.status_code)
  20.     # 获取响应头
  21.     print('响应头信息:', response.headers)
  22.     # 获取响应正文
  23.     print('响应正文:', response.text)
  24. def send_txt_msg(wxid, txt):
  25.     send_msg(wxid, False, txt)
  26. def send_img_msg(wxid, img_path):
  27.     send_msg(wxid, True, img_path)
复制代码
 
如上,分别实现了发送文本消息与图片消息函数。
自动聊天机器人

聊天机器人我们同样站在巨人肩膀上,使用青云客提供的api,实现自动对话。
需要注意的是:青云客的机器人是女性,且名称为菲菲,如果想自定义名称,我们直接将回复的文本中的菲菲替换成自定义的名称即可
实现代码如下:
  1. 完整源码、素材加Q裙:261823976获取~
  2. def talk_with_robot(msg, robot_name=None):
  3.     url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(urllib.parse.quote(msg))
  4.     html = requests.get(url)
  5.     rt = html.json()["content"]
  6.     rt = rt.replace("{br}","\n")
  7.     if robot_name is not None:
  8.         rt = rt.replace("菲菲", robot_name)
  9.     return rt
复制代码
 
尾语
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表