SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

mixiアプリで始めるOpenSocial入門

mixiアプリとアクティビティ

mixiアプリで始めるOpenSocial入門(6)

  • X ポスト
  • このエントリーをはてなブックマークに追加

アクティビティの使用方法

 それでは、OpenSocialアプリケーションからアクティビティを使用するための手順について考えていきましょう。なお、アクティビティの基本的な概念はOpenSocialで定義されていますが、他の機能と同様に、OpenSocialコンテナごとに実装が異なる部分もあります。アクティビティを使ったアプリケーションの実装に際しては、使用するコンテナでどの機能が利用可能かを確認してください。

アクティビティに含められる情報

 OpenSocialアプリケーションにおいて、アクティビティはopensocial.Activityクラスとして定義されています。Activityオブジェクトはopensocial.Activity.Fieldクラスで定義された、以下のフィールドを持つことができます。

Activityオブジェクトに含めることのできる主なフィールド
フィールド名 概要
BODY アクティビティの本文
MEDIA_ITEMS アクティビティに関連づけられた画像・動画など
TITLE アクティビティのタイトル
URL アクティビティに関連づけられたURL

 現在のところmixiアプリでは、アクティビティのタイトル(TITLE)と、3枚までの画像(MEDIA_ITEMS)をアクティビティとして登録することができます。OpenSocialコンテナによっては、他のフィールドも使用することができます。

 先ほどのmixiポータルページでの表示例のように、TITLEフィールドはアクティビティの表示テキストとして用いられます。mixiアプリでは、アクティビティのリンク先はアプリのCanvasビューに固定されています。どのアクティビティから遷移したか、などの情報はURLに含まれないため、アプリでも取得することができないようです。

 MEDIA_ITEMSフィールドは画像として表示されます。なお、画像については76×76ピクセルで表示されます。その他のサイズの画像を登録しても、76×76ピクセルで表示されますので、注意してください。MEDIA_ITEMSフィールドについては、アクティビティの作成の部分でさらに詳しく説明します。

Activityオブジェクトの構造
Activityオブジェクトの構造

 また、mixiアプリはアクティビティ機能について独自の拡張を行っており、上記のOpenSocial標準のフィールド以外に、mixi.ActivitiyField.RECIPIENTSというフィールドを使うことができます。これはアクティビティが関連するユーザーを指定するためのフィールドで、2名までのIDを登録することができます。これを指定したアクティビティは、RECIPIENTSとして指定されたユーザーの、「専用情報ボックス」の「自分への情報」タブに表示されます。

 たくさんのマイミクがアクティビティを登録していくと、情報が氾濫して一つ一つのアクティビティが埋もれがちになりますが、この機能を使って特定の個人に向けたアクティビティを作ることで、アクティビティをメッセージ的に使用することができます。

アクティビティの使い方

 OpenSocialアプリケーションからアクティビティを使用する際の流れを押さえておきましょう。

アクティビティを作成する(opensocial.newActivity関数)

 アクティビティを公開するためには、まず最初にopensocial.newActivity関数でActivityオブジェクトを作成する必要があります。以下に画像を添付したアクティビティを作成するサンプルコードを示します。

アクティビティの作成サンプルコード
var mediaParams = {}; //MediaItem作成用のパラメータ *1
mediaParams[opensocial.MediaItem.Field.TYPE] = opensocial.MediaItem.Type.IMAGE; *2
var mediaItem = opensocial.newMediaItem("image/jpg", "http://someserver/somefile.jpg", mediaParams); //画像URLを指定してMediaItemを作成 *3
var params = {};
params[opensocial.Activity.Field.TITLE] = "Hello!";
params[opensocial.Activity.Field.MEDIA_ITEMS] = [mediaItem]; *4
var activity = opensocial.newActivity(params); *5

 MediaItemオブジェクトを使うためのパラメータが必要になるなど、少し複雑なコードですが、ポイントごとに見ていきましょう。

  1. 画像を扱うためのopensocial.MediaItemオブジェクトを作成するためのパラメータを作成します。
  2. メディアの種類(opensocial.MediaItem.Field.TYPE)を指定します。ここでは種類として画像形式(opensocial.MediaItem.Type.IMAGE)を指定しています。mixiアプリでは画像形式のみ指定可能です。
  3. opensocial.newMediaItem関数を使ってMediaItemオブジェクトを作成します。第1引数には登録するメディアのMIMEタイプを、第2引数には添付したい画像のURLを、第3引数には1.で作成したパラメータを指定します。ここではJPG形式のMediaItemオブジェクトを作成しています。
  4. アクティビティのMEDIA_ITEMSフィールドに3.で作成したMediaItemオブジェクトを設定します。
  5. opensocial.newActivity関数でActivityオブジェクトを作成します。

アクティビティを送信する(opensocial.requestCreateActivity関数)

 次に、作成したアクティビティをOpenSocialコンテナに送信して、登録する必要があります。

アクティビティの送信サンプルコード
opensocial.requestCreateActivity(activity,opensocial.CreateActivityPriority.HIGH,function(response) {
  if (response.hadError()) {
    alert(response.getErrorCode() + ":" + response.getErrorMessage());
  } else {
    alert("Success!");
  }
});

 まず、作成したアクティビティを、opensocial.requestCreateActivity関数でOpenSocialコンテナに送信します。第一引数には送信するActivityオブジェクトを、第二引数にはアクティビティ作成の優先度を表すopensocial.CreateActivityPriorityクラスのフィールドを指定します。opensocial.CreateActivityPriorityクラスのフィールドの意味は次のとおりです。

opensocial.CreateActivityPriorityクラスのフィールド
フィールド名 概要
HIGH アプリケーションによるアクティビティの登録がまだ許可されていない場合でも、ユーザーに許可を求め、アクティビティを登録します。既に許可されている場合はそのまま登録します
LOW アプリケーションによるアクティビティの登録がまだ許可されていない場合、ユーザーに許可を求めることなく登録を中止します。既に許可されている場合はそのまま登録します

 ただし、mixiアプリではアクティビティの登録許可という概念がまだ実装されていないため、このフィールドは意味を持ちません。現状ではHIGHを指定して呼び出し、アクティビティの登録は常に成功します。

 opensocial.requestCreateActivity関数の第3引数には、コールバック関数を指定します。ここではその場で匿名関数としてコールバック関数を定義しています。コールバック関数にはResponseItemオブジェクトが渡されるので、hadErrorメソッドでエラーが発生したかどうかを確認します。

 以上の手順でアクティビティの登録は完了です。

アクティビティを取得する

 登録したアクティビティは、OpenSocialコンテナがポータルページを表示する際などに自動的に読み込まれます。

 それ以外に、OpenSocialアプリケーションからDataRequest.newFetchActivitiesRequestメソッドを使用して、明示的にアクティビティ一覧を取得するリクエストを作成することもできます。

 以下に、アクティビティの一覧を取得するためのサンプルコードを示します。

アクティビティの一覧を取得するためのサンプルコード
var fparams = {};
fparams[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER;
fparams[opensocial.IdSpec.Field.GROUP_ID] = opensocial.IdSpec.GroupId.SELF;
var idSpec = opensocial.newIdSpec(fparams); *1
var req = opensocial.newDataRequest();
req.add(req.newFetchActivitiesRequest(idSpec), 'activity'); *2
req.send(function(response) { *3
  var result = response.get('activity');
    if (!result.hadError()) {
      var activities = result.getData();
      activities.each(function(activity){ *4
        var title = activity.getField(opensocial.Activity.Field.TITLE); *5
・・・省略・・・

 大きな流れは前回説明したDataRequestオブジェクトによるOpenSocialコンテナへのリクエストと同様です。

  1. 取得するアクティビティの範囲を指定するためのIdSpecオブジェクトを作成します。ここではVIEWERのSELF、つまりVIEWER自身に関するアクティビティを取得します。
  2. DataRequestオブジェクトを作成し、newFetchActivitiesRequestメソッドでリクエストを作成します。引数には1.で作成したIdSpecオブジェクトを指定します。
  3. リクエストを送信し、コールバック関数で取得したアクティビティ一覧を処理します。
  4. 取得したアクティビティ一覧はActivityオブジェクトのコレクションのため、eachメソッドを使って取り出します。
  5. ActivityオブジェクトのgetFieldメソッドを使って、TITLEフィールドを取得します。

 これにより、作成したアクティビティ一覧をアプリケーションからも使用することができます。

 ただ、残念なことに現状のmixiアプリはnewFetchActivitiesRequestメソッドによるアクティビティの取得に対応していません。今後のサポートに期待しましょう。

次のページ
アクティビティ作成のサンプル

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
mixiアプリで始めるOpenSocial入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 土井 毅(ドイ ツヨシ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4611 2009/12/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング