vLang-基于模型的微信开发框架,使用Python
GitHub地址:https://github.com/uutoto/vlang
vLang 使用说明
vLang是一个基于模型的微信开发框架,遵循MIT协议发布。
安装
开发与测试环境:
Ubuntu Kylin 15.04 64bit
Python 3.4
Tornado 4.1
python3 setup.py install
入门
1. Hello World!
最简单的例程,对用户发送的所有消息,回复“Hello World!”
from vlang.menu import Menu
from vlang.server import startclass MainMenu(Menu):def action(self):yield "Hello World"# token需和微信后台填写一致
settings = {"url" :"/weixin","port" : 8080,"token" : "WQif56gU" }
start(MainMenu(), settings)
2. 微信计算器
- 简易乘法计算器
from vlang.menu import Menu
from vlang.server import startclass MainMenu(Menu):def action(self):num0 = yield "请输入因数1:" #用户输入将保存在num0里.num1 = yield "请输入因数2:"num2 = float(num0) * float(num1)yield "计算结果:\n {0} x {1} = {2}".format(num0,num1,num2)settings = {"url" :"/weixin","port" : 8080,"token" : "WQif56gU" }
start(MainMenu(), settings)
- 带有二级级菜单的四则运算器,能计算加减法,乘法。
from vlang.menu import Menu
from vlang.server import startclass MainMenu(Menu):def tag(self):self.name = "计算器"def action(self):reply = yield self.makeMenu() # 根据子菜单的名字,生成菜单列表yield self.autoJump(reply) # 根据回复,跳转到对应菜单class Menu_1(Menu):def tag(self):self.name = "加减法"def action(self):reply = yield self.makeMenu()yield self.autoJump(reply)class Menu_1_1(Menu):def tag(self):self.name = "加法"def action(self):num0 = yield "请输入加数1:"num1 = yield "请输入加数2:"num2 = float(num0) + float(num1)yield "计算结果:\n {0} + {1} = {2}".format(num0, num1, num2) class Menu_1_2(Menu):def tag(self):self.name = "减法"def action(self):num0 = yield "请输入被减数:"num1 = yield "请输入减数:"num2 = float(num0) - float(num1)reply = yield '''计算结果:\n {0} - {1} = {2}
回复“ 0 ”可回到主菜单'''.format(num0, num1, num2) if reply == "0" : yield MainMenu # 跳转到指定菜单class Menu_2(Menu):def tag(self):self.name = "乘法"def action(self):num0 = yield "请输入因数1:"num1 = yield "请输入因数2:"num2 = float(num0) * float(num1)yield "计算结果:\n {0} x {1} = {2}".format(num0, num1, num2)# 链接菜单
menuTree = MainMenu() # 新建一个菜单树
menuTree.add(Menu_1) # 链接一级菜单
menuTree.add(Menu_2)
menuTree.Menu_1.add(Menu_1_1) # 链接二级菜单
menuTree.Menu_1.add(Menu_1_2)# 设置并启动服务器
settings = {"url" :"/weixin","port" : 8080,"token" : "WQif56gU" }
start(menuTree, settings)
Menu
在vLang中,微信项目是由一个个菜单链接而构成的, 本节将详细介绍vLang中菜单的结构,链接,启动。
结构
菜单是继承自vlang.menu.Menu的类,并需重载其action()方法,用来接收,处理,回复微信消息。
在多级菜单中,还需重载tag()方法,用以保存一些设置,目前仅有self.name这一项,用以指定菜单的名字。
from vlang.menu import Menuclass MainMenu(Menu):def tag(self):#用以保存本菜单的设置。self.name = "主菜单"def action(self):#当收到用户消息时,vLang会调用对应菜单的action(),并传入用户消息。pass
链接
为了简化开发,vLang支持多级菜单。菜单与其子菜单的链接使用add(Menu)。
在上文 四则运算器 一例中,
menuTree = MainMenu() #新建一个菜单树,必须为Menu类的实例。
menuTree.add(Menu_1) #链接一级菜单
menuTree.add(Menu_2)
menuTree.Menu_1.add(Menu_1_1) #链接二级菜单
menuTree.Menu_1.add(Menu_1_2)
启动
vlang.server.start(menuTree, settings)
其中,
menuTree是Menu类的实例,如果有多级菜单,启动前需先链接菜单。
settings是一个包含许多设置的字典
settings = {"url" :"/weixin", "port" : 8080, #默认为 80 端口"ip":"127.0.0.1", #默认为"" , 绑定所有地址,"token" : "WQif56gU",#在微信公众号官网设置的token"work" : "WQif56gU"} #可同时服务的用户数量,也是线程数量,默认为10
yield!
Python中 yield 关键字具有神奇的魔力。
vLang中,yield用于: 回复/接收消息,跳转菜单
回复
- 给用户发送消息:
yield "您好,欢迎光临!"
- 给用户发送消息,并得到回复:
reply = yield "请输入用户名:"
- 缓存一段话,暂不发给用户,程序将继续执行至下一个yield语句处。一般用于缓存一段错误信息:
def action(self):while(True):try:reply = yield "请输入整数:"num = int(reply)breakexcept ValueError:yield "您输入的不是整数,请重试\n", self.BUFFER # 缓存一段话,后面添加个self.buffer即可。
如果用户输入了”haha”,int(reply)将抛出ValueError异常
程序实际回复:
您输入的不是整数,请重试
请输入整数:
可缓存多段文本,当程序继续执行到没有self.buffer的yield语句时,vLang才会将缓存区文本发送给用户。
跳转
以 入门 小节中,四则运算器 为例。
- 跳转到另一个菜单:
yield Menu_1_2
能够传入Menu,或者Menu的实例。
例如,跳转到主菜单可以这样写:
yield MainMenu
也可以这样写:
yield menuTree
- 跳转到现行菜单的开始点:
yield self
特别的,如果没有显式指定下一个菜单,当action() 执行完后,默认跳转到现行菜单的开始点。
- 跳转到父菜单:
yield self.baseMenu
- 当然,跳转菜单的同时也能给用户回复消息,也缓存一段信息:
yield "充值失败!", MainMenu , self.buffer
不过,上面的三个参数得 按顺序 写。其原型是:(String , Menu , self.buffer)
版本
目前版本为 0.2.1 ,是开源的第一个版本。
下个版本中,将会有如下改进:
- autoJump() 支持模糊匹配
- 加入日志模块
- 加入消息加解密功能
- 支持多媒体消息,如语音,图片,图文,地理位置等
未来版本中,可能有如下改进:
- 在80端口处提供一个管理员网页,方便设置,管理
- 提供幸运大转盘,刮刮卡等等常见活动
- 接入 其他开源项目,以支持中文分词和情感分析
- ……
- 非常期待您的建议!
关于
谢谢您的耐心阅读!
vLang-基于模型的微信开发框架,使用Python相关推荐
- 《微信公众平台与小程序开发——从零搭建整套系统》第5章 基于CodeIgniter的微信公众平台开发框架
第5章 基于CodeIgniter的微信公众平台开发框架 本章将介绍一个PHP框架-CodeIgniter,并在此框架基础上做简单的改造以适应后续的扩展,并新增了微信公众号开发相关的SDK. 5.1 ...
- python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线、多个模型的校准曲线(calibration curve)
python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线.多个模型的校准曲线(calibration curve) 目录
- python基于模型的预测概率和标签信息可视化ROC曲线、编写自定义函数计算约登值、寻找最佳阈值(threshold、cutoff)、可视化ROC曲线并在曲线中标记最佳阈值及其数值标签
python基于模型的预测概率和标签信息可视化ROC曲线.编写自定义函数计算约登值.寻找最佳阈值(threshold.cutoff).可视化ROC曲线并在曲线中标记最佳阈值及其数值标签 目录
- 强化学习70年演进:从精确动态规划到基于模型
作者 | Nathan Lambert 译者 | 泓礼 编辑 | 夕颜 出品 | AI科技大本营(ID: rgznai100) [导读]这是一份帮你了解强化学习算法本质的资源,无需浏览大量文档,没有一 ...
- Serverless 实战 —— 基于 Serverless + 企业微信打造 nCoV 疫情监控小助手
基于 Serverless + 企业微信打造 nCoV 疫情监控小助手 作者:Tabor 最近的一些疫情信息很让人揪心,为了方便大家掌握疫情信息,在空闲之余做了一个关于 nCoV 的疫情监控小助手.主 ...
- 搭建属于自己的基于ChatGPT的微信聊天机器人(方法)
文章目录 1. GitHub开源项目 2. 前期准备 (1) 获取openAI API key 3. 准备部署环境 (1) 配置代理 (2) 配置python环境 4. 部署 (1) 修改配置文件 ( ...
- 厉害了!几行代码搞定ML模型,低代码机器学习Python库正式开源
点击上方"Python高校",关注 文末干货立马到手 机器之心编辑部 PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想 ...
- 很燃基于掘金量化平台的《Python化易战新书介
原 很燃!基于掘金量化平台的<Python量化交易实战>新书简介 内容简介: 在目前不断变化.蓬勃发展的中国资本市场,量化投资作为新兴的投资方法,引来越来越多的关注,使用量化投资技术的证券 ...
- java计算机毕业设计基于安卓Android/微信小程序的智能停车场管理系统APP
项目介绍 随着计算机的普及,国际上智能停车场管理系统前景良好,网上用户停车的出现,证明了智能停车场管理系统具有良好的前景.在当今世界之中,随着科学技术的不断发展和计算机越来越普及,运用计算机对系统进行 ...
最新文章
- PL/SQL学习笔记-常量变量及数据类型初步
- 基于Spring+SpringMvc实现的足球队管理系统
- 关于SQL语言的初步认识
- python绘制灰度图片直方图-opencv+python 统计及绘制直方图
- 7.LARS lasso 模型
- 渠道优化+转化提升+客户成功=业绩驱动引擎
- Asya And Kittens
- File stdin , line 1
- 阿里P7亲自教你!我的头条面试经历分享,完整PDF
- 安卓dts音频解码_家庭影院三维音效技术应用之DTS:X摆位
- 2016 java二级试题_2016计算机二级考试Java试题及答案
- 中国条码解码器市场趋势报告、技术动态创新及市场预测
- python调用perl_文本处理,用perl 还是python?
- 六个建议防止SQL注入式攻击
- STM32F030外部中断配置
- Booth算法乘法器
- linux宝塔面板是什么,宝塔面板是什么
- mysql将小数取整,mysql的取整函数
- linux运行pppd,linux pppd 连接成功 还是 没有网
- Service Mesh对比:Istio与Linkerd
热门文章
- 模电笔记2 二极管 稳压二极管
- CPU和内存的电路设计01-非门电路
- 三星s3 android8.0,三星最新安卓8.0升级计划:这款老机子有戏
- 2023年有哪些值得推荐的蓝牙耳机?小米|南卡|JBL等等高性价比蓝牙耳机推荐
- java控制台如何输入一段代码
- sci影响因子小于1计算机,影响因子小于1的期刊_影响因子_柳叶刀影响因子多少...
- 动态创建弹框el-dialog
- 论文翻译3-视频流SR技术分析
- Vue+Echarts地图消失(高度变成0)的完美解决方案
- 域名过期 脚本_域名宝已过期! …还是垃圾?