• 个人微信公众号搭建Python实现 -个人公众号搭建-处理消息和事件(14.3.4)


    @

    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 +"
    
    "+ 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地址
    个人公众号:
    在这里插入图片描述

  • 相关阅读:
    python bilibili(一)获取直播间标题
    反射机制
    如何修改excel转换csv的分隔符
    Timer和TimerTask详解——(转)
    Android完全退出应用程序(一)
    动态设置ImageView中的图片
    excel导入sqlite (命令方式)
    Android开发中完全退出程序的三种方法
    Android实现回退
    如何把批量数据导入到android 的 sqlite 数据库(转)
  • 原文地址:https://www.cnblogs.com/simon-idea/p/11397710.html
Copyright © 2020-2023  润新知