@

1.消息处理

现在只处理text文本消息
没有关键字的就交给qingyunke机器人去应付,这是一个免费的对话api
从配置文件中读取关键字信息,如果存在某个关键字就返回对应的
返回的时候要传之前用户的信息,所以这里就直接把微信服务器发送过来的xml文件转为dict传过来
返回给用户信息时,如果是文字就不做处理的读取配置信息的内容
如果发现关键字对应的信息以pic_开头,说明返回的是图片(这里使用了切片)

import ReturnMessage
import json
from   requests import request
def Processing(xml_dict,msg_type,SET):
    if msg_type == "text":
       return Text(xml_dict,SET)
    else:
       return Others(xml_dict)

def Text(xml_dict,SET):
    Content = str.lower(xml_dict.get("Content"))
    Copyright = SET["MAIN"]
    #使用run启动,keyword.json对应着run的目录
    with open(r\'../resource/KeyWord.json\', \'r\', encoding="utf-8") as f:
        KeyWord = json.load(f)
        if Content in KeyWord.keys():
            if KeyWord[Content][0:4] == "pic_":
                return ReturnMessage.ReturnPic(xml_dict,KeyWord[Content][4:])
            else:
                return ReturnMessage.ReturnText(xml_dict,Copyright +"\n\n"+ KeyWord[Content])
        else:
            url = "http://api.qingyunke.com/api.php?key=free&appid=0&msg=%s" % Content
            rep = request("get", url)
            msg_ = rep.content.decode()
            dict = json.loads(msg_)
            return  ReturnMessage.ReturnText(xml_dict,dict["content"])



def Others(xml_dict):
    return ReturnMessage.ReturnException(xml_dict)







2.事件处理

这里就只处理订阅事件,返回一个欢迎信息

import ReturnMessage

def Processing(xml_dict,Event):
    if Event == "subscribe":
        return  Subscribe(xml_dict)
    elif Event == "unsubscribe":
        Unsubscribe(xml_dict)
    else:
        return  Others(xml_dict)


def Subscribe(xml_dict):
    return ReturnMessage.ReturnText(xml_dict,"欢迎订阅")


def Unsubscribe(xml_dict):
    pass

def Others(xml_dict):
    return  ReturnMessage.ReturnException(xml_dict)



3.返回处理

一共有三个方法,一是返回自定义文字,二是返回固定文字,三是返回图片
这里都是查看的官方文档去构造的返回数据
将dict转化为xml返回给微信服务器
返回图片的时候,是返回图片的id(用永久素材的id)

import time

def  ReturnText(xml_dict,text):
    resp_dict = {
        "xml":{
            "ToUserName":xml_dict.get("FromUserName"),
            "FromUserName":xml_dict.get("ToUserName"),
            "CreateTime":int(time.time()),
            "MsgType":"text",
            "Content":text
        }
    }
    return resp_dict


def  ReturnException(xml_dict):
    resp_dict = {
        "xml":{
            "ToUserName":xml_dict.get("FromUserName"),
            "FromUserName":xml_dict.get("ToUserName"),
            "CreateTime":int(time.time()),
            "MsgType":"text",
            "Content":"目前只支持文字类型"
        }
    }
    return resp_dict


def  ReturnPic(xml_dict,id):
    resp_dict = {
        "xml":{
            "ToUserName":xml_dict.get("FromUserName"),
            "FromUserName":xml_dict.get("ToUserName"),
            "CreateTime":int(time.time()),
            "MsgType":"image",
            "Image":{"MediaId":id}
        }
    }
    return resp_dict

关于作者

个人博客网站
个人GitHub地址
个人公众号:
在这里插入图片描述

版权声明:本文为simon-idea原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/simon-idea/p/11397710.html