メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2009年7月16日木曜日

[Apache Shindig][お勉強][OpenSocial] メモ50 opensocial.newFetchPersonRequest

opensocial.newFetchPersonRequestしてみた。


var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [
opensocial.Person.Field.ID,
opensocial.Person.Field.NAME,
opensocial.Person.Field.NICKNAME,
opensocial.Person.Field.THUMBNAIL_URL,
opensocial.Person.Field.PROFILE_URL,
opensocial.Person.Field.CURRENT_LOCATION,
opensocial.Person.Field.ADDRESSES,
opensocial.Person.Field.EMAILS,
opensocial.Person.Field.PHONE_NUMBERS,
opensocial.Person.Field.ABOUT_ME,
opensocial.Person.Field.STATUS,
opensocial.Person.Field.PROFILE_SONG,
opensocial.Person.Field.PROFILE_VIDEO,
opensocial.Person.Field.GENDER,
opensocial.Person.Field.SEXUAL_ORIENTATION,
opensocial.Person.Field.RELATIONSHIP_STATUS,
opensocial.Person.Field.AGE,
opensocial.Person.Field.DATE_OF_BIRTH,
opensocial.Person.Field.BODY_TYPE,
opensocial.Person.Field.ETHNICITY,
opensocial.Person.Field.SMOKER,
opensocial.Person.Field.DRINKER,
opensocial.Person.Field.CHILDREN,
opensocial.Person.Field.PETS,
opensocial.Person.Field.LIVING_ARRANGEMENT,
opensocial.Person.Field.TIME_ZONE,
opensocial.Person.Field.LANGUAGES_SPOKEN,
opensocial.Person.Field.JOBS,
opensocial.Person.Field.JOB_INTERESTS,
opensocial.Person.Field.SCHOOLS,
opensocial.Person.Field.INTERESTS,
opensocial.Person.Field.URLS,
opensocial.Person.Field.MUSIC,
opensocial.Person.Field.MOVIES,
opensocial.Person.Field.TV_SHOWS,
opensocial.Person.Field.BOOKS,
opensocial.Person.Field.ACTIVITIES,
opensocial.Person.Field.SPORTS,
opensocial.Person.Field.HEROES,
opensocial.Person.Field.QUOTES,
opensocial.Person.Field.CARS,
opensocial.Person.Field.FOOD,
opensocial.Person.Field.TURN_ONS,
opensocial.Person.Field.TURN_OFFS,
opensocial.Person.Field.TAGS,
opensocial.Person.Field.ROMANCE,
opensocial.Person.Field.SCARED_OF,
opensocial.Person.Field.HAPPIEST_WHEN,
opensocial.Person.Field.FASHION,
opensocial.Person.Field.HUMOR,
opensocial.Person.Field.LOOKING_FOR,
opensocial.Person.Field.RELIGION,
opensocial.Person.Field.POLITICAL_VIEWS,
opensocial.Person.Field.HAS_APP,
opensocial.Person.Field.NETWORK_PRESENCE
];
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest(
opensocial.IdSpec.PersonId.OWNER,
params),
"get_owner");
req.send(handleRequestGetOwnerProfile);

な感じに。
container.jsで定義したはずの

"supportedFields" : {
"person" : ["id", {"name" : ["familyName", "givenName", "unstructured"]}, "thumbnailUrl", "profileUrl"],
"activity" : ["id", "title"]
}

はここでは効いていないようで、リクエストとして指定した項目分、送信される。
サーバ側でも特にチェックしている様子はないので、serviceの実装時にチェックしなきゃいけない
っぽい。

最初、サーバからのレスポンスから、opensocial.Person.Field.JOBSの値が取得できなかった。
opensocial.Organization.Field.TYPEの項目に、jobまたはschoolを指定していなかったため。
opensocial.Organization.Field.TYPEには、
1) job
2) school
のいずれかを文字列として指定していないとダメらしい。

さらに、
opensocial.Organization.Field.ADDRESS
も現状のshindig-1.1(trunk)では、opensocial.Addressオブジェクトとしては
取得できない。

たぶん、開発中または、参照という位置づけなのか、Organization中のAddressはJSONオブジェクトが
そのまま入っている。
それだと、つまらないので、

features/opensocial-reference/organization.js



opensocial.Organization = function(opt_params) {
this.fields_ = opt_params || {};
};



opensocial.Organization = function(opt_params) {
this.fields_ = opt_params || {};
if (this.fields_ && this.fields_["address"] && ! this.fields_["address"].getField) {
this.constructObject(this.fields_, "address", opensocial.Address);
}
};

に書き換え、さらに、その下に

opensocial.Organization.prototype.constructObject = function(map, fieldName, className) {
var fieldValue = map[fieldName];
if (fieldValue) {
map[fieldName] = new className(fieldValue);
}
};

なんてのを、どっかからコピーして追加。

これで一応、Organization.Addressもopensocial.Addressオブジェクトとして
扱える。
JavaScriptは良くわからないので正しいか知らない。

opensocial.Person.Field.JOBSとopensocial.Person.Field.SCHOOLSはともに、
organizationsという名のパラメータでサーバ側に送信される。
だもんで、現状では、両方指定しても無意味。
これはたぶん、

features/opensocial-base/fieldtranslations.js

の、

FieldTranslations.translateJsPersonFieldsToServerFields = function(fields) {
for (var i = 0; i < fields.length; i++) {
if (fields[i] == 'dateOfBirth') {
fields[i] = 'birthday';
} else if (fields[i] == 'timeZone') {
fields[i] = 'utcOffset';
} else if (fields[i] == 'jobs') {
fields[i] = 'organizations';
} else if (fields[i] == 'schools') {
fields[i] = 'organizations';
}
}

// displayName and id always need to be requested
fields.push('id');
fields.push('displayName');
};

らへんぽい。

organizationsの応答には、type='job'、type='school'の両方を入れておけばよいかも。


.

0 コメント: