百木园-与人分享,
就是让自己快乐。

Python基于PC版微信实现机器人

闲着没事总想搞点事情,这不是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.cnblogs.com/hahaa/p/16583505.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Python基于PC版微信实现机器人

相关推荐

  • 暂无文章