Flask结合werobot实现微信公众号自动回复

下载依赖包

  • pip install werobot

  • pip install Flask

建立项目文件夹<flask_project>

  • 建立项目文件app.py flask项目的启动入口
  • 建立robot.py文件,关于公众号自动回复的逻辑判断文件

编写robot.py文件

  • 单文件编辑需要设定端口和host,并且需要在最后run执行,依赖flask则不需要
from werobot import WeRoBot
from werobot.replies import WeChatReply, TextReply, ImageReply, MusicReply,ArticlesReply, Article
import re
import urllib
import logging
import json
from flask import Flask
import requests
robot = WeRoBot(token='xxxxxx',# 对应公众号的token设置encoding_aes_key='xxxxxx',# 明文传输不需要填写app_id='xxxxx'#明文传输不需要填写
)import random
# 明文模式不需要下面三项
#robot.config["APP_ID"]=''
#robot.config["APP_SECRET"]=''
#robot.config['ENCODING_AES_KEY'] = ''timeout=30                                                       # 超时时间
bdkey = 'xxxxxxx'      # 百度天气ak
def get_citys_in_msg(msg):# 获取消息中包含的城市api_url = 'http://www.yangyingming.com/api/parse_city?%s'%(urllib.parse.urlencode({'msg':msg}))citys = urllib.request.urlopen(api_url).read().decode('utf8')return citysdef get_weather(city):# 获取天气数据url = 'http://wthrcdn.etouch.cn/weather_mini'param = urllib.parse.urlencode({'city':city,})api_url = '%s?%s'%(url,param)wdata = requests.get(api_url).textreturn wdata# 被关注
@robot.subscribe
def subscribe(message):return '你好~\n我是xxxx的管家机器人,我叫xxxx T_T\n有什么能帮您的吗?/::$'
@robot.handler
def echo(message):try:msg = message.contentif re.compile(".*?天气.*?").match(msg):res_msg = ''# 取出该消息中包含的所有城市citys = get_citys_in_msg(msg).split(',')# 获得每一座城市的天气状况if citys[0]=='':return '亲爱的,你想知道哪座城市的天气呢?'else:for city in citys:if res_msg!='':res_msg += '\n\n'wdata = get_weather(city)wdata = json.loads(wdata)if wdata['desc']=='OK':wdata=wdata['data']res_msg += '当前位置:%s\n温馨提示: %s\n当前温度: %s+℃\n昨天: %s\n风力:%s \n风向: %s\n%s,%s\n天气: %s\n ----------------------------' % (wdata['city'], wdata['ganmao'], wdata['wendu'], wdata['yesterday']['date'], wdata['yesterday']['fl'][9:[m.start() for m in re.finditer(']', wdata['yesterday']['fl'])][0]], wdata['yesterday']['fx'], wdata['yesterday']['high'], wdata['yesterday']['low'], wdata['yesterday']['type'])for i in range(4):res_msg += '\n时间: %s\n风力:%s\n风向:%s\n%s,%s\n天气: %s \n ----------------------------' % (wdata["forecast"][i]['date'], wdata["forecast"][i]['fengli'][9:[m.start() for m in re.finditer(']', wdata['yesterday']['fl'])][0]], wdata["forecast"][i]['fengxiang'], wdata["forecast"][i]['high'], wdata["forecast"][i]['low'], wdata["forecast"][i]['type'])else:res_msg += '没有找到%s的天气信息'%cityreturn res_msgelse:# 提取消息msg = message.content.strip().lower()# 解析消息if  re.compile(".*?你好.*?").match(msg) or\re.compile(".*?嗨.*?").match(msg) or\re.compile(".*?哈喽.*?").match(msg) or\re.compile(".*?hello.*?").match(msg) or\re.compile(".*?hi.*?").match(msg) or\re.compile(".*?who are you.*?").match(msg) or\re.compile(".*?你是谁.*?").match(msg) or\re.compile(".*?你的名字.*?").match(msg) or\re.compile(".*?什么名字.*?").match(msg) :return "xxxxxxx,我叫xxxxx T_T\n有什么能帮您的吗?/::$"elif re.compile(".*?厉害.*?").match(msg):return '承让承让 /:B-)/:B-)/:B-)'elif re.compile(".*?想你.*?" ).match(msg):return '我也想你'elif re.compile(".*?miss you.*?").match(msg):return 'I miss you,too /::$/::$ /::$/::$'elif re.compile(".*?我爱你.*?").match(msg):return '我也爱你 /:showlove/:showlove/:showlove/:showlove'elif re.compile(".*?love you.*?").match(msg):return 'I love you,too'elif re.compile(".*?美女.*?").match(msg):return '我是男生哦♂/:rose/:rose/:rose'elif re.compile(".*?帅哥.*?").match(msg):return '谢谢夸奖 /:rose/:rose/:rose/:rose'elif re.compile(".*?傻逼.*?").match(msg):return '爸爸不想理你/:pig/:pig/:pig'else:return msgexcept Exception as e:print (e)# 读取文档里的笑话,把前三行存在 data2 里,字符串太长公众号会报错
def joke_data():filename = 'qiushibaike.txt'f = open(filename, 'r')data = f.readline()f.close()# data1 = data.split()# data2 = ''# for data_i in data1[0:3]:#     data2 += data_i + '\n' + '\n'return data# 读取文档里的电影名称
def movie_name():filename = 'movies_name.txt'f = open(filename, 'r')data = f.read()f.close()return data# 从三首音乐里随机选一首
def music_data():music_list = [['童话镇','陈一发儿','https://e.coka.la/wlae62.mp3','https://e.coka.la/wlae62.mp3'],['都选C','缝纫机乐队','https://files.catbox.moe/duefwe.mp3','https://files.catbox.moe/duefwe.mp3'],['精彩才刚刚开始','易烊千玺','https://e.coka.la/PdqQMY.mp3','https://e.coka.la/PdqQMY.mp3']]num = random.randint(0,2)return music_list[num]# 读取 fight.txt 里的句子,随机返回一句
def get_fighttxt():filename = 'fight.txt'f = open(filename, 'r')data = f.read()f.close()data1 = data.split()max_num = len(data1) - 1num = random.randint(0, max_num)data2 = data1[num]return data2# 匹配 笑话 回复糗百笑话
@robot.filter('笑话')
def joke(message):data = joke_data()return data@robot.filter('xxxxx')
def joke(message):msg='xxxxx'return msg
#如果用
#@robot.text
#def joke(message):
#    if message.content == "笑话":
#会报错
#UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal# 匹配 电影 回复电影名称
@robot.filter('电影')
def movie(message):name = movie_name()return name# blog 回复个人博客
@robot.filter('blog')
def blog(message):reply = ArticlesReply(message=message)article = Article(title="xxxxx",description="xxxx",img="xxxxxx",url="xxxxx")reply.add_article(article)return reply# 匹配 音乐 回复一首歌
@robot.filter('音乐')
def music(message):music1 = music_data()return music1# 匹配 fight 回复一句话
@robot.filter('fight')
def fight(message):data = get_fighttxt()return data

编写app.py

from flask import Flask,Blueprint
from flask_restful import Api,Resource,reqparse
from flask_cors import CORS
from werobot.contrib.flask import make_view #使用make_view依赖到flask项目
from robot import robot
app=Flask(__name__)
app.add_url_rule(rule='/api/app/',        # WeRoBot挂载地址endpoint='werobot',             # Flask的endpointview_func=make_view(robot),#robot是robot文件methods=['GET', 'POST'])CORS(app)
Appblue=Api(app)class Text(Resource):def post(self):resCode=200resMsg='成功'parse=reqparse.RequestParser()parse.add_argument('name',type=str,required=True)parse.add_argument('age',type=str,required=True)args=parse.parse_args()name=args['name']age=args['age']return [{'resCode':resCode,'resMsg':resMsg,'data':{'naem':name,'age':age}}]def get(self):return "<h1 style='color:blue'>Hello There!</h1>"Appblue.add_resource(Text,'/Text')class GetNewname(Resource):def post(self):resCode=200resMsg='成功'parse=reqparse.RequestParser()parse.add_argument('name',type=str,help='请输入名字',required=True)args=parse.parse_args()name=args['name']return {'resCode':resCode,'resMsg':resMsg,'data':{'name':name}}def get(self):resCode=200resMsg='成功'name='xxx'return {'resCode':resCode,'resMsg':resMsg,'data':{'name':name}}Appblue.add_resource(GetNewname,'/api/GetNewname')if __name__ == '__main__':app.run(debug=True)

Flask结合werobot实现微信公众号自动回复相关推荐

  1. 关于微信公众号自动回复文本、图片以及图文

    1.微信公众号自动回复文本: 首先我们应该增加reply_id以及内容(content)到数据表rh_mp_reply_text,然后根据reply_id查找表rh_mp_rule的信息关键字.然后我 ...

  2. 微信 SHA1 签名_微信公众号自动回复功能开发

    微信公众号自动回复功能开发 本篇主要讲解 微信公众号自动回复功能开发,让我们自己去托管公众号回复的功能,这样可以更加灵活的根据公众号收到的信息来制定特定的回复信息,一起来了解吧! 1.注册公众号 如果 ...

  3. java微信公众号自动回复文字加图片

    java微信公众号自动回复文字加图片 开发流程 详细流程,附上代码: 第一步服务器(url)接口配置 服务器(url)接口配置,此步骤就是微信授权接口的过程,如果域名都不改变,微信只会校验一次.此请求 ...

  4. 怎么设置微信公众号自动回复内容显示用户昵称

    对于微信公众号自动回复内容显示用户昵称,第三方平台微号帮提供了粉丝对话定时推送功能实现,支持公众号设置自动回复消息显示用户昵称,除了可以显示对应用户的昵称,还可以显示用户的头像.openID;用户向公 ...

  5. 微信公众号自动回复功能

    微信公众号自动回复功能分为两种,一种自主开发,一种利用公众号自动开发,两种不可兼容,开发状态的自动回复功能,将导致编辑状态下的菜单,自动回复失效. WeixinchatController代码:  这 ...

  6. 苹果cms对接微信公众号自动回复的样式设置

    此教程针对已经成功对接微信公众号的网站,苹果cms后台对接微信公众号自动回复样式的设置详解,如果你还没有成功对接微信公众号请参考此教程进行对接:https://www.mytheme.cn/artic ...

  7. 微信公众号自动回复消息如何设置带链接的文字

    关于微信公众号实现自动回复消息设置带链接的文字,第三方工具微号帮平台提供了功能粉丝对话定时推送实现,可以设置微信公众号的自动回复消息带链接文字,还可以设置纯文字.图片.文章.小程序.h5小游戏.直播. ...

  8. 微信公众号自动回复的文字信息如何带链接地址

    为了满足微信公众号自动回复信息带链接地址,第三方平台微号帮提供了功能粉丝对话定时推送实现,可以为公众号设置自动回复信息添加链接地址,可以设置延迟自动回复时间,可以按公众号对话粉丝的分组回复消息,如果担 ...

  9. 微信公众号自动回复-底部菜单栏-关键字回复-回复2条消息(1文字,1图片)

    微信公众号自动回复-底部菜单栏-关键字回复-回复2条消息(1文字,1图片)JAVA 主要实现: 1.关注后自动回复文字内容 2.关键字回复图文消息 3.实现公众号自定义底部菜单栏 - 点击菜单栏进入链 ...

最新文章

  1. Scrapyd部署Scrapy框架项目
  2. Prometheus部署监控容器
  3. 关于动画的几种状态表示的含义以及能够使用2d动画表述为什么要使用3d动画表述
  4. Unix整理笔记——安全性——里程碑M13
  5. Outlook 2013 电子邮件账户设置备份与恢复
  6. python获取select选中的值_python – 使用flask从select标签获取值
  7. 64centos安装mysql_CentOS7 64位安装mysql教程,亲测完美
  8. 做了3年Excel报表,换了这个报表神器后,不禁感叹:国产真香
  9. AcWing 789. 数的范围
  10. jmeter笔记02
  11. 手机等第三方终端访问 WebStorm 页面
  12. 【SVN】SVN创建分支
  13. 计算机ppt实验报告总结怎么写,ppt实验报告总结.doc
  14. c#怎样将object转换过程int型
  15. 计算机网络——链路层与局域网
  16. 动态管理电源功能 计算机 中标,东北石油大学省创新基地奖励金设备仪器采购第四标段:黑龙江省油气田控制与动态监测实验室中标公告2020-11-11...
  17. vue3使用less,scoped后发现:deep不生效
  18. 零知识证明:Sigma协议
  19. 西南大学计算机学院读博咋样,专硕想读博士,难吗?北大学长如是说!
  20. 有两种人,看似“缺心眼”,实际“聪明绝顶”,堪称“大智若愚”

热门文章

  1. 什么是RPC?什么是Restful ?它们有什么区别?
  2. python3.7以上使用pyinstaller将py文件打包为exe ,解决安装后显示‘pyinstaller‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的错误
  3. c语言创建一个bat文件内容,BAT(批处理)文件编写详细手册
  4. 自学shell编程——第1讲(基础概念、变量、符号、字符串处理)
  5. UltraEdit编辑器打开其他软件编辑文件时出现中文乱码的解决方法
  6. STM32CUBEMX(2)--USART通过DMA方式接收不定长数据
  7. 【自动化】火车头采集器
  8. word嵌入对象依损坏_和平精英辅助不好封技术员为你说明注解word临时文件处理步骤辅助...
  9. vlc for android 不能全屏,或者画面不能铺满的问题。
  10. oracle 秒转换分钟小时