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 コメント:
コメントを投稿