• Python基于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 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__)
     
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    发送微信消息

    对于发送消息来说,往指定的端口(默认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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    如上,分别实现了发送文本消息与图片消息函数。

    自动聊天机器人

    聊天机器人我们同样站在巨人肩膀上,使用青云客提供的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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    完整源码及素材点击下方微信名片获取哟~

    给大家推荐一套2022最新的爬虫教程,涵盖大部分常见案例,非常实用!

    代码总是学完就忘记?100个爬虫实战项目!让你沉迷学习丨学以致用丨下一个Python大神就是你!

  • 相关阅读:
    Redis部署方式(三)主从模式
    python paramiko模块
    运维排查篇 | Saltstack 环境变量的坑
    快速幂算法
    V100 GPU服务器安装CUDNN教程
    React: hook(1) useState
    窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器
    LeetCode220912_102、除法求值
    OpenAI接口开发指南
    FlashSpeech、ID-Animator、TalkingGaussian、FlowMap、CutDiffusion
  • 原文地址:https://blog.csdn.net/ooowwq/article/details/126375401