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

第44回Windows 8でWindows Liveが加速! Live Connectで連携アプリの作成!

Windows 8 & Windows Live!

2011年9月13~16日の間(現地時間⁠⁠、カリフォルニア州でMicrosoftの開発者向けカンファレンスBUILDが開催されました。目玉はWindows 8(仮称)の情報ですが、Windows Liveの情報も出てきました。Windows 8ではWindows Liveサービスとの連携が強化され、WindowsからクラウドストレージとしてSkyDriveを利用したり、WindowsのログインにもWindows Live IDが使用できたりと、重要なサービスとなっています。また、Windows 8からの新しいアプリのスタイル、Metro Styleに対応したMailCalendarなど各種Windows Liveのアプリが公表されています。

Metro Styleのアプリは下記の動画から参照できます。

Windows 8のPre-beta版のWindows Developer Previewをダウンロードした方も多いかと思いますが、残念ながらWindows LiveのアプリはまだDeveloper Previewには含まれていません。

Live Connect!

そして、Windows Liveの新しいAPI・SDKも公表されました。第42回から紹介しているMessenger Connectが、Live Connectと名称を新たにしています。Live Connectは、Windows Liveに関するAPIとコントロールのコレクションで、Windows Live IDによるシングルサインオンや、SkyDrive、Hotmail、Messengerなどのユーザーデータへアクセスでき、Windows Liveと統合したアプリ開発を可能にします。

アプリがユーザーからアクセス許可を得る認可方法は、標準的なプロトコル、OAuth 2.0を利用します。データアクセスはREST APIを利用し、HTTPメソッドとJSON形式のデータでやり取りします。Webブラウザーベースのアプリ向けにはJavaScript APIの利用でより簡単にデータアクセス可能です。

Live Connectでは、以前のMessenger Connectの内容はほぼそのままに、新たな機能が追加される見込みです。この連載で紹介した内容も問題なく使えます。新機能に関する内容は、Technical PreviewとしてLive SDKが公開されています。Live SDKには新しく提供されるAPIリファレンスなどが含まれています。

公表されたLive Connectの主な新しい機能は次の通りです。

SkyDrive

ついに、SkyDriveのファイルの操作が可能になります。現在は写真のダウンロードのみですが、フォルダやファイルの作成や削除などの操作が可能になり、さらにコメントとタグの参照もできるようになります。

Calendar

現在は、イベントの追加のみ可能ですが、イベントの参照や更新、削除もでき、一般公開されているカレンダー情報も参照可能になります。

Live Messenger

インスタントメッセージングの標準的なプロトコル、XMPPによって、Webやモバイル、デスクトップアプリから、Live Messengerとやりとりするアプリ開発ができます。

Metro Style App

Windows 8のMetro StyleやWindows Phoneアプリのサポートが追加されます。これまでのJavaScript APIによるWebブラウザーベースのアプリも引き続きサポートされます。新しいManaged APIによってC#などでの開発も容易になり、モバイルやデスクトップアプリなど多様な形式のアプリ開発が簡単にできるようになります。

その他、ユーザーのコンタクト情報の追加なども可能になります(これらの内容は正式バージョン前の内容ですので、変更される可能性があります⁠⁠。

Live SDKはMicrosoft Connectから入手できます。残念ながら、執筆時点のBUILD開催期間中では、新しいAPIのドキュメントなどが公開されているのみで、実際に多くのサービスは機能していません。サンプルコードも準備中となっています。提供され次第、この連載でも順次紹介していきたいと思います。

アプリのパーソナル化

さて、前回からの続きの内容です。今回はJavaScript APIを利用して、Webブラウザーベースのアプリを作成します。Live Connectを利用すると、ユーザーのさまざまな情報を取得できます。今回は、ユーザー情報に関する部分を紹介します。

Windows Liveサービスでユーザー自身の情報にはどんな内容があるか知っていますか? 図1はユーザーのプロフィール内容です。

図1 ユーザープロフィール
図1 ユーザープロフィール

プロフィールに設定できる内容すべてを取得はできませんが、名前や住所、生年月日、そしてメールアドレスなど基本的な情報は、APIで取得可能です。Windows Liveで使用されているユーザー固有のIDも取得できます。

IDを利用すると、ユーザーごとにアプリの見せ方を変えることもできますね。JavaScript APIを利用したWebブラウザーベースのアプリでは、アプリの取得した値が改ざんされているおそれもあるため、使いどころは少し考える必要があります。サーバーサイドのアプリ開発については次の機会に紹介します。

また、アプリのユーザー情報の登録画面で、Windows Liveのユーザーデータを利用し、入力の手間を省略するといったケースにも使えます図2⁠。

図2 ユーザー情報の登録での利用
図2 ユーザー情報の登録での利用

ユーザー情報の表示

それでは、基本的なユーザー情報を取得してみましょう。REST APIを利用すると、多様なユーザーデータの取得や操作が可能です。

https://apis.live.net/v5.0/meにアクセスすると、Userオブジェクトを取得できます。レスポンスはJSON形式で次のような値です。

{
    "first_name": "凶真", 
    "gender": "male", 
    "id": "xxxxxxxxxx", 
    "last_name": "鳳凰院", 
    "locale": "ja_JP", 
    "name": "鳳凰院 凶真", 
}

Userオブジェクトの内容(一部)を示します。以下の情報を得るために指定する許可Scopeはありません。何らかの許可を得ると参照可能です。ユーザーが設定していない情報は、null値となります。

プロパティ説明
idstringWindows Live IDで使用されている固有ID
namestringユーザー名(下記の名字と名前を併せたもの)
first_namestring/null名前
last_namestring/null名字
genderstring/null性別
male、female
localestringユーザーの国・地域コード
ja-jpなど

idは、Windows LiveではCIDと呼ばれているユーザーごとに一意な値です。ユーザーページのURLなどにも使用されています。REST APIで使用するURLは、https://apis.live.net/v5.0/me の代わりに固有IDを使って https://apis.live.net/v5.0/id と指定することも可能です。

Live Messengerなどで使用しているユーザーの表示アイコンは、次のURLで参照できます。

  • https://apis.live.net/v5.0/me/picture?access_token=ACCESTOKEN

  または、

  • https://apis.live.net/v5.0/USER_ID/picture?access_token=ACCES_TOKEN

USER_IDは、Userオブジェクトのidプロパティ値です。ACESS_TOKENには、認可プロセス時に得られるアクセストークンの値を設定します。JavaScript APIではsessionオブジェクトから参照できます。

ここまでの内容を取得するJavaScript APIを利用したコードは次のようになります。

<!DOCTYPE html>

<html lang="ja">
    <head>
        <meta charset="utf-8" />
        
        <title>User Info</title>
        <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.6.2.min.js"></script>        <script src="https://js.live.net/v5.0/ja/wl.js"></script>
        <script>
            $(function(){

                function onLogin() {
                    $("#pic").html("");
                    $("#info").html("");

                    var session = WL.getSession();
                    if (!session) {
                        return;
                    }

                    WL.api({path: "me"}, function (r) {                        
                        if (r.error) {
                            alert(r.error.message);
                            return;
                        }

                        $("#pic").html('<img src="https://apis.live.net/v5.0/me/picture?access_token=' + session.access_token + '">');
                        $("#info").html("<pre>" + JSON.stringify(r, null, "    ") + "</pre>");
                    });

                }

                WL.Event.subscribe("auth.login", onLogin);                
                WL.init({client_id: "YourClientID"});
                WL.ui({
                    name: "signin",
                    element: "signinButton",
                    brand: "windowslive",
                    scope: ["wl.signin"]
                });
            });
        </script>
    </head>
    <body>
        <div id="signinButton"></div>
        <div id="pic"></div>
        <div id="info"></div>
    </body>
</html>

実行結果は図3のようになります。

図3 ユーザー情報の表示
図3 ユーザー情報の表示

特定のScopeを指定し、ユーザーに許可を得ると、Userオブジェクトの別の値がさらに参照できるようになります。

詳細なユーザー情報の取得

続いて、ユーザーに関する別の情報も取得してみましょう。取得する情報によって次のScopeに分かれています。

Scopeの値説明
wl.basicプロフィール情報とコンタクトリスト情報の参照
wl.birthday生年月日の参照
wl.emailsメールアドレスの参照
wl.postal_addresses住所の参照
wl.phone_numbers電話番号の参照
wl.work_profile勤務先情報の参照

以上の内容の許可を得る認可画面は、図4のようになります。

図4 認可画面
図4 認可画面

それでは、順に内容を見ていきましょう。

基本情報

wl.basicは、Windows LiveのプロフィールページのURLと、ユーザー情報が更新された日時、コンタクトリストの情報を参照する場合に使います。コンタクト(友だち)Contactオブジェクトとして別途取得します。その内容は次の機会に紹介します。

Userオブジェクトの内容は次の通りです。

プロパティ説明
linkstringプロフィールページのURL
updated_timestringユーザー情報が更新された日時(ISO 8601形式)
例: 2011-09-13T22:00:00+0000

生年月日

生年月日のみ参照するScopeが用意されています。当然ながらユーザーが設定してなければ参照できません。年まですべて設定されている場合、ここから年齢も計算できますね。

プロパティ説明
birth_daynumber/null誕生日
birth_monthnumber/null誕生月
birth_yearnumber/null誕生年

メールアドレス

メールアドレスは、いくつか種類があり、少なくともWindows Live IDのアカウントとなっているアドレスひとつは設定されています。レスポンスは次のようにemailsオブジェクト内に4種類のアドレスが格納されています。

{
    "emails": {
        "account": "***@live.jp", 
        "business": null, 
        "personal": null, 
        "preferred": "***@live.jp"
    }
}

それぞれの値は次の通りです。

プロパティ説明
accountstringWindows Live IDアカウントのメールアドレス
businessstring/null勤務先のメールアドレス
personalstring/null個人のメールアドレス
preferredstring/null優先するメールアドレス

住所

住所は、個人の住所と勤務先の住所があります。レスポンスは次のようになり、addressesオブジェクトに格納されています。さらに個人と勤務先によってpersonalオブジェクトとbusinessオブジェクトに分かれています。

{
    "addresses": {
        "personal": {
            "street": "外神田",
            "street_2": "大檜山ビル",
            "city": "千代田区",
            "state": "東京都",
            "postal_code": "101-0021",
            "region": "日本"
        },
        "business": {
            "street": "外神田",
            "street_2": "大檜山ビル",
            "city": "千代田区",
            "state": "東京都",
            "postal_code": "101-0021",
            "region": "日本"
        }
    }
}

personalとbusinessオブジェクトの値は次の通りです。

プロパティ説明
citystring/null日本の場合市区町村
postal_codestring/null郵便番号
regionstring/null
statestring/null日本の場合都道府県
streetstring/null住所1
street_2string/null住所2

ユーザーは住所の情報に自由な値を入力できるため、使用する際はチェックが必要です。

電話番号

電話番号は、個人・携帯・勤務先の3種類あります。レスポンスは次のようになり、phoneオブジェクトに格納されています。

{
    "phones": {
        "personal": "05-71024-***",
        "business": "104-8596-***",
        "mobile": null
    }
}

値は次の通りです。

プロパティ説明
businessstring/null勤務先の電話番号
personalstring/null個人の電話番号
mobilestring/null携帯の電話番号

電話番号についても、ユーザーは自由な値を入力できるため、使用する際は書式のチェックが必要です。

勤務先

勤務先の情報は、会社名と役職のみ参照できます。構造は以下のようになっています。

{
   "work": [
        {
            "employer": {
                "name": "未来ガジェット研究所"
            },
            "position": {
                "name": "ラボメン No.001"
            }
        }
    ]
}

値は次の通りです。

プロパティ説明
name
⁠employerオブジェクト)
string/null会社名
name
⁠positionオブジェクト)
string/null役職

Userオブジェクトに関する内容は以上です。オブジェクトの内容は、すべてではありませんが先に示した登録画面で使用しています。Userオブジェクトに関するScopeは細かく分類されていますので、アプリで必要な許可のみ、必要なときに要求するようにしましょう。

おわりに

今回はここまでです。いかがでしたでしょうか。今回は、最新の情報Live ConnectとJavaScript APIを利用したユーザー情報へのアクセスを紹介しました。次回以降も、さらなるLive Connectを活用したアプリ開発について紹介していく予定です。Technical Preview版のLive Connect情報も順次紹介していきますのでお楽しみに。

おすすめ記事

記事・ニュース一覧