newFetchActivitiesRequest発行時のサーバ側の処理は3のメソッドにそれぞれ分岐するところ
までは分かった。
さて、分岐させるべく、Gadget側でいろいろなパラメータでnewFetchActivitiesRequestをコールしてみたいよ。
OpenSocial0.8.1のAPIリファレンスを見ると、
Object newFetchActivitiesRequest(idSpec, opt_params)
サーバーからアクティビティ ストリームを要求するアイテムを作成します。
と書いてある。
他のnewFetchシリーズと同様に第二引数でいろいろと指定できそう。
このopt_paramsに何を指定することができるかってーと、
features/opensocial-reference/datarequest.js
を見てみると書いてあった。
- opensocial.DataRequest.ActivityRequestFields = {
- /**
- * {String} If provided will filter all activities by this app Id.
- * @private - at the moment you can only request activities for your own app
- */
- APP_ID : 'appId',
- /**
- * When paginating, the index of the first item to fetch.
- * Specified as a <code>Number</code>.
- *
- * @member opensocial.DataRequest.ActivityRequestFields
- */
- FIRST : 'first',
- /**
- * The maximum number of items to fetch; defaults to 20. If set to a larger
- * number, a container may honor the request, or may limit the number to a
- * container-specified limit of at least 20.
- * Specified as a <code>Number</code>.
- *
- * @member opensocial.DataRequest.ActivityRequestFields
- */
- MAX : 'max'
- };
だって。
maxとfirstとappIdと。
maxとfirstは指定しないと、firstには0が、maxには20がセットされる。
- opensocial.DataRequest.prototype.newFetchActivitiesRequest = function(idSpec,
- opt_params) {
- opt_params = opt_params || {};
- var fields = opensocial.DataRequest.ActivityRequestFields;
- this.addDefaultParam(opt_params, fields.FIRST, 0);
- this.addDefaultParam(opt_params, fields.MAX, 20);
- return opensocial.Container.get().newFetchActivitiesRequest(idSpec,
- opt_params);
- };
ほら。
あれ?activityIdは???
activityIdはjsonrpccontainer.jsの方で指定しているのか、
と思いきや、書いてない。。
どうも、Shindigのサンプル実装だとactivityIdは渡せないっぽい。
ということで、features/opensocial-jsonrpc/jsonrpccontainer..jsを修正。
- JsonRpcContainer.prototype.newFetchActivitiesRequest = function(idSpec,
- opt_params) {
- var rpc = { method : "activities.get" };
- rpc.params = this.translateIdSpec(idSpec);
- rpc.params.appId = "@app";
- FieldTranslations.translateStandardArguments(opt_params, rpc.params);
- FieldTranslations.translateNetworkDistance(idSpec, rpc.params);
- return new JsonRpcRequestItem(rpc,
- function(rawJson) {
- rawJson = rawJson['list'];
- var activities = [];
- for (var i = 0; i < rawJson.length; i++) {
- activities.push(new JsonActivity(rawJson[i]));
- }
- return new opensocial.Collection(activities);
- });
- };
を
- JsonRpcContainer.prototype.newFetchActivitiesRequest = function(idSpec,
- opt_params) {
- var rpc = { method : "activities.get" };
- rpc.params = this.translateIdSpec(idSpec);
- rpc.params.appId = "@app";
- /* ここから */
- if (opt_params['activityId']) {
- rpc.params.activityId = opt_params['activityId'];
- }
- /* ここまで */
- FieldTranslations.translateStandardArguments(opt_params, rpc.params);
- FieldTranslations.translateNetworkDistance(idSpec, rpc.params);
- return new JsonRpcRequestItem(rpc,
- function(rawJson) {
- /* さらに修正 ここから */
- if (rawJson['list']) {
- rawJson = rawJson['list'];
- }
- else {
- rawJson = [rawJson];
- }
- /* さらに修正 ここまで */
- var activities = [];
- for (var i = 0; i < rawJson.length; i++) {
- activities.push(new JsonActivity(rawJson[i]));
- }
- return new opensocial.Collection(activities);
- });
- };
に修正。
さらに、GadgetXMLも
- var idspec = new opensocial.IdSpec();
- idspec.setField(opensocial.IdSpec.Field.USER_ID, opensocial.IdSpec.PersonId.OWNER);
- idspec.setField(opensocial.IdSpec.Field.GROUP_ID, opensocial.IdSpec.GroupId.SELF);
- var params = {};
- params['activityId'] = '6ng0wgx0lgb0nxc0t9t02ur03bw0hcx0';
- /*===================================================================*/
- /* DataRequestオブジェクトを作成し、 */
- /* そこにActivity取得リクエストを追加. */
- /* レスポンスを取得するときのキーは'get_activity' */
- /*===================================================================*/
- var req = opensocial.newDataRequest();
- req.add(req.newFetchActivitiesRequest(idspec, params), 'get_activity');
として実行。
ばっちりサーバ側でactivityIdを受け取れる。
これでサーバ側3処理にそれぞれ処理を投げることができるようになった。
あと、サーバ側インタフェースを見ると、fieldsも指定できるようなシグネチャに
なっているんだけど、今のところ意図的に無視している。
なので、そこはそのまま。
さて、つづき。
--
レスポンスが返ってくるようになったけど、JsonRpcRequestItemの第二引数が
だめだったので追加で修正。
--
結局のところ、newFetchActivitiesRequestの第二引数で指定できるものは、
Shindigそのままのjsonrpccontainer.jsのサンプル実装だと、
* appId
* max
* first
サーバ側のサンプル実装だと、上記に加えて
* activityId
ぐらいか。な?
.
0 コメント:
コメントを投稿