OpenSocialを利用してガジェットを作ろう!

第7回アクティビティストリームの活用

アクティビティストリームとは何か

OpenSocialを構成する要素として、アクティビティストリームは欠かせない存在です。なぜなら、アクティビティストリームこそ、ソーシャルグラフの存在意義を最も感じられる機能のひとつだからです。

アクティビティストリームとは、自分と繋がる様々な人たち(ソーシャルグラフ)の行動履歴を追跡できる、Twitterでいうタイムラインのようなものです。このタイムラインに、誰と誰が友達になったか、どんなブログを書いたのか、何をブックマークしたのか、などの情報が集約して表示されます。

gooホームのアクティビティストリームでは、アイコンやデザインの変更といったgooホーム上でのアクティビティに加え、Twitterやはてなブックマークといった外部サービスでのアクティビティ、そして今回のテーマであるガジェットからのアクティビティをまとめて表示することができます。

図1 ガジェット上でアクティビティをまとめて表示
図1 ガジェット上でアクティビティをまとめて表示

アクティビティストリームは友達の最新情報を追跡できるという便利な側面だけでなく、ガジェットディベロッパーにとっては、これによるバイラル効果、つまりクチコミ効果を期待することができます。アクティビティストリームを上手に活用し、あなたのガジェットをたくさんの人に使ってもらいましょう。

アクティビティを作成する

まずは、アクティビティストリームに追加するアクティビティを作成します。

リスト1
var params = {};

params[opensocial.Activity.Field.TITLE] = 'アクティビティテスト';

var act = opensocial.newActivity(params);

ご覧の通り、必要なパラメータを指定したオブジェクトをopensocial.newActivity()メソッドの引数として渡すだけで完成です。gooホームで指定できるアクティビティのパラメータは以下のとおりです。

opensocial.Activity.Field.~意味表現形式
TITLEアクティビティ件名(必須)文字列
BODYアクティビティ本文文字列
MEDIA_ITEMS添付するメディアopensocial.MediaItemの配列

アクティビティの件名や本文にはHTMLタグを利用することができます。gooホームで利用できるタグはb, i, a, span, a@hrefです。他のタグやスクリプト等は保存時に取り除かれます。

アクティビティに画像を添付する

上記で説明したアクティビティ作成時に指定できるパラメータのひとつにメディアの添付があります。アクティビティに画像等を添付すれば、内容をビジュアル化することができ、より高いバイラル効果を期待することができるでしょう。

リスト2
var opt_params = {};
opt_params[opensocial.MediaItem.Field.TYPE] = opensocial.MediaItem.Type.IMAGE;
var mediaItem = opensocial.newMediaItem(
    'image/gif',
    'http://home.goo.ne.jp/img/noimage180_p.gif',
    opt_params
);

var params = {};

params[opensocial.Activity.Field.TITLE] = 'アクティビティテスト';

params[opensocial.Activity.Field.MEDIA_ITEMS] = [mediaItem];

var act = opensocial.newActivity(params);

メディアアイテムはオプションパラメータでタイプ(画像、映像、音声)を指定し、MIMEタイプ、URL、オプションパラメータを引数として作成します。添付といっても、ファイルをアップロードする訳ではなく、リソースのURLを指定するだけですので、ご注意ください。作成したメディアアイテムは、アクティビティのパラメータに配列として追加します。

opensocial.MediaItem.Type.~意味
AUDIO音声
IMAGE画像
VIDEO映像

なお、gooホームでは画像、映像、音声の各種メディアを添付することができますが、実際にアクティビティストリームに表示されるのは画像のサムネールのみです。

アクティビティの追加をリクエストする

作成したアクティビティはアクティビティストリームに追加しなければ意味がありません。早速、アクティビティを追加してみましょう。

リスト3
opensocial.requestCreateActivity(act, opensocial.CreateActivityPriority.HIGH, callback);

第一引数はもちろん、先ほど作成したアクティビティ、第三引数は実行後のコールバック関数を指定します。第二引数はアクティビティ追加の優先度を表しているのですが、若干解説が必要です。

アクティビティは行動履歴を表すため、プライバシーと密接に関わってきます。ユーザーが意図しないアクティビティをガジェットが追加してしまうのは、ガジェット開発者にとっても好ましいものではありません。

opensocial.CreateActivityPriority.~意味
HIGH優先度が高い
LOW優先度が低い

そこで、この第二引数の優先度を使って、可能な場合は追加し、そうでない場合は追加しない、という選択を行うことができます。ガジェットごとにアクティビティの追加を許可するかどうかの設定と組み合わせて、以下のような判断が行われます。

 設定で許可している設定で許可していない
優先度が高いアクティビティを追加するダイアログで許可を求める
優先度が低いアクティビティを追加するアクティビティを追加しない

優先度が高いのに設定で許可されていないケースについては、ダイアログが表示され、ユーザーに許可を求めます。gooホームの場合、ここで許可すると設定自体が変更となります。

図2 アクティビティ追加の認証ダイアログ
図1 アクティビティ追加の認証ダイアログ

当たり前の話ですが、アクティビティが追加される対象はビューアーです。追加したアクティビティは、ガジェットを閲覧・操作している人のプロフィールおよび、その友達のアクティビティストリームに表示されることになります。

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

アクティビティは追加するだけでなく、取得することもできます。

リスト4
var idspec = opensocial.newIdSpec({
    opensocial.IdSpec.Field.USER_ID: opensocial.IdSpec.PersonId.VIEWER,
    opensocial.IdSpec.Field.GROUP_ID: opensocial.IdSpec.GroupId.SELF
});
var req = opensocial.newDataRequest();
req.add(req.newFetchActivitiesRequest(idspec), 'activity');
req.send(function(response) {
    var result = response.get('activity');
    if (!result.hadError()) {
        var activities = result.getData();
        activities.each(function(activity){
            var title = activity.getField(opensocial.Activity.Field.TITLE);
            var body = activity.getField(opensocial.Activity.Field.BODY);
            var media = activity.getField(opensocial.Activity.Field.MEDIA_ITEMS);
            if (media != undefined) {
                for (var i = 0; i < media.length; i++) {
                    var url = media[i].getField(opensocial.MediaItem.Field.URL);
                }
            }
        });
    }
});

大まかな方法は第3回第4回で解説したDataRequest、DataResponseの内容とほぼ同じですので割愛させていただきます。

最終的に得られるオブジェクトは作成したopensocial.CollectionにActivityが入った状態となるため、eachメソッドでイテレートしてActivityを取り出し、検証していきます。

また、各アクティビティは作成した場合と同じ構造になっているため、getFieldメソッドを使ってパラメータを取り出すことができます。メディアアイテムも同様です。

まとめ

アクティビティストリームはOpenSocialの真骨頂であり、これの活用次第であなたのソーシャルアプリケーションの広がりが決まるといっても過言ではありません。

ぜひ、アクティビティストリームを最大限に活用し、ソーシャルアプリケーションをたくさんの人に使ってもらえるベストプラクティスを見つけてください。

おすすめ記事

記事・ニュース一覧