IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 可爱猫+python3+Flask+aiohttp简单搭建微信机器人 -> 正文阅读

[Python知识库]可爱猫+python3+Flask+aiohttp简单搭建微信机器人

之前一直在研究QQ机器人,最近发现一个微信机器人框架,在办公中来增加工作效率。

一、需要环境:

可爱猫(http://www.keaimao.com/)
python3.8+ flask、aiohttp
微信 for windows 3.4.0.38

1.启动可爱猫、登录微信

2.在可爱猫应用中找到HTTP个人对接版,双击打开

在这里插入图片描述
其中
消息回调地址,相当于消息接收地址
调用本地api地址,相当于消息发送地址

用python整个run.py,顺便从隔壁投一个flask使用async的方法

二、核心代码(run.py)

import flask
import logging
from flask import Flask, jsonify, has_request_context, copy_current_request_context, request
from functools import wraps
from concurrent.futures import Future, ThreadPoolExecutor
import time
from getmsg import getmsg
import asyncio

def run_async(func):
    @wraps(func)
    def _wrapper(*args, **kwargs):
        call_result = Future()
        def _run():
            loop = asyncio.new_event_loop()
            try:
                result = loop.run_until_complete(func(*args, **kwargs))
            except Exception as error:
                call_result.set_exception(error)
            else:
                call_result.set_result(result)
            finally:
                loop.close()
 
        loop_executor = ThreadPoolExecutor(max_workers=1)
        if has_request_context():
            _run = copy_current_request_context(_run)
        loop_future = loop_executor.submit(_run)
        loop_future.result()
        return call_result.result()
    return _wrapper
 

app = flask.Flask(__name__)
@app.route('/', methods=['POST'])
@run_async
async def main():
    msg,from_name,final_from_name,time_str,from_wxid,final_from_wxid,msg_type = getmsg()
    #这一块后面可以写插件主要内容
    #...
    return 'ok'
if __name__ == '__main__':
    app.config['JSON_AS_ASCII'] = False
    log = logging.getLogger('werkzeug')
    log.disabled = True
    app.run(host='0.0.0.0', port=8074, debug=True)
 

三、可爱猫提供的接收与发送方法

1.接收消息(getmsg.py)

import flask,time
def getmsg():
    #取msg
    allmsg = flask.request.get_data()
    msg_type =flask.request.form.get('type')
    if msg_type == '200':
        msg_type_name = '群聊消息'
    elif msg_type == '100':
        msg_type_name = '私聊消息'
    msg = flask.request.form.get('msg')
    from_name = flask.request.form.get('from_name').encode('utf-8').decode('utf-8')
    final_from_name = flask.request.form.get('final_from_name').encode('utf-8').decode('utf-8')
    time_str = flask.request.form.get('time')
    time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(time_str)))
    from_wxid = flask.request.form.get('from_wxid')
    final_from_wxid = flask.request.form.get('final_from_wxid')

    print(f'\033[1;36m[INFO] [{time_str}]\033[0m [{msg_type_name}(\033[1;34m{from_name}\033[0m)]\033[1;35m {final_from_name} \033[0m: \033[1;32m{msg}\033[0m ')
    return msg,from_name,final_from_name,time_str,from_wxid,final_from_wxid,msg_type

2.发送消息(httpapi.py)

这里按照可爱猫提供的方法写了三种,基本上已经够用了其中wxid_xxxxx为机器人的wxid

import json
import time
import aiohttp

url = 'http://127.0.0.1:8073/send'
async def send_msg_private(msg, to_wxid):
    data = {
        "type": "100",
        "msg": msg,
        "to_wxid": to_wxid,
        "robot_wxid":"wxid_xxxxx"
    }
    data = json.dumps(data)
    async with aiohttp.ClientSession() as session:
        async with session.post(url, data=data) as resp:
            print(await resp.text())

async def send_msg_group(msg, to_wxid):
    data = {
        "type": "100",
        "msg": msg,
        "to_wxid": to_wxid,
        "robot_wxid":"wxid_xxxxx"
    }
    data = json.dumps(data)
    async with aiohttp.ClientSession() as session:
        async with session.post(url, data=data) as resp:
            print(await resp.text())

async def send_image_msg(picpath, to_wxid):
    data = {
        "type": "106",
        "msg": picpath,
        "to_wxid": to_wxid,
        "robot_wxid":"wxid_xxxxx"
    }
    data = json.dumps(data)
    async with aiohttp.ClientSession() as session:
        async with session.post(url, data=data) as resp:
            print(await resp.text())

四、插件例子(百度文心的AI对对联duilian.py)

插件我放在plugin文件夹下,这个随意

import wenxin_api 
from wenxin_api.tasks.couplet import Couplet
def duilian(str1):
    wenxin_api.ak = ""#自己申请
    wenxin_api.sk = ""#自己申请
    input_dict = {
        "text": f"上联:{str1}\n下联:",
        "seq_len": 512,
        "topp": 0.9,
        "penalty_score": 1.0,
        "min_dec_len": 2,
        "is_unidirectional": 0,
        "task_prompt": "couplet"
    }
    rst = Couplet.create(**input_dict)
    #返回result
    return rst['result']

五、在run.py中添加

...
from plugin.duilian import duilian

#上面main()中getmsg后面
async def main()
    if '#上联' in msg and msg_type == '200':
        args = msg.split('上联')[-1]
        if args == '':
            pass#这里可以自行添加判断这里图方便我就没写
        else:
            #print(args)
            result ='下联:'+duilian(args)
            #发送微信消息
            await send_msg_group(result,from_wxid)

运行效果
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:24:34  更:2022-09-21 00:26:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:17:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码