requestCreateActivityを使ってサーバにActivityを保存する。
requestCreateActivityに対応するサーバ側の処理を実装してみる。
テストで使用するGadget XMLは、goo ディベロッパーキッチンのサンプルを参考に作成。
- <?xml version="1.0" encoding="UTF-8" ?>
- <Module>
- <ModulePrefs title="Activity">
- <Require feature="opensocial-0.8" />
- </ModulePrefs>
- <Content type="html" view="home,profile,canvas">
- <![CDATA[
- <script type="text/javascript">
- function get() {
- /*===================================================================*/
- /* OWNER IdSpec */
- /*===================================================================*/
- 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);
- /*===================================================================*/
- /* DataRequestオブジェクトを作成し、 */
- /* そこにActivity取得リクエストを追加. */
- /* レスポンスを取得するときのキーは'get_activity' */
- /*===================================================================*/
- var req = opensocial.newDataRequest();
- req.add(req.newFetchActivitiesRequest(idspec), 'get_activity');
- /*===================================================================*/
- /* 送信! */
- /*===================================================================*/
- req.send(function(response){
- var activity = response.get('get_activity')
- if (activity.hadError()) {
- document.getElementById('result').innerHTML
- = 'エラーだったよ:' + activity.getErrorMessage();
- return;
- }
- var out = document.createElement('ul');
- var li = document.createElement('li');
- if (activity.getData().size() == 0) {
- li.innerHTML = 'Activity0件';
- out.appendChild(li);
- }
- activity.getData().each(function(act) {
- var title = act.getField(opensocial.Activity.Field.TITLE);
- var media = act.getField(opensocial.Activity.Field.MEDIA_ITEMS);
- if (media != undefined) {
- for (var ii=0, len = media.length; ii < len; ii++) {
- if (media[ii].getField(opensocial.MediaItem.Field.TYPE) == opensocial.MediaItem.Type.IMAGE) {
- title +=
- '
- <img src="'
- + media[ii].getField(opensocial.MediaItem.Field.URL);
- + '/>';
- }
- }
- }
- li.innerHTML = title;
- out.appendChild(li);
- });
- document.getElementById('result').appendChild(out);
- });
- }
- function update() {
- var params = {};
- params[opensocial.Activity.Field.TITLE] = 'アクティビティテストです';
- /*===================================================================*/
- /* Activity作成 */
- /*===================================================================*/
- var act = opensocial.newActivity(params);
- /*===================================================================*/
- /* 送信 */
- /*===================================================================*/
- opensocial.requestCreateActivity(act, opensocial.CreateActivityPriority.HIGH, callback);
- function callback(status){
- if (status.hadError()) {
- document.getElementById('result').innerHTML = 'Activity更新失敗';
- return;
- }
- document.getElementById('result').innerHTML = 'Activity更新成功';
- };
- };
- function media() {
- var opt_params = {};
- opt_params[opensocial.MediaItem.Field.TYPE] = opensocial.MediaItem.Type.IMAGE;
- var mediaItem = opensocial.newMediaItem(
- 'image/gif',
- 'http://www.google.co.jp/intl/ja_jp/images/logo.gif',
- opt_params
- );
- var params = {};
- params[opensocial.Activity.Field.TITLE] = 'MediaItemを使ったアクティビティテストです';
- params[opensocial.Activity.Field.MEDIA_ITEMS] = [mediaItem];
- var act = opensocial.newActivity(params);
- opensocial.requestCreateActivity(act, opensocial.CreateActivityPriority.HIGH, callback);
- function callback(status){
- if (status.hadError()) {
- document.getElementById('result').innerHTML = 'Activity更新失敗 With MediaItemType';
- return;
- }
- document.getElementById('result').innerHTML = 'Activity更新成功 With MediaItemType';
- };
- }
- </script>
- <div id="result"></div>
- <input type="button" value="アクティビティを取得する" onclick="get();" />
- <input type="button" value="アクティビティを更新する" onclick="update();" />
- <input type="button" value="MediaItemを使ってアクティビティを更新する" onclick="media();" />
- ]]>
- </Content>
- </Module>
な感じ。
サンプルによると、「MediaItemを使ったアクティビティ更新」というものも存在するらしい。
で、「アクティビティを更新する」ボタンを押下。
そのときのFirebugの出力は、
- [
- {
- "method":"activities.create",
- "params":{
- "userId":["@viewer"],
- "groupId":"@self",
- "appId":"@app",
- "activity":{
- "title":"アクティビティテストです",
- "mediaItems":[]
- }
- },
- "id":"key"
- }
- ]
となっている。
見難いので整形済み。
UserIdは複数指定できる。
GroupIdはサーバ側サンプル実装によると、見ていないので、どうしたものか。
@appはサーバ側でガジェットのURLに変換される。
どうも、requestCreateActivityを使うと、レスポンス取得キーは'key'になるらしい。
気になるところはGroupIdとUserId。
@friendsとか指定されたらどうなるんだろう。。
.
0 コメント:
コメントを投稿