写点什么

基于 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:007251

评论

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

大宗商品贸易集团数据治理实践,夯实数字基座 | 数字化标杆

袋鼠云数栈

数字化转型 数据治理 数据资产 数据开发 大宗贸易

用好语言模型:temperature、top-p等核心参数解析

Baihai IDP

程序员 AI 大模型 白海科技

Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现

情感语音识别:技术发展与未来趋势

来自四九城儿

以微模块+液冷重塑绿色智算中心,新华三亮相CDCC数据中心标准大会

Geek_2d6073

情感语音识别:挑战与未来发展方向

来自四九城儿

营销数智化解析第6期:用友BIP | CRM 销售自动化场景

用友BIP

营销数智化

ShareMouse 激活最新:mac鼠标键盘共享神器

胖墩儿不胖y

Mac软件 共享鼠标的工具 鼠标共享

用这5招,Java 校验 SQL 语句的合法性

秃头小帅oi

前端 低代码 Java’

强大的家装和景观设计 DreamPlan Plus激活最新版

mac大玩家j

Mac软件 家居设计工具 室内设计软件

软件测试/测试开发/人工智能丨多维度的测试场景覆盖

测试人

人工智能 软件测试

如何使用 CSS columns 布局来实现自动分组布局?

伤感汤姆布利柏

CSS 前端

选择云服务器的五大考虑因素:性能、成本与安全性

一只扑棱蛾子

云服务器

Curve v2.7 发布:支持 Hadoop SDK,助力大数据存储降本提效背景

OpenCurve

开源 文件存储 分布式存储 块存储

使用Python调用API接口获取小红书笔记详情数据

Noah

数十万QPS,百度热点大事件搜索的稳定性保障实践

百度Geek说

百度搜索 稳定性保障 阿拉丁 企业号11月PK榜

Java Stream中的API你都用过了吗?

EquatorCoco

Java 架构 stream

线上ES集群参数配置引起的业务异常案例分析

vivo互联网技术

性能 Elastic Search

DEVONthink for Mac(mac文件管理工具) v3.9.4免激活版

iMac小白

FP-Growth算法全解析:理论基础与实战指导

EquatorCoco

Python 算法 FP&A

ITSS会议周丨新华三参编运维国标发布,探索技术服务发展新路径

Geek_2d6073

如何在AppLink配置金蝶云星空预算使用单流程

RestCloud

APPlink

一个ETL流程搞定数据脱敏

RestCloud

ETL 数据脱敏

从规范管控到体验升级,看银行业如何把招聘玩出新花样?

用友BIP

数智招聘

小红书API接口测试 | 小红书笔记详情 API 接口测试指南

Noah

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