使ってみよう! Windows Live SDK/API

第10回 IM Control & Presence API ―― WebページにLive Messengerの表示

この記事を読むのに必要な時間:およそ 4 分

コールバック関数の利用

先ほど示したURLの構文の[?queryparameters]部分にコールバック関数を指定することで,より便利にJavaScriptからAPIの利用が可能になります。例えば次のように指定します。

http://messenger.services.live.com/users/12BACD345678@apps.messenger.live.com/presence/?cb="ShowStatus"&mkt=ja-JP

指定できるパラメータは2種類あり,cbにコールバック関数名,mktを指定することでカルチャ情報の指定も可能です。コールバック関数を指定すると,その関数名にJSON形式の値を指定した文字列が帰ってきます。scriptタグと組み合わせHTMLのBODY内に次のように記述します。

<script type="text/javascript" src="http://messenger.services.live.com/users/12BACD345678@apps.messenger.live.com/presence/?cb=ShowStatus&mkt=ja-jp"></script>

ここではShowStatusという関数を指定していますので,プレゼンスのデータを処理するShowStatus関数を作りましょう。次の例ではオリジナルの状態アイコンおよびユーザの表示名を表示しています。

<div id="presence">
<img id="statusIcon" />
<span id="displayName"></span>
</div>

<script type="text/javascript">
function ShowStatus(presence) {
    var img = document.getElementById("statusIcon");
    var span = document.getElementById('displayName');
    img.src = presence.status + ".png";
    span.appendChild(document.createTextNode(presence.displayName));
}
</script>

当然ながら関数の引数presenceを使用しています。このとき「presence.displayName」など簡単にデータにアクセスできるのがわかります。もしアイコン情報を取得する場合は「presence.icon.width」のように記述します。また,マルチバイト文字列が表示名に使用されていますが特別な処理は必要ありません。

サンプルを動作させるにはstatusと同じ名前の画像ファイルを用意する必要があります。実行結果を図5に示します。

図5 Presence API利用例

図5 Presence API利用例

プレゼンスの共有案内

IM Controlと同様に,ユーザ自身のプレゼンスを処理するだけでなくほかのユーザのプレゼンスを取得することができます。これはIM Controlの利用案内とまったく同様ですので説明は省きます。Presence API用のサインアップページというのはなくIM Controlと同じものを使用します。

おわりに

いかがでしたでしょうか。IM ControlやPresence APIを利用すると簡単にWebページにLive Messengerのプレゼンスを表示することができ,IM ウィンドウによりメッセージのやり取りも可能になります。ブログに表示する項目のひとつに加えてみるとよいかもしれません。いろいろと活用してみてください。基本的な部分はすべて示せたと思いますが,詳細はMSDN Libraryも参照してください。6月に多くのWindows Liveに関するSDKが日本語化されています。

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp