写点什么

百度开放云骑士之夜:“基于百度开放云的营销插件平台”的作品简析

  • 2013-07-11
  • 本文字数:1816 字

    阅读完需:约 6 分钟

在 6 号的百度开放云骑士之夜的活动中,有幸在 36 小时的编码之后获得了比赛的一等奖,这里写下自己在整个比赛中的感受以及作品的技术选型方案。

创意背景

营销总是商业活动中一个重要的环节,而微博、微信的广泛普及能够让商家的营销活动以更低的成本获取更好的效果,虽然微信和微博都开放了他们的API,但是并不是每一个商家都有自己的技术力量来做实现,因此项目的思路是基于百度开放云(BAE)的计算能力结合这些社交平台的API,让营销的活动更加简单。商家只需要在平台之上,通过一些简单的配置即可将一个完善的营销CMS 跑起来。

技术选型

36 个小时的时间有限,所以实现中以微信的 API 为主。对于微信,我认为他是一个 I/O 的系统,项目期望能够在 I(输入)环节之前加入 Trigger,在 O(输出)之前加入 Response,即一个完整的流程应该是:用户输入信息,触发相应的应答机制。

每一个的触发和回复都将是一个具体的环节,由一组插件负责进行。那么,在此之上可以将接口开放,让一般的开发者能够也利用这个平台提交自己的插件,进而形成一个插件市场。

对于这样的一个平台,他需要具有如下的能力:

  1. 开发的插件架构
  2. 动态的路由配置
  3. 上下文相关的用户命令
  4. 强大的 API 负载能力

比赛时使用 Python 语言,框架选取的 Flask,由于 Flask 框架简单、可靠、轻量级,适合做为 API 的调用;服务器端的需求是在短时间内选择一个简单、可靠、可扩展的平台来支持程序的运行,所以当时就直接上手了 BAE,原因如下:

  1. 现场有工程师支持;在比赛的现场有百度开放云的工程师做支持,方便在遇到问题的时候快速解决;
  2. 简单易用:BAE 支持 Python 的环境,程序经过少许的改动就能直接运行;
  3. 动态扩展:不用担心系统的扩展需求,这一步的实现可以交由 BAE 来实现。

应用流程

在系统启动以后,会通过app.add_url_rule的方式自动加载所有公司的 API 端(以 http://base_url/v1/access_token 的方式暴露)。base_url 将会作为微信的服务器端的接入口,用户把系统中产生的 base_url 和 access_token 填入微信的后台中。

当一个请求过来之后,系统会在插件市场中自动寻找对应的插件,一般一个插件应该包含如下的几个内容:

  1. match 函数:用来相应请求,如果属于插件的处理范围之内则返回 True,否则返回 False;
  2. response 函数:系统会把用户的信息和上下文参数发送给这个函数,按照微信的格式进行回复;
  3. 两个函数的前端展示 / 设置代码

目前完成的的插件包括:

  1. 触发:位置匹配、文本正则、用户订阅、用户退订、用户发来音频
  2. 回复:API 查询、返回所有支持命令、后退、邮件通知、回复音乐、回复文本

用户可以通过界面创建简单的界面创建命令,命令是支持上下文以及嵌套的,例如,在比赛时,通过百度地图的 API 插件设置位置匹配:

由于插件方式都是统一的接口,用户可以通过满足接口的方式来实现自己的插件,后期可以把插件上传到系统端则形成市场,并且每一条用户的回复都会对应一个具体的命令,系统会记录对应的上下文等资源,这样的好处是第三方的插件提交上来以后能够实现按照“调用次数收费分成”的方式。

注意

需要明确的是 PaaS 平台由于自身的特性,所以不能完全兼容本地的开发环境,因此需要根据 BAE 平台的特点对代码进行修改,其中包括:

  1. 依赖的导入

在 BAE Python 的环境中,已经包含了一些常见的依赖,例如:BeautifulSoup、Jinja2、pytz 等,但是有一些项目需要,而在预装中没有的模块需要按照如下的方式来导入:

  1. 本地开发环境安装 virtualenv
  2. 使用 pip 安装需要的依赖
  3. 将 ENV 目录下的依赖路径复制到项目下
  1. 线上线下环境区分

通过'SERVER_SOFTWARE' not in os.environ:来区分线上和线下环境区分;
3. 测试

在用户上传之后,BAE 会在平台端对系统中改动的代码自动跑一遍 lint 的测试,主要是对于系统禁用的函数、功能、以及语法的检查,这个过程和代码的大小成正比,失败时只会在 console 端显示错误日志。
4. 本地写入

为了支持应用的分布式扩展,BAE 禁止应用对本地文件系统的写操作。创建临时文件,可通过 bae.core.const.APP_TMPDIR 获取临时目录的路径,也可以通过 NFS 来支持对于网络文件系统的支持,能够实现本地文件的写入。
5. 设置 url 映射 由于 BAE 在路由层面的特性,需要我们自己来设置 app.conf 对应的映射关系,例如:

复制代码
handlers:
- url : /static/(.)
script : /static/$1
- url : /.
script: index.py

在 36 个小时的代码之后完成了项目的原型,最大的感受还是:通过开放的标准、完善的平台,个人的团队也能够做出一些有意思的事情!

2013-07-11 03:461454
用户头像

发布了 89 篇内容, 共 36.5 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

Demo:第三章:权限框架spring security oauth2

爱好编程进阶

程序员 后端开发

秒云 (元来云志)获邀加入中国开源云联盟,共筑开源生态

MIAOYUN

开源 开源生态 开源中国

使用APICloud & MobTech SDK 快速实现分享到社交平台功能

YonBuilder低代码开发平台

APP开发 APICloud MobTech袤博科技 社交分享

【架构视角】一篇文章带你彻底吃透Spring

潘大壮

spring 后端 springboot 后端开发

OpenHarmony新增两个分布式能力!快来了解~

科技汇

web前端培训React 中Router的必备知识点

@零度

前端开发 React

Go 语言入门很简单:net/http 包

宇宙之一粟

HTTP Go web 4月月更

git(8)Git 与其他系统

爱好编程进阶

Java 程序员 后端开发

Hibernate实现CRUD(附项目源码)

爱好编程进阶

Java 程序员 后端开发

Java培训MySQL体系构架、存储引擎和索引结构

@零度

MySQL JAVA开发

Docker Swarm从部署到基本操作

爱好编程进阶

Java 程序员 后端开发

GitHub上超火的阿里调优专家的677页Java性能调优笔记,已让我拿下5个offer

爱好编程进阶

Java 程序员 后端开发

JAVA API调用elasticsearch实现基本增删改查

爱好编程进阶

程序员 后端开发

低通信量是筛选分布式多方安全计算常用安全协议方案的先决条件

易观分析

安全多方计算 低通信量

聊聊如何在华为云IoT平台进行产品开发

华为云开发者联盟

物联网平台 IoT 华为云 iotda 设备接入

DM 是如何处理 DML 的丨TiDB 工具分享

PingCAP

云电脑的四重守护,安全有谱

天翼云开发者社区

安全 云电脑

网易云信 QUIC 应用优化实践

网易云信

音视频开发

使用xdebug调试php详细教程

CRMEB

dubbo实战之二:与SpringBoot集成

爱好编程进阶

Java 程序员 后端开发

简述数仓的时间域函数

华为云开发者联盟

数据库 时间 时间戳 GaussDB(DWS) 时间域函数

npm install xxxx --legacy-peer-deps命令是什么?

华为云开发者联盟

前端 npm install 依赖树 对等依赖关系

HDI硬件设备接口介绍

科技汇

java不使用客户端授权密码直接用账号密码发送带附件的邮件

爱好编程进阶

程序员 后端开发

Java中当对象不再使用时,不赋值为null会导致什么后果?

爱好编程进阶

Java 程序员 后端开发

curl 的用法指南

爱好编程进阶

Java 程序员 后端开发

Java-进阶:集合框架1

爱好编程进阶

程序员 后端开发

Java8新特性-Optional

爱好编程进阶

Java 程序员 后端开发

助力提升研发效能的“黄金三角”

博文视点Broadview

百度开放云骑士之夜:“基于百度开放云的营销插件平台”的作品简析_Python_水羽哲_InfoQ精选文章