OpenSocial RESTful Library使用心得

来源:互联网 发布:淘宝拍摄视频教程 编辑:程序博客网 时间:2024/05/16 17:10

什么是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开发应用的轻松旅程吧。