10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

基于 SAE 的微博应用开发

  • 2010-12-15
  • 本文字数:2699 字

    阅读完需:约 9 分钟

之前在微博开发者大会上做过一个演讲,不过因为时间和形式的问题,忽略了很多细节。正好 InfoQ 的同学问我能不能写一篇文章,于是就有了本文。文章分三个部分,介绍篇讲 SAE 的基本情况;环境篇讲 SAE 和标准 PHP 环境的主要区别;实践篇则提供了一个完整的微博应用开发实例。

介绍篇

Sina App Engine (简称 SAE)是由新浪网研发中心出品的云计算平台,也是国内第一个公有云平台。从 09 年 11 月 alpha 版本发布到今年 8 月 beta 版上线,SAE 已经进入了稳定运行的阶段。即使是在我们严格控制邀请码的情况下,也已经拥有了超过 4000 的开发者和超过 3000 的应用。光是新浪微博的应用频道,就有 40 个以上的应用运行在 SAE 上,而在 Web 应用的 Top10 中,有 7 个都运行于 SAE。

  • SAE 可以降低开发者在硬件方面的投入,省钱;
  • 可以加快应用开发的速度,省时间;
  • 可以提供门户级别的可靠性,让大家专注于应用本身,省心。
  • 特别适合于没有专门的架构团队和运维团队的公司和个人使用。

环境篇

SAE 采用大家熟悉的 PHP+Mysql 作为主要环境。所以在 SAE 上开发应用并不需要学习新的知识,只需要注意一些细节就可以了。移植一个现有的 PHP 应用到 SAE 上是很简单的事情,之前我将 WordPress 移植到 SAE 上时就只花了 3 个小时。

本地文件操作

在 SAE 上不允许对本地文件系统进行写操作。这既是系统架构的要求,也是为了保证代码的安全和应用的性能。

我们提供了 TMPFS 服务来解决临时文件的问题。TMPFS 服务为开发者提供了一个目录,开发者可以将文件写到这个目录下,但是当本次请求结束时,这个文件将不再存在。

为了方便大家迁移项目,我们还允许大家利用 PHP Wrapper 通过文件系统函数来操作 SAE 的 Memcache 和 Storage。大家知道 Smarty 是很依赖文件系统的模板,但是通过 Wrapper 方式,只需要修改非常少的代码,就可以让 Smarty 改为使用 SAE 的 Memcache 服务。( https://code.google.com/p/smarty4sae/

数据抓取

出于安全原因,SAE 不允许应用直接抓取外部的数据。所有对外的抓取操作,都需要使用 Fetchurl 服务。相对于 CURL 来做,封装后的 Fetchurl 服务其实更为简单,也可以支持自定义头和 cookie 等操作。

数据库

SAE 使用的是标准的 Mysql 数据库,所以以 Mysql 为核心的应用不用做任何修改就能使用。Mysql 的 host 和端口信息我们通过环境变量提供,直接在 Runtime 中获取就可以了。

我们强烈建议大家使用 SaeMysql class 来操作 SAE 的数据库,因为这个 class 默认进行了主从分离,可以避免在高并发时出现锁表等问题。

分布式存储

由于不允许对本地文件系统进行写操作,我们提供了分布式存储服务来帮大家存放一些应用运行过程中产生的文件,比如用户上传的图片等。使用 SaeStorage 可以方便的保持这些内容并生成可访问的 URL。

在了解了以上需要注意的地方后,大家就可以很容易的在 SAE 上开发应用了。

实践篇

接下来我们来看看如何从头到尾开发一个简单的微博应用。

应用目标

先说说我们要做的应用。微博开放平台最近新增了一个接口,可以查询当前用户发布的某一条微博的转发信息。在微博平台上,信息通过转发进行链式传播,转发信息对微博营销来说是很重要的;而目前微博 Web 版本并不显示这些信息。所以我们想做一个应用,允许用户可以查看某条微博的转发情况。

具体做法如下:

  • 首先要取得用户授权
  • 取得当前用户的最近若干条微博,添加查看链接
  • 获取并展示被选中微博的转发信息

准备工作

在开发应用之前,你需要有新浪微博的账号和 SAE 的账号。微博的账号可以在这里注册;SAE 的账号在这里可以注册

有了微博账号之后,就可以在微博开放平台创建应用了。

这部分微博开放平台上有详细的图文说明,就不再重复了。完成应用的创建后,可以得到应用App Key 和App Secret。

在SAE 上创建应用

使用之前注册的SAE 账号(不同于微博账号,是完全独立账号)登入SAE,在“我的应用”下,“创建应用”。

我们创建了一个appname 为relink 的应用,它可以通过relink.sinaapp.com 进行访问。

在SAE 上写微博应用不用从头开始,有方便快捷的应用向导可用。

在“应用向导”下选择“社会化应用”分类,点击“新浪微博OAuth 框架”下边的“安装”按钮。

选择安装到应用“relink”下,安装为新版本1。

填写好我们从微博开放平台得到的微博应用的AppKey 和AppSecret。

至此,我们已经完成了最基本的微博应用。

访问relink.sinaapp.com,已经可以进行应用的授权和当前用户最新微博的列表了。

编写代码

接下来我们修改weiblolist.php 的代码,加入“查看转发”连接。

进入应用“relink”的管理页面,点击左侧的“代码管理”,在右侧的“操作”列点击“编辑代码”,启用SAE 的在线编辑器。

点击左侧的文件名,进入代码编辑。

我们给现在的微博列表添加一个“查看转发”的链接。

Ctrl+S 发布代码,刷新页面看效果。

在点击编辑器左侧的新建文件按钮,创建 show.php。

编写展示代码

复制代码
<?php
// 载入共用函数和配置
session_start();
include_once( 'config.php' );
include_once( 'saet.ex.class.php' );
header('Content-Type:text/html; charset=utf-8');
// 创建 SaeTClient 对象
$c = new SaeTClient( WB_AKEY , WB_SKEY , $_SESSION['last_key']['oauth_token'] , $_SESSION['last_key']['oauth_token_secret'] );
// 获取并展示转发信息
if( $items = $c->oauth->get('http://api.t.sina.com.cn/statuses/repost_timeline.json' , array('id'=>$_REQUEST['sid'])) ):?>
<div style="border:1px solid red;padding:5px;margin:5px"> 原始微博 - <?=$items[0]['retweeted_status']['user']['name']?>: <?=$items[0]['retweeted_status']['text']?></div>
<?foreach( $items as $item ):?>
<div style="border:1px solid #eee;padding:5px;margin:5px"><?=$item['user']['name']?>: <?=$item['text']?></div>
<?endforeach;?>
<?php endif; ?>

点击之前页面的“查看转发”链接,即可查看到相关信息。

小结

到这里,我们已经完成了应用的开发。虽然应用本身很简单,但是完整的演示了整个开发流程。期待大家都能在SAE 上开发出优秀的微博应用。微博开放平台的接口可以查阅 API 文档,SAE 提供的 API 可以访问 http://apidoc.sinaapp.com/

关于作者

陈理捷(EasyChen),资深 Web 应用架构师,在 facebook、人人和新浪微博开放平台拥有数十个应用,累计用户近百万。09 年加入新浪研发中心,主导新浪云计算平台的战略规划和产品设计,现任 SAE 产品经理。


感谢张凯峰的策划以及对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2010-12-15 00:007555

评论

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

全程干货,用 python 下载某站全部【免抠图片】,图片背景透明,格式PNG

梦想橡皮擦

12月日更

如何在 ShardingSphere 中开发自己的 DistSQL

SphereEx

Java 数据库 ShardingSphere database SphereEx

Linux学习方法《Linux一学就会》Linux系统进程管理

侠盗安全

Linux linux运维 运维工程师 云计算架构师

还在用BeanUtils拷贝对象?MapStruct才是王者!【附源码】

阿Q说代码

Java MapStruct 签约计划第二季 深拷贝与浅拷贝

『上线』OpenSEC SIGs 终于成立了!

SphereEx

开源社区 ShardingSphere SphereEx 中文开源 OpenSEC

后端开发实战总结 | 签约计划第二季|后端

阿Q说代码

内容合集 签约计划第二季 技术专题合集

实战篇:断点续传?文件秒传?手撸大文件上传

阿Q说代码

断点续传 签约计划第二季 文件秒传 文件分块 文件合并

语法糖甜不甜?巧用枚举实现“状态”转换限制

阿Q说代码

枚举 签约计划第二季 语法糖 订单状态转换

IoT Stack 2.0升级物模型及数据交互协议, 大幅提升物联网方案交付速度

百度大脑

人工智能 百度 物联网

【量化】股市技术分析利器之TA-Lib(一)

恒生LIGHT云社区

量化投资 量化

Java中抽象类和接口的区别

编程江湖

JAVA开发 java编程

Android技术分享| ViewPager2离屏加载,实现抖音上下视频滑动

anyRTC开发者

android 音视频 移动开发 ViewPager 视频滑动

看了这么多年西游记,你可知道孙悟空是如何召唤土地公公的吗?

阿Q说代码

Java 观察者模式 签约计划第二季 事件通知机制

恒源云(GPUSHARE)_GPU白嫖大法来袭!

恒源云

深度学习 gpu 算力加速

PackML从会到不会——标签(3)

陈的错题集

标准化 PackML

Spark从入门到精通

冇先生

看FusionInsight Spark如何支持JDBCServer的多实例特性

华为云开发者联盟

大数据 SQL语句 FusionInsight Spark JDBCServer 多实例

Flink CDC 系列 - 构建 MySQL 和 Postgres 上的 Streaming ETL

Apache Flink

大数据 flink 编程 后端 实时计算

Flink 是如何统一批流引擎的

编程江湖

大数据 flink

实战篇:Security+JWT组合拳 | 附源码

阿Q说代码

spring security JWT 签约计划第二季 权限验证

秒过!度目智慧通行让常态化防疫更高效

百度大脑

人工智能 人脸识别

「Spark从精通到重新入门(一)」Spark 中不可不知的动态优化

尔达Erda

云计算 大数据 spark 开发者 感悟

对象存储手把手教七 | 存储空间授权策略 Bucket Policy

QingStor分布式存储

分布式系统 对象存储 分布式存储 分布式,

大数据中不同文件格式的比较

吴脑的键客

大数据 云存储

【活动报名】Apache ShardingSphere Dev Meetup 重启!

SphereEx

开源项目 开源社区 ShardingSphere Meetup SphereEx

如果还不懂如何使用 Consumer 接口,来公司我当面给你讲!

阿Q说代码

函数式接口 签约计划第二季 consumer 实战讲解 supplier

长连接网关技术专题(六):石墨文档单机50万WebSocket长连接架构实践

JackJiang

websocket 即时通讯 IM 网关

高校企业双向赋能,首届飞桨启航菁英计划圆满结束

百度大脑

人工智能 百度 飞桨

12.7直播预告|「淼懂·观测云实践学堂」全新栏目上线!带你走进观测云的精彩世界!

观测云

可观测性 直播 可观测

看了同事写的代码,我竟然开始默默的模仿了。。。

阿Q说代码

策略模式 多态 签约计划第二季 自定义参数解析器 统一验签

用户登录设计之双token设计

CRMEB

基于SAE的微博应用开发_Java_陈理捷_InfoQ精选文章