Amazon

2011年3月16日水曜日

OpenSocialのrequest方法

OpenSocialアプリを作成する際、JavaScriptのロジックで
例えば自分の情報と友達の情報を取得することがでてくるが、
その際、以下のように2つのメソッドを書いていた。
function getMyInfo(){
   var params = {};    
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER,params), "viewer");
    req.send(function(data){

       if (data.hadError()) {
            var msg = data.getErrorMessage();
            // エラー発生時の処理
        }
        else {
            var item = data.get("viewer");
            if (!item.hadError()) {
                var viewer = item.getData();
                myID = viewer.getId();
                myName = viewer.getDisplayName();
                myURL = viewer.getField(opensocial.Person.Field.THUMBNAIL_URL);
        }
    });
}

function friendNumCheck(){
    var fparams = {};
    fparams[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER;
    fparams[opensocial.IdSpec.Field.GROUP_ID] = "FRIENDS";
    var fetchOpt = {};
    fetchOpt[opensocial.DataRequest.PeopleRequestFields.MAX] = 1;
    var idSpec = opensocial.newIdSpec(fparams); 
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPeopleRequest(idSpec, fetchOpt), "friends");

    req.send(function(data){
        if (data.hadError()) {
            var msg = data.getErrorMessage();
        }
        else {
            var friends = data.get('friends')
            if (!friends.hadError()) {
                var friend = friend.getData();
                friendID = friend.getId();
                friendName = friend.getDisplayName();
                friendURL = friend.getField(opensocial.Person.Field.THUMBNAIL_URL);
            }
        }
    });
}
よくよく考えたら、'viewer','friends'のリクエストをreq.addして一回のreq.send(function(data))とする方がリクエスト回数も少ないし、待つ時間も少なくて済む。
まだまだあまり理解できていないなぁ。。。

function getInfo(){
    var params = {};    
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER,params), "viewer");


    var fparams = {};
    fparams[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER;
    fparams[opensocial.IdSpec.Field.GROUP_ID] = "FRIENDS";
    var fetchOpt = {};
    fetchOpt[opensocial.DataRequest.PeopleRequestFields.MAX] = 1;
    var idSpec = opensocial.newIdSpec(fparams); 
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPeopleRequest(idSpec, fetchOpt), "friends");
    req.send(function(data){

       if (data.hadError()) {
            var msg = data.getErrorMessage();
            // エラー発生時の処理
        }
        else {
            var item = data.get("viewer");
            if (!item.hadError()) {
                var viewer = item.getData();
                myID = viewer.getId();
                myName = viewer.getDisplayName();
                myURL = viewer.getField(opensocial.Person.Field.THUMBNAIL_URL);

       
var friends = data.get('friends')           
if (!friends.hadError()) {
                var friend = friend.getData();
                friendID = friend.getId();
                friendName = friend.getDisplayName();
                friendURL = friend.getField(opensocial.Person.Field.THUMBNAIL_URL);
        }
    });
}

0 件のコメント:

コメントを投稿

Amazon3