什么是OpenSocial?看这里google opensocial 中文版。
什么是restful?看这里restful 英文版。
总体上说一下所谓的Opensocial,不过是弄了一套API,这套API是符合REST规范的。REST规范是什么?和上面的restful差不多。有兴趣可以去google搜索“Fielding博士的论文中文版”,里面有详细的介绍,说实话没看懂,不过不妨碍我写东西,比如用RESTful library写应用。
要了解更多OpenSocial内容,请参见Google Opensocial 中文讨论组
下面就记述一下我写第一个RESTful应用是的经历。很简单,属于傻瓜级的:)
第一步:
先去下载一个google opensocial restful library
下载链接:
PHP: http://code.google.com/p/opensocial-php-client/
Java: http://code.google.com/p/opensocial-java-client/
Ruby: http://code.google.com/p/opensocial-ruby-client/
Python: http://code.google.com/p/opensocial-python-client/
我是用php的,所以下载了一个php版本
第二步:
看一下library里面的结构,发现内容很少,窃喜!
目录结构
library/Oauth/Oauth.php
library/OpenSocial/OpenSocial.php
library/OpenSocial/OpenSocialAppData.php
library/OpenSocial/OpenSocialCollection.php
library/OpenSocial/OpenSocialHttpLib.php
library/OpenSocial/OpenSocialHttpRequest.php
library/OpenSocial/OpenSocialHttpResponse.php
library/OpenSocial/OpenSocialRerson.php
library/OpenSocial/OpenSocialRequest.php
library/Zend/ 这是标准的Zend没什么好说的
这些脚本中,其实我们不用都一一看过,知道怎么用就行了,但是由于整个library还不是非常成熟,有些瑕疵,比如直接用token验证的时候。于是我们还是需要看两个脚本,第一个是 libray/OpenSocial/OpenSocial.php,这个脚本定义了我们如何去取得数据。
用法很简单,如同例子中给定的:
<?php
$config = array(
"oauth_consumer_key" => "orkut.com:623061448914", //这个信息是平台给我们的
"oauth_consumer_secret" => "uynAeXiWTisflWX99KU1D2q5", //这个信息是平台给我们的
"server_rest_base" => http://sandbox.orkut.com/social/rest/ //这个是rest的基本地址,平台的
);
$opensocial = new OpenSocial($config);
$result = $opensocial->fetchFriends('03067092798963641994');
?>
这样的请求时基于平台给我们提供了secre_key这样的请求方式。就是说平台实现了Oauth的一些内容,但是遗憾的是国内的平台还没有实现,及时myspace.cn实现的也和这个library有差距,所以还是寄希望于那些用shindig来实现opensocial的平台xiaonei,51,tianya,yiqi这几个网站了。幸运的是,tianya.cn已经实现了restful,并且是用shindig实现的。
天涯实现RESTful是用token的直接验证方式,一次我们需要扩展一下RESTful library,具体就是扩展OpenSocial/OpenSocial.php脚本中的OpenSocial类,
看这个脚本的时候,发现
protected function sendRestRequest($request) {
// If you want to sign a request using a security token, you can use
// $http_request->signWithToken("<token>"); although this is not part
// of the spec.
$http_request = $request->getRestRequest($this->server_rest_base);
$http_request->sign($this->oauth_consumer, $this->signature_method);
$http_result = $this->httplib->sendRequest($http_request);
.....(这里省略去以下内容)
}
发现是在这里用secret_key,并且是用http_request类中的这个方法来验证的。
去看OpenSocial/OpenSocialHttpRequest.php这个脚本,发现里面有
function sign($key, $secret) 函数,同时还有
function signWithToken($st) 函数。测试后发现,
只要将原来OpenSocial/OpenSocial.php脚本中的
$http_request->sign($this->oauth_consumer, $this->signature_method);
修改为:
$http_request->signWithToken($st);
就可以用token直接验证了(这里的$st是你在应用程序中从平台获得的)。
扩展出一个类来继承OpenSocial类,就可以无忧无虑的用token直接验证了。
第三步:
在tianya.cn上写一个测试程序
下载opensocialapp,这里面有一个扩展好的脚本叫做OpenSocialApp.php
然后写一段脚本来测试
<?php
$options = array(
"server_rest_base" => "http://app.tianya.cn/social/rest/"
);
$params = array(
'o' => $_REQUEST['o'],
'v' => $_REQUEST['v'],
'count' => 1000,
'fields' => 'id,name,gender,thumbnailUrl,nickname',
);
$opensocialapp = new OpenSocialApp($options);
$person = $opensocialapp->fetchPersonChange($_REQUEST['o'], $params);
$friends = $opensocialapp->fetchFriendsChange($_REQUEST['o'], $params);
print_r($person);
print_r($friends);
?>
这样就简单的取得了天涯上面个人信息和好友信息了。
这里有一个用RESTful library写的实际应用爱恨知多少。
应用源代码下载位置为easy-opensocial-apps。
那我们就开始用opensocial restful library开发应用的轻松旅程吧。