QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

  • 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:461112
用户头像

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

关注

评论

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

程序员培训后怎么能够在一线城市找到工作?

小谷哥

架构训练营模块四作业

gigifrog

架构训练营

前端程序员就业方向有哪些?

小谷哥

Intel官方回应:处理器降价消息不实!全力减少库存

科技之家

深度 | Web 3.0时代去中心化IM 的挑战与思考

环信

Web3.0 环信im

基于 Flink+Pravega 的游戏服务器监控与调节系统设计

Apache Flink

大数据 flink 实时计算

第三届腾讯Light·技术公益创造营正式启动:聚焦三大议题,探索技术公益可持续路径​

OpenCloudOS

开源

为啥要对jvm做优化

华为云开发者联盟

开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

前端技术培训学习的就业怎么样?

小谷哥

大数据软件开发培训中心哪家好

小谷哥

2/8 19:00 直播 | StarRocks 实战系列第一期--部署&导入

StarRocks

数据库

大文件传输软件的优势有哪些?-镭速传输

镭速

MoBYv2AL :结合 BOYL 和 MoCo 的主动学习算法

Zilliz

前端培训机构毕业后该注意什么?

小谷哥

深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」

C++后台开发

nginx 负载均衡 中间件 后端开发 Linux服务器开发

干货|常用3D建模软件有哪些?

Finovy Cloud

3DMAX Autodesk Maya 3D软件

青云 KubeSphere 与 OpenCloudOS 完成技术兼容互认证

OpenCloudOS

云原生 操作系统 KubeSphere

我发现买不起自己出版的图书了,这到底是咋回事?

冰河

程序员 并发编程 高并发 架构师 编程开发

喜讯!云起无垠实力入选多项中国网络安全行业全景图

云起无垠

【1.27-2.3】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线

极狐GitLab

DevOps pipeline ChatOps webhook ChatGPT

快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)

汀丶人工智能

Python 数据挖掘 数据分析 pandas

跬智信息 (Kyligence) 入选2022年度上海市优质大数据服务供应商目录

Kyligence

大数据 数据分析

全息电网 数字孪生智慧电网Web3D运维系统

2D3D前端可视化开发

智慧电网 数字电网 智能电网 数字孪生智慧电网 智慧电网三维可视化

小白科普丨何为树、二叉树和森林

华为云开发者联盟

开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

金兔迎福报、新春第一炮【2022 中国开源年度报告】!

腾源会

开源

提名倒计时! | 2022 龙蜥社区优秀贡献者

OpenAnolis小助手

技术 操作系统 龙蜥社区 开源贡献者 奖项报名

抖音春晚直播观看人数破1.3亿,火山引擎技术助力“新年俗”新体验

火山引擎边缘云

云原生 CDN 边缘计算 抖音 视频云

对话阿里云叔同:如何看待 2022 年云原生的发展,2023 年有哪些值得关注的技术?

阿里巴巴中间件

阿里云 云原生

C#/VB.NET 在Excel中添加水印

在下毛毛雨

C# .net Excel 添加水印

官宣:计算中间件 Apache Linkis 正式毕业成为 Apache 顶级项目

腾源会

开源

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