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

第29回 Live アドミン センター──独自ドメインでLive Hotmailを利用

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

Windows Liveアドミン センターSDK

さて,以上はLiveアドミン センターの簡単な紹介でした。Liveアドミン センターにはSDKも提供されています。SDKの内容についても少しコードを書いて確認してみましょう。

Webサイト上で行っていたアカウントの管理などは,提供されているWeb APIを利用することでも可能です。Liveアドミン センターに対する操作は,SOAPというXMLベースのプロトコルを用いたWeb APIで行います。用意されているすべてのメソッドはhttps://domains.live.com/service/managedomain2.asmxから確認できます。SDKは,Download Centerからダウンロード可能です。SDKの内容はいくつかのサンプルアプリケーション図7とそのソースコードです。Web API利用には必ずしも必要ではありませんが,開発の手助けとなるでしょう。

図7 サンプルアプリケーションのひとつ

図7 サンプルアプリケーションのひとつ

ドメインとアカウント情報の取得

それでは実際にコードを書いてみましょう。SOAPを利用したアプリケーションの作成はVisual Studioを用いると簡単にできます。今回も本連載のいつもの通りにVisual Basicを使用したコードを紹介します。無償のVisual Basic 2008 Express Editionでお試しください。SOAPはVisual Studioや.NET Frameworkに依存したものではありませんので,その他のプログラミング言語からも利用可能です。

プロジェクトの作成

Visual Studioで新しいプロジェクトを作成します。簡単に内容を確認するだけですので,コンソールアプリケーションで構いません。そして,プロジェクトメニューから「サービス参照の追加」を選択します。アドレス欄にhttps://domains.live.com/service/managedomain2.asmxと入力し,移動ボタンをクリックすると,サービスが表示されると思います図8⁠。名前空間を適当なものに変更してOKボタンをクリックします。

図8 サービス参照の追加

図8 サービス参照の追加

以上で,Live アドミン センターとのやり取りに必要なクラスが生成されます。

サービスへの接続

Liveアドミン センターとのやり取りには認証が必要です。APIでは,Live IDアカウントのメールアドレスとパスワードを用いるものと,証明書を用いた認証が利用できます。本連載ではLive IDアカウントを利用した認証を利用します。

Liveアドミン センターの認証には,提供されているGetLoginUrlGetLoginDataTemplateメソッドを使用します。GetLoginUrlメソッドで認証チケット(XML文字列)を返すために使用されているURLを取得し,GetLoginDataTemplateメソッドで認証チケットを入手するために必要なデータテンプレート(XML文字列)を取得します。取得したテンプレートを編集し,認証チケット取得用のURLにHTTP POSTメソッドにより送信すると,認証チケットが得られます。ここまでのコードは次のようになります。

' Live ID アカウント
Dim memberNameIn = "***@hotmail.com"
Dim password = "PASSWORD"

' Web API 接続クライアントの生成 (ServiceReference 名前空間を Import しておきます。)
Dim client = New ManageDomain2SoapClient

Dim url = client.GetLoginUrl(memberNameIn) ' 認証チケット取得URL
Dim template = client.GetLoginDataTemplate ' データテンプレート取得

' テンプレートの編集 (%NAME% と %PASSWORD% を アカウント情報に置換します)
template = template.Replace("%NAME%", memberNameIn)
template = template.Replace("%PASSWORD%", System.Security.SecurityElement.Escape(password))

' 認証チケットの取得
Dim authorizationData = GetAuthorizationData(url, template)

上記のGetAuthorizationDataは次のようなメソッドです。

Private Function GetAuthorizationData(ByVal url As String, ByVal request As String) As String
    Dim response As String = 
    Try
        Dim httpRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
        Dim rawRequest = Encoding.UTF8.GetBytes(request)
        httpRequest.ContentLength = rawRequest.Length
        httpRequest.ContentType = "text/xml"
        httpRequest.KeepAlive = False
        httpRequest.Method = "POST"
        httpRequest.Timeout = 30000
        httpRequest.UserAgent = "gihyo.jp sample"

        Using writer = httpRequest.GetRequestStream
            writer.Write(rawRequest, 0, rawRequest.Length)
        End Using

        Using httpResponse = DirectCast(httpRequest.GetResponse, HttpWebResponse), _
              reader = New StreamReader(httpResponse.GetResponseStream, System.Text.Encoding.UTF8)
            response = reader.ReadToEnd
        End Using

    Catch e As WebException
        ' Ignore
    End Try

    Return response
End Function

以上を実行すると,変数authorizationDataには認証用の文字列が格納されていると思います。

ドメインとアカウント情報の取得

続いて,Liveアドミン センターに登録したドメイン一覧とドメイン内のユーザーアカウント一覧を取得してみましょう。ドメイン情報一覧の取得にはEnumDomainsメソッド,ユーザーアカウント一覧はEnumMembersメソッドを使用します。

メソッド呼び出し時に,認証情報を一緒に指定する必要があります。ManageDomain2Authorizationクラスのインスタンスを生成し,取得した認証チケットの文字列とLive IDアカウントによる認証であることをプロパティに設定します。そして各メソッドの第1引数に指定します。各情報のコードは次のようになります。

' 管理ドメイン一覧
Dim domains = client.EnumDomains(auth)
For Each d In domains
    Console.WriteLine("Name: {0}, Num of Users: {1}", d.domainName, d.numUsers)
Next

' ドメイン内メンバー一覧
Dim users = client.EnumMembers(auth, domains.First.domainName, , 100)
For Each u In users
    Console.WriteLine(u)
Next

' 接続を閉じる
client.Close()

ドメイン取得のほうは,戻り値がDomainInfoというクラスの配列です。ドメイン名やそのドメイン下のユーザー数と最大ユーザー数などが参照できます。EnumMebersメソッドの第3引数に指定している文字列は,その文字から始まるメンバーを取得するためのものです。⁠a」と指定すると「a」から始まるメンバー一覧が取得できます。すべて取得する場合はコードのように空文字を指定します。第4引数の数値は一度に取得する最大のメンバー数です。

Visual Studioを使用すれば,特に難しいところはありませんね。もちろんこのほかにもユーザーを追加するメソッドなども用意されています。ですが,今回はここまでです。より詳しい情報は,リファレンスhttp://msdn.microsoft.com/en-us/library/bb259710.aspxを参照してください。MSDN Libraryには日本語の情報もありますが,内容が古いため英語のものを参照する必要がありますので,注意してください。

著者プロフィール

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

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

URL:http://katamari.jp