写点什么

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

评论

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

如何通过Java 代码设置 Word 文档页边距

在下毛毛雨

C# .net word文档 页边距

低代码选型,论协同开发的重要性

葡萄城技术团队

【监控运维】消息轨迹全景图详解-独门秘籍——实践类

阿里云AIoT

运维 监控 物联网 数据可视化 消息中间件

Python 基础练习题(二)

漫步桔田

CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

墨菲安全

漏洞分析 软件供应链安全

IoT物联网设备端硬件上云技术方案详解——实践类

阿里云AIoT

物联网 存储 开发工具 数据采集 传感器

墨菲安全参与信息通信软件供应链安全社区成员大会并获自主研发创新成果奖

墨菲安全

供应链安全 安全情报

当 Amazon Lambda 遇上 Apache APISIX 可以擦出什么火花?

API7.ai 技术团队

AWS api 网关 Lambda s APISIX

设备上报二进制数据在 IoT 平台解析实践——实践类

阿里云AIoT

小程序 监控 物联网 传感器 测试技术

2023年Java面试正确姿势(1000+面试题附答案解析)

Java编程日记

Java 架构 后端 java程序员 java面试

LoRaWAN设备接入阿里云IoT企业物联网平台实战——实践类

阿里云AIoT

物联网 传感器

CVE-2023-23752 Joomla未授权访问漏洞分析

墨菲安全

漏洞分析 软件供应链安全

聊聊 HTAP 的前世今生

墨天轮

数据库 OLAP TiDB OLTP HTAP

大前端CPU优化技术--SIMD技术

江湖修行

simd neon

基于 IoT物联网 + 表格存储DB + DataV 搭建实时环境监控大屏——实践类

阿里云AIoT

数据库 监控 物联网 存储 数据可视化

脑洞|ChatGPT加持下,ChatOps将如何革新团队协作与运维管理?

极狐GitLab

团队管理 DevOps 团队协作 ChatOps ChatGPT

TDengine 发布主流时序数据库对比分析报告,与 InfluxDB、TimescaleDB 展开全面对比测试

TDengine

tdengine 时序数据库 数据库·

电信NB-IoT设备对接阿里云IoT平台实战——实践类

阿里云AIoT

大数据 监控 物联网 存储 数据格式

行业分析| OA系统中的实时通讯

anyRTC开发者

音视频 远程办公 视频会议 视频通话 OA

Python基础练习题(一)

漫步桔田

云小课|MRS数据分析-通过Spark Streaming作业消费Kafka数据

华为云开发者联盟

大数据 数据分析 华为云 企业号 2 月 PK 榜 华为云开发者联盟

ZBC通证月内已翻倍,Nautilus Chain 上线前夕的“开门红”

西柚子

智多星RPA重塑业务流程,全面赋能企业商业创新

YonBuilder低代码开发平台

软件供应链受威胁下的应对方法——供应链安全管理平台的五大工具能力

墨菲安全

SCA 供应链安全

一图读懂 | ChatGPT热潮背后,金融行业大模型应用路在何方?——金融行业大模型应用探索

易观分析

金融 科技

代码的发展与终结

SoFlu软件机器人

AntDB数据库再获奖,亚信安慧被评为“2022 PostgreSQL中国最佳创新企业”

亚信AntDB数据库

数据库 AntDB 国产数据库 AntDB数据库 企业号 2 月 PK 榜

和狂飙的 ChatGPT 聊聊软件开发的现在与未来

极狐GitLab

DevOps 研发效能 DevSecOps 极狐GitLab ChatGPT

Tapdata 和 Databend 数仓数据同步实战

Databend

数字经济赋能乡村建设,助力乡村全面振兴

加入高科技仿生人

低代码 数字经济 乡村振兴 农村

工业数字孪生:西门子工业网络与设备虚拟调试案例(TIA+MCD+SINETPLAN)

工赋开发者社区

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