とりあえず、現状サーバ側にわたってくる値をログに出して見た。
まずfireBug。
[{"method":"people.get","params":{"userId":["@owner"],"groupId":"@friends","count":20,"sortBy":"topFriends"
,"filterBy":"all","fields":["id","nickname","thumbnailUrl","profileUrl","id","name","thumbnailUrl","id"
,"displayName"]},"id":"get_friends"}]
な感じ。
で、サーバ側log。
jp.qsdn.gms.social.service.PersonServiceImpl - userId:[OWNER]
jp.qsdn.gms.social.service.PersonServiceImpl - groupId:[FRIENDS]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[id]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[nickname]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[thumbnailUrl]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[profileUrl]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[name]
jp.qsdn.gms.social.service.PersonServiceImpl - field:[displayName]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:sortBy:[topFriends]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:sortOrder:[ascending]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:filter:[all]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:filterOperation:[contains]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:filterValue:[]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:first:[0]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:max:[20]
jp.qsdn.gms.social.service.PersonServiceImpl - collectionOptions:updatedSince:[null]
となっている。
jp.qsdn.gms.social.service.PersonServiceImplというクラスは、
org.apache.shindig.social.opensocial.spi.PersonService
をimplementsしている。
UserId、GroupId、fieldは良いので置いておく。
問題はcollectionOptions。
newFetchPeopleRequest時に特に指定していないので、デフォルトの値がセットされている。
features/opensocial-base/fieldtranslations.js
の、
FieldTranslations.translateStandardArguments = function(opt_params, rpc_params) {
if (opt_params['first']) {
rpc_params.startIndex = opt_params['first'];
}
if (opt_params['max']) {
rpc_params.count = opt_params['max'];
}
if (opt_params['sortOrder']) {
rpc_params.sortBy = opt_params['sortOrder'];
}
if (opt_params['filter']) {
rpc_params.filterBy = opt_params['filter'];
}
if (opt_params['filterOp']) {
rpc_params.filterOp = opt_params['filterOp'];
}
if (opt_params['filterValue']) {
rpc_params.filterValue = opt_params['filterValue'];
}
if (opt_params['fields']) {
rpc_params.fields = opt_params['fields'];
}
};
で、第二引数をRPCパラメータに変換している。
どうも、rpc_params.sortOrderはどこでも触っていないっぽい。
だもんで、昇順、降順の指定をしたい人は、
newFetchPeopleRequestの中で直接指定するか、
FieldTranslations.translateStandardArgumentsに、
追加するかすればよさそうだけど、OpenSocialにそんな規約はあるのかどうか。
sort系は大体意味がわかった。
filterは、
opensocial.DataRequest.FilterType.ALL
opensocial.DataRequest.FilterType.HAS_APP
opensocial.DataRequest.FilterType.TOP_FRIENDS
opensocial.DataRequest.FilterType.IS_FRIENDS_WITH
が指定できて、
* ALLはすべて、
* HAS_APPはガジェットをインストールしている人、もしくは使ったことがある人、
* TOP_FRIENDSは、友達のみ
* IS_FRIENDS_WITHは、友達にfilterValueで指定した人がいる人(?)
を意味するっぽい。
ALL、HAS_APP、TOP_FRIENDS、IS_FRIENDS_WITHだけかと思ったけど、どうも、
filterには、検索対象の項目名を直接指定できるっぽい
filter=email
filterValue=aaaa@bbbb.ccc
filterOp=contains
などと指定できる模様。
filterOperationは、
Javaのソースの
package org.apache.shindig.protocol.model;
/**
* Standard filter operations
*/
public enum FilterOperation {
contains, equals, startsWith, present
}
のとおり、contains、equals、startsWith、presentが指定できる。
JavaScript側では、
opt_params['filterOp'] = 'contains';
などと、指定するしかなさそう。
PersonServiceDb.javaによると、
containsは、
column like '%filterValue%'
equalsは、
column = filterValue
startsWithは、
column like 'filterValue%'
なSQLのイメージ。
filterValueは、
filterで指定された値がHAS_APP、もしくは、IS_WITH_FRIENDSのときのみ有効ぽく、
filterがHAS_APPの場合は、サーバ側でインストールされているかどうかのチェックのための値、
filterがIS_WITH_FRIENDSの場合は、サーバ側で友達IDなどを指定するための値が
filterValueに設定される模様。
これはなんとなく、コンテナ依存ぽい。
firstとmaxは、何件目から何件表示するかを指定する。
よくやる、「次へ」、とか「前へ」なんかを実装するのに役立ちそう。
updatedSinceは、、、
ソースを見る限り誰も指定していないような気がする。。のでよくわからない。
たぶん、いついつ以降に更新されたデータのみ取得、みたいな意味かと思う。
これで一応パラメータの意味は分かったんで、次は実装してみる。
たぶん。
.
0 コメント:
コメントを投稿