zoukankan      html  css  js  c++  java
  • 个人微信公众号搭建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地址
    个人公众号:
    在这里插入图片描述

  • 相关阅读:
    每日日报2020.12.1
    每日日报2020.11.30
    981. Time Based Key-Value Store
    1146. Snapshot Array
    565. Array Nesting
    79. Word Search
    43. Multiply Strings
    Largest value of the expression
    1014. Best Sightseeing Pair
    562. Longest Line of Consecutive One in Matrix
  • 原文地址:https://www.cnblogs.com/simon-idea/p/11397710.html
Copyright © 2011-2022 走看看