个人微信公众号搭建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 +"\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地址
个人公众号:
个人微信公众号搭建Python实现 -个人公众号搭建-处理消息和事件(14.3.4)的更多相关文章
- 个人微信公众号搭建Python实现 -个人公众号搭建-被动回复消息建模(14.3.2)
@ 目录 1.阅读官方文档 2.思考 关于作者 1.阅读官方文档 点击进入微信官方开发者文档 接收普通消息 文本消息 图片消息 语言消息 视频消息 小视频消息 地理位置消息 链接消息 接收事件消息 关 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-总结(14.3.6)
@ 目录 1.主要技术:Flask,requests 2.实现的主要功能 3.目录说明 4.运行方式 关于作者 1.主要技术:Flask,requests requirements.txt如下 req ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-永久素材管理(14.3.5)
@ 目录 1.说明 2.上传素材 3.获取素材列表 关于作者 1.说明 个人微信公众号开发的功能有限,因为很多权限没有,但支持上传永久素材,具体查看微信公众号文档 这里的请求都要将本地IP地址放到微信 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-运行run方法的编写(14.3.3)
@ 目录 1.主要逻辑 2.代码 关于作者 1.主要逻辑 使用的是flask服务器 就使用一个函数处理请求 第一个是验证服务器,返回微信服务器给的字符串就表示验证成功 第二是要处理微信服务器发送过来的 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-构想(14.3.1)
@ 目录 1.需求 2.怎么做 关于作者 1.需求 个人便捷工具 2.怎么做 针对个人未认证订阅号拥有以下权限 以及微信网页的一些权限,但是由于开发微信网页有限制 可定制功能只有被动回复,以及这个素材 ...
- 使用python一步一步搭建微信公众平台(一)
使用的工具,python 新浪SAE平台,微信的公众平台 你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你拍张手持身份证的照片,还有几天的审核期 微信公众平台:http:/ ...
- Java开发微信公众号(三)---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装
在前面几篇文章我们讲了微信公众号环境的配置 和微信公众号服务的接入,接下来我们来说一下微信服务器请求消息,响应消息以及事件消息的相关内容,首先我们来分析一下消息类型和返回xml格式及实体类的封装. ( ...
- 微信H5页面内实现一键关注公众号
H5页面内实现关注公众号的微信JSSDK没有相关接口开放,因此就得动点脑筋来实现该功能了.下面的方法就是通过一种非常蹊跷的方式实现的. 首先,需要在公众号内发表一篇原创文章,注意是原创文章,然后由另一 ...
- .net微信公众号开发——消息与事件
作者:王先荣 本文介绍如何处理微信公众号开发中的消息与事件,包括:(1)消息(事件)概况:(2)验证消息的真实性:(3)解析消息:(4)被动回复消息:(5)发送其他消息. 开源项目地址:h ...
随机推荐
- 图片恢复有新招,EasyRecovery预览模式助你快速恢复
EasyRecovery作为一款数据恢复软件,因其便捷的操作.低廉的价格深受大家的喜爱.EasyRecovery具有"傻瓜式"操作,就算你是第一次接触这款软件,通过主页提示也能很快 ...
- CorelDRAW多个文件如何批量导出JPG
好多同学对于CorelDRAW 2018批量导出图片格式的操作不太了解.这种情况比较常见,比如设计了一本画册,在同一个文档中页面比较多,如果一页一页导出那将是一项巨大的工程,这时候我们就会想到CDR的 ...
- 「CF578F」 Mirror Box
description CF578F solution 考虑转化题目的要求 1.对于任意一条边,都存在一条从界垂直射入的光线,经过反射穿过这条边. 当图中有环时,环内的边一定不满足条件,而在不存在环时 ...
- leetcode116. 填充每个节点的下一个右侧指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下:struct Node { int val; Node *left; Node *right; Node ...
- Apifox接口测试管理工具
今天发现开发使用了一款新的接口测试工具,一眼看上去比较清爽,主要全中文界面对比postman的全英文,简直友好太多了. 后续又被业界大佬虫师推荐,于是去官网简单了解了一下,Apifox = Postm ...
- jmeter测试udp
jemter本身不支持udp测试,需要下载安装第三方插件,或者下载一个插件管理器(下面那个蝴蝶一样的图标),里面有各种插件可以供你下载 下载链接:https://jmeter-plugins.org/ ...
- CentOS 防火墙常用命令
1.查看防火墙状态: firewall-cmd --state 2.启动防火墙 systemctl start firewalld 3.关闭防火墙 systemctl stop firewalld 4 ...
- web服务器是啥
什么是web服务器 参考 https://www.cnblogs.com/zhaoyl/archive/2012/10/10/2718575.html 了解nginx之前,先了解下什么是web服务器吧 ...
- harbor私有仓库部署
Harbor 简介 Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户 ...
- DRAM三种刷新方式(转载)
设DRAM中电容的电荷每2ms就会丢失,所以2ms内必须对其补充.补充电荷是按行来进行的,为了[全部]内存都能保住电荷,必须对[所有]的行都得补充. 假设刷新1行的时间为0.5μs(刷新时间是等于存取 ...