MySpace OpenApi 在MySpace开发者平台(MDP)上构建 OpenSocial

阅读完本文后,您应对 OpenSocial 及其如何融入MySpace 中有个大致了解。

MySpace 为什么要构建 OpenSocial?

我们先来回顾一下我们走过的路。MySpace 在由用户编写挂件程序方面具有非常有趣的历史。尊敬的读者,您可能一路见证了我们的这段历史。

MySpace 自首次发布时起就提供用户编码的可安装的JavaScript 程序。如果您从一开始就一直关注我们,您可能还记得最初您的用户空间就是一张空白画布,您可以在该画布上用 HTML、JavaScript 和 CSS 随意组成的调色板进行描绘。您可以不受任何限制地操作,只要浏览器能呈现您所编写的内容即可。

当然,MySpace 不是第一个允许执行这些操作的网站,许多网站和服务都允许您使用任何技术来构建自己所需的“个人网站”。让 MySpace 卓尔不群的一点是,它兼具个人网站和社交网络挂件程序的功能:一方面,您可以随心所欲地对您的网站进行定制,另一方面您还可以通过多种方式与您的好友进行交流。

虽然无限制的 CSS 和 HTML 为用户提供了无限多种方法来使其空间页面呈现特定的外观,但真正能让用户尽享 MySpace 体验的却是 JavaScript。在 MySpace 发布之后,用户纷纷开始构建 JavaScript Widget,藉此来执行各项操作(从定制好友名单到发送 MySpace 邮件)。用户编码的挂件程序并不限于其自己的挂件空间。只要用户对“剪切和粘贴”技术多少有点了解,就能将他们喜欢的应用程序“安装”到自己的个人空间 中。

此功能从何而来?虽然未提供具体的 XML/JSON API,但是用户可以快速编写和分发这样的脚本:使用 JavaScript 对现有 MySpace 标记进行抓屏(以收集数据)并发布正确的 http 值来处理收集到的数据。

当然,完全开放的 MySpace 是一个不切实际的想法。开发就这样开始了。当不法分子逐步认识到结交大量狐朋狗友、搞恶作剧和/或通过垃圾邮件牟取利润能让他们实现价值时,他们开始编写 一些破坏规则的应用程序。虽然经过缜密考虑,合法的“给我发邮件”应用程序只能在用户请求时发送邮件,但是垃圾邮件发件人构建的挂件程序会发送用户带宽所 允许数量的邮件。

随着垃圾邮件通过网站大量传播,MySpace 开始将某些 JavaScript、HTML 和 CSS 类型列入黑名单。我们曾力求最大限度地保留 JavaScript,但是由于非法用户逐渐明确删减我们的过滤器,最终我们彻底禁用了 JavaScript。而剩下的第三方挂件程序开发人员只有一种动态替代方案:Flash。YouTube 等网站认识到,它们的诞生伴随着 MySpace空间页面的 Flash 修饰效果的广泛使用。遗憾的是,到现在为止,此类挂件程序已被完全拒于 MySpace 数据流之外。

那么,MySpace 为什么要构建 OpenSocial 呢?每次我们禁止新的 JavaScript 开发时都会难过,因为我们知道这样做会使合法的挂件程序开发人员陷入困境。在我们阻止的每十个垃圾邮件发件人中,至少有一些人试图通过积极的方式来吸引我 们的用户以达到谋生目的。OpenSocial 平台使我们有机会让 MySpace 用户再次参与,不同的是这次采用更安全、更结构化同时也更灵活的方式。

我们经历了一个足够长的历史。也花费了不少时间来编写一些代码。在您阅读完本文档后,您应能在 MySpace 上创建一些简单的 OpenSocial 挂件程序。

什么是 MySpace开发者平台(MDP)?

MySpace Developer Platform 是多项服务的组合,用于为第三方挂件开发人员搭建了解 MySpace 数据和功能的桥梁。这些服务包括:

  • 一套用于创建和发布挂件以及调试挂件程序的在线工具,一组可提供用于浏览器到网站和网站到网站交互的终结点的 RESTful API(根据需要以 json、xml 和其他格式提供)。这些工具是借助简单直观的 uri 方案通过 http 协议实现的。
  • 您的挂件与您自己的网站交换数据的机制。
  • 最终用户在其空间中查找和安装挂件的系统。
  • 保护最终用户身份以及 MySpace 服务器与您的网站之间的通信验证的安全机制。

简言之,通过MySpace开发者平台(MDP),您可以创建稳定而安全的挂件,这些挂件会吸引 MySpace 用户并允许他们通过新颖而有趣的方式探索“社交网络”。您还可以将自己网站的功能集成到 MySpace 中。您从中可以获得什么?编写可成功吸引 MySpace 用户的挂件(相信我们所说,这些用户来去无常),您将获得良好声誉、认可并能增加自己的网站或服务的访问量。

什么是 OpenSocial?

OpenSocial 是为了与 Google 和其他几个社交网站协作而构建的 JavaScript API(应用程序编程接口)。OpenSocial 位于您的代码和 MySpace开发者平台(MDP)之间。您实现了 OpenSocial,OpenSocial 又实现了 MySpace开发者平台(MDP)。

OpenSocial 还提供了针对可扩展性的准则。例如,MySpace 用户有一个名为“偶像”的版块,而 OpenSocial 规范中没有包括该版块。稍后您将看到,可以使用一种方法通过 OpenSocial 界面获得特定 MySpace 属性。

OpenSocial 与 MySpace开发者平台(MDP) 是如何结合在一起的?

OpenSocial 和 MySpace开发者平台(MDP)是一系列 JavaScript 和服务器端组件,它们协同工作以便为您提供编写应用程序所依据的标准界面。

下面的简图介绍了您的应用程序、MySpace 和 OpenSocial 之间的通信。正如您所看到的,OpenSocial 完全位于客户端上。您的应用程序与 Internet 上的某个“OpenSocial”实体之间既没有 OpenSocial 服务器,也没有任何通信。

图 1:OpenSocial 和 MySpace Developer Platform 组件关系图

运行自己的应用程序时,您将看到该应用程序位于 IFrame 中。如果您在代码周围查看源,首先将看到“opensocialreference.js”的参考,然后看到“MyOpenSpace.js”的参考。您 应仔细研究这些文件,因为它们包含了 OpenSocial 实现的精髓以及 MySpace 对其进行的扩展。

您的代码、浏览器、OpenSocial 以及服务器之间的通信

opensocialreference.js 与 MyOpenSpace.js 是如何进行通信的?MyOpenSpace.js 依赖于 opensocialreference.js。OpenSocial 定义了几个基本的社交网络对象以及获得和更新这些对象的实现方法。同时,MyOpenSpace 可以将这些对象映射到 MySpace 服务器端 API 调用。有时,它还可以扩展这些对象(稍后我们将对此做详细介绍)。您的代码将几乎毫无例外地获得 Opensocial 命名空间,但请注意,分派和数据映射是由 MyOpenSpace 代码实现的。例如,以下代码是“所有者”(安装挂件的人)好友的正式 OpenSocial 请求:

代码段 1:所有者好友的基本 DataRequest
function init()
{
var dataRequest = opensocial.newDataRequest();

//Create a request for the owner's friends
var friendRequest = dataRequest.newFetchPeopleRequest(opensocial.DataRequest.Group.OWNER_FRIENDS);
//Add the request for processing.
dataRequest.add(friendRequest);
//Send the request, passing in a callback.
dataRequest.send(response);

}

在内部,该请求发出对 MySpace RESTful API 的 Ajax 调用,此调用将以 JSON 格式返回结果。下面是该请求的显示结果的一个示例:

   http://api.msappspace.com/opensocial/OWNER/profile.JSON...(params and security token)

...下面是响应的显示结果。请注意,响应采用 JSON 格式,该格式被认定为 JavaScript 对象,因此不需我们能看懂:

 
代码段 2:内部 API 响应:好友(采用 JSON 格式)
{"count":3,
"friends":
[{
"__type":"User:#MySpace.Services.DataContracts",
"image":"http:\/\/b2.ac-images.myspacecdn.com\/00000\/20\/52\/2502_s.jpg",
"name":"Tom",
"onlineNow":false,
"uri":"http:\/\/api.msappspace.com\/opensocial\/users\/6221",
"userId":6221,
"userType":"RegularUser",
"webUri":"http:\/\/www.myspace.com\/tom"},
{
"__type":"User:#MySpace.Services.DataContracts",
"image":"http:\/\/x.myspace.com\/images\/no_pic.gif",
"name":"VipyApp 6",
"onlineNow":false,
"uri":"http:\/\/api.msappspace.com\/opensocial\/users\/313945780",
"userId":313945780,
"userType":"Application",
"webUri":"http:\/\/www.myspace.com\/313945780"},
{
"__type":"User:#MySpace.Services.DataContracts",
"image":"http:\/\/x.myspace.com\/images\/no_pic.gif",
"name":"V2",
"onlineNow":false,
"uri":"http:\/\/api.msappspace.com\/opensocial\/users\/313921193",
"userId":313921193,
"userType":"RegularUser",
"webUri":"http:\/\/www.myspace.com\/313921193"}],
"next":null,
"prev":null,
"topFriends":null,
"user":{"__type":"User:#MySpace.Services.DataContracts",
"image":"http:\/\/x.myspace.com\/images\/no_pic.gif",
"name":"V1",
"onlineNow":false,
"uri":"http:\/\/api.msappspace.com\/opensocial\/OWNER",
"userId":313915716,
"userType":"RegularUser",
"webUri":"http:\/\/www.myspace.com\/vipymyspace1"}}

借助 OpenSocial,您不需要亲自解析上述代码。MySpace 的 OpenSocial 关联 MyOpenSpace.js 将为您解析此响应,并将其映射到一组 OpenSocial Person 对象。

下面显示了如何使用上述代码:

 
代码段 3:OWNER_FRIENDS 的简单响应句柄
function responseCallback(dataResponse)
{
var friendsData = dataResponse.get(opensocial.DataRequest.Group.OWNER_FRIENDS).getData();

friendsData.each(
function(friendData) {
var friendName = friendData.getField(opensocial.Person.Field.NAME);
var friendThumbnailUrl = friendData.getField(opensocial.Person.Field.THUMBNAIL_URL);
//Do work here with the friend's name and the friend's profile image...
}
);
}

DataRequest 和 DataResponse 是 OpenSocial 的精髓。您可以将所需的数据成批加入 DataRequest 中,并从 DataResponse 获得结果。将尽可能多的数据成批加入到单个调用中将使您的挂件程序更好地运行,并为您的用户提供更好的体验。

未实施的素材

 

在档案文件与橱窗之间导航

当前无法执行此操作。可以执行此操作时,您便可以调用“requestNavigateTo()”函数来在挂件空间页与橱窗页之间操作。

 

活动和挂件程序数据

挂件程序数据是挂件程序存储数据的方式。活动是挂件程序通知用户已发生事件的方式。

Tags:  OpenSocial MDP MySpace OpenApi

延伸阅读

最新评论

发表评论