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 に対応したMail やCalendar など各種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 ユーザープロフィール
プロフィールに設定できる内容すべてを取得はできませんが、名前や住所、生年月日、そしてメールアドレスなど基本的な情報は、APIで取得可能です。Windows Liveで使用されているユーザー固有のIDも取得できます。
IDを利用すると、ユーザーごとにアプリの見せ方を変えることもできますね。JavaScript APIを利用したWebブラウザーベースのアプリでは、アプリの取得した値が改ざんされているおそれもあるため、使いどころは少し考える必要があります。サーバーサイドのアプリ開発については次の機会に紹介します。
また、アプリのユーザー情報の登録画面で、Windows Liveのユーザーデータを利用し、入力の手間を省略するといったケースにも使えます(図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値となります。
プロパティ 型 説明
id string Windows Live IDで使用されている固有ID
name string ユーザー名(下記の名字と名前を併せたもの)
first_name string/null 名前
last_name string/null 名字
gender string/null 性別 male、female
locale string ユーザーの国・地域コード 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 ユーザー情報の表示
特定のScopeを指定し、ユーザーに許可を得ると、Userオブジェクトの別の値がさらに参照できるようになります。
詳細なユーザー情報の取得
続いて、ユーザーに関する別の情報も取得してみましょう。取得する情報によって次のScopeに分かれています。
Scopeの値 説明
wl.basic プロフィール情報とコンタクトリスト情報の参照
wl.birthday 生年月日の参照
wl.emails メールアドレスの参照
wl.postal_addresses 住所の参照
wl.phone_numbers 電話番号の参照
wl.work_profile 勤務先情報の参照
以上の内容の許可を得る認可画面は、図4 のようになります。
図4 認可画面
それでは、順に内容を見ていきましょう。
基本情報
wl.basicは、Windows LiveのプロフィールページのURLと、ユーザー情報が更新された日時、コンタクトリストの情報を参照する場合に使います。コンタクト(友だち)はContact オブジェクトとして別途取得します。その内容は次の機会に紹介します。
Userオブジェクトの内容は次の通りです。
プロパティ 型 説明
link string プロフィールページのURL
updated_time string ユーザー情報が更新された日時(ISO 8601形式) 例: 2011-09-13T22:00:00+0000
生年月日
生年月日のみ参照するScopeが用意されています。当然ながらユーザーが設定してなければ参照できません。年まですべて設定されている場合、ここから年齢も計算できますね。
プロパティ 型 説明
birth_day number/null 誕生日
birth_month number/null 誕生月
birth_year number/null 誕生年
メールアドレス
メールアドレスは、いくつか種類があり、少なくともWindows Live IDのアカウントとなっているアドレスひとつは設定されています。レスポンスは次のようにemails オブジェクト内に4種類のアドレスが格納されています。
{
"emails" : {
"account" : "***@live.jp" ,
"business" : null ,
"personal" : null ,
"preferred" : "***@live.jp"
}
}
それぞれの値は次の通りです。
プロパティ 型 説明
account string Windows Live IDアカウントのメールアドレス
business string/null 勤務先のメールアドレス
personal string/null 個人のメールアドレス
preferred string/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オブジェクトの値は次の通りです。
プロパティ 型 説明
city string/null 日本の場合市区町村
postal_code string/null 郵便番号
region string/null 国
state string/null 日本の場合都道府県
street string/null 住所1
street_2 string/null 住所2
ユーザーは住所の情報に自由な値を入力できるため、使用する際はチェックが必要です。
電話番号
電話番号は、個人・携帯・勤務先の3種類あります。レスポンスは次のようになり、phone オブジェクトに格納されています。
{
"phones" : {
"personal" : "05-71024-***" ,
"business" : "104-8596-***" ,
"mobile" : null
}
}
値は次の通りです。
プロパティ 型 説明
business string/null 勤務先の電話番号
personal string/null 個人の電話番号
mobile string/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情報も順次紹介していきますのでお楽しみに。