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

第41回Live Spaces API/SDK(3)

はじめに

前回はWindows Live IDアカウントによる認証を利用して、ブログの記事編集などの操作をLive Spaces MetaWeblog APIで行いました。今回も引き続いてブログの操作と情報の取得を行います。

第39回40回では、以下のAPIを利用したブログの操作を紹介しています。

  • 記事の投稿
  • カテゴリーの取得
  • 最近の記事一覧の取得
  • 指定した記事の取得
  • 記事の編集

今回は残りの提供されている内容として次の操作を紹介します。

  • 記事の削除
  • ユーザーのLive Spacesに関する情報の取得
  • ユーザー情報の取得

記事の削除

まずLive Spaces MetaWeblog APIによる記事の削除です。Live Spaces MetaWeblog APIは第39回Windows Live IDアカウントによる認証方法は第40回で紹介していますので、そちらを参照してください。

記事の削除は、blogger.deletePostメソッドを使います。これまでのメソッド名と違い、metaWeblogに代わりbloggerという単語がメソッドに含まれています。MetaWeblog APIは39回で少し触れているようにBlogger APIを拡張したものです。この記事の削除はBlogger APIで定義されているものになります。

メソッドのパラメーターは次の通りです。

Appkey Live Spacesでは無視されます
Posted 削除する記事のID
Username ユーザー名
Password パスワード
Publish 無視されます(0または1の値を指定)

appkeyとpublishはLive Spacesでは無視されますが、要求時に送信するXML文書内には上記パラメーターすべてを指定する必要があります。記事IDは、記事の投稿時や、最近の記事一覧取得によって取得できる記事のIDを指定します。ユーザー名は、Live SpaceのURLに含まれる文字列(http://***.spaces.live.com の***の値)です。パスワードは、Live IDアカウントによる認証を利用する場合は空白です。

戻り値は、エラー以外の場合、常に下記のtrueを示すXML文書が返ります。

<methodResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <params>
    <param>
      <value>
        <boolean>1</boolean>
      </value>
    </param>
  </params>
</methodResponse>

実際の記事を削除するメソッドのコードは次のようになります。パラメーターのblogidとusernameを引数に渡して使います。

Sub DeletePost(ByVal blogId As String, ByVal userName As String)
    ' パラメーター
    Dim password = "" ' 秘密のキーワード (Live ID アカウントによる認証では使用しません)

    ' 要求時に送信するXML
    Dim requestXml =
        <?xml version="1.0" encoding="utf-8"?>
        <methodCall>
            <methodName>blogger.deletePost</methodName>
            <params>
                <param><value><string></string></value></param>
                <param><value><string><%= blogId %></string></value></param>
                <param><value><string><%= userName %></string></value></param>
                <param><value><string><%= password %></string></value></param>
                <param><value><boolean>1</boolean></value></param>
            </params>
        </methodCall>

    ' 応答の受信
    Dim doc = GetResponse(requestXml)
End Sub

コード中のGetResponseメソッドは第40回で作成しています。そちらのコードを参照してください。GetResponseメソッドではMetaWeblog APIによるLiveサービスにアクセスして結果を取得する一連の処理を行っています。

以上で、ブログの記事の新規投稿や特定記事の取得、編集、削除とブログ記事に関する操作すべてを紹介したことになります。

ユーザーのLive Spacesに関する情報の取得

次はLive Spacesに関する情報の取得です。これにはblogger.getUsersBlogsメソッドを使用します。このメソッドは指定したユーザーが投稿可能なブログ一覧を返すものですが、Live Spacesではユーザーはひとつのブログしか持てませんので、実質的にはユーザーのLive Spacesのブログ名を取得するのに利用できます。

必要なパラメーターは次の通りです。

appkey Live Spacesでは無視されます
username ユーザー名
password パスワード

戻り値は、ブログ情報を表す構造体の配列です。構造体は次の内容が含まれています。

url ユーザーのLive SpacesのURL
blogid Live Spacesの場合「MyBlog」の固定値
blogName ブログ名

上記の構造体の内容を含む、戻り値のXML文書は次のようになっています。

<methodResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <params>
    <param>
      <value>
        <array>
          <data>
            <value>
              <struct>
                <member>
                  <name>url</name>
                  <value>http://spaces.msn.com/members/***</value>
                </member>
                <member>
                  <name>blogid</name>
                  <value>MyBlog</value>
                </member>
                <member>
                  <name>blogName</name>
                  <value>***</value>
                </member>
              </struct>
            </value>
          </data>
        </array>
      </value>
    </param>
  </params>
</methodResponse>

上記のXML文書から必要な部分を参照してアプリケーションで使用します。ブログのURLはspcaes.msn.comドメインで、現在は通常使用されていないアドレスになっています(アクセスするとspaces.live.comドメインにリダイレクトされます⁠⁠。URLはユーザー名から、http://ユーザー名.spaces.live.com となるため、blogger.getUsersBlogsメソッドから得られる情報はブログ名のみとなります。

情報を取得するコードは次のようになります。ユーザー名を引数で渡し、戻り値が構造体の内容がキー名と値のコレクションのメソッドとして記述しています。

Function GetUsersBlog(ByVal userName As String) As IDictionary(Of String, String)
    ' パラメーター
    Dim password = "" ' 秘密のキーワード (Live ID アカウントによる認証では使用しません)

    ' 要求時に送信するXML
    Dim requestXml =
        <?xml version="1.0" encoding="utf-8"?>
        <methodCall>
            <methodName>blogger.getUsersBlogs</methodName>
            <params>
                <param><value><string></string></value></param>
                <param><value><string><%= userName %></string></value></param>
                <param><value><string><%= password %></string></value></param>
            </params>
        </methodCall>

    ' 応答の受信
    Dim doc = GetResponse(requestXml)

    ' 構造体のキー名と値を取得
    Dim dic = New Dictionary(Of String, String)
    For Each el In doc...<member>
        dic.Add(el.<name>.Value, el.<value>.Value)
    Next

    Return dic
End Function

ユーザー情報の取得

紹介する最後のLive Spaces MetaWeblog APIのメソッドは、ユーザー情報の取得です。これは、blogger.getUserInfoメソッドを使います。ユーザーの姓名やメールアドレスが取得できます。メソッドのパラメーターは次の通りです。

appkey Live Spacesでは無視されます
username ユーザー名
password パスワード

戻り値は、次の内容を含む構造体です。

nickname 不明
userid 不明
url ユーザーのLive SpacesのURL
e-mail 公開メールアドレス
lastname
firstname

以下に構造体の各値について説明します。

nicknameとuseridは、ニックネームとユーザーIDを表す値です。Live Spacesの場合、応答される値についてのドキュメントの記載が見当たらないため不明です。アカウントによってはニックネームに相当する値が両方に設定されているようですが、新規に作成したアカウントでは値が設定されず、設定方法も不明でした。

urlのURLはユーザーのLive Spacesに関する情報を取得した時と同じようにspaces.msn.comドメインになっています。

e-mailは、ユーザーのプロフィールの連絡先情報図1に設定されている電子メールの値です。Live IDアカウントのメールアドレスとは異なります。

図1 連絡先情報の編集ページ
図1 連絡先情報の編集ページ

lastnameとfirstnameは、プロフィールの名前図2に設定されている値です。

図2 名前の編集ページ
図2 名前の編集ページ

コードは次のようになります。ユーザーのLive Spacesに関する情報の取得と同様にユーザー名を引数に指定し、コレクションを返すメソッドとして記述しています。

Function GetUsersInfo(ByVal userName As String) As IDictionary(Of String, String)
    ' パラメーター
    Dim password = "" ' 秘密のキーワード (Live ID 認証では使用しません)

    ' 要求時に送信するXML
    Dim requestXml =
        <?xml version="1.0" encoding="utf-8"?>
        <methodCall>
            <methodName>blogger.getUserInfo</methodName>
            <params>
                <param><value><string></string></value></param>
                <param><value><string><%= userName %></string></value></param>
                <param><value><string><%= password %></string></value></param>
            </params>
        </methodCall>

    ' 応答の受信
    Dim doc = GetResponse(requestXml)

    ' 構造体のキー名と値を取得
    Dim dic = New Dictionary(Of String, String)
    For Each el In doc...<member>
        dic.Add(el.<name>.Value, el.<value>.Value)
    Next

    Return dic
End Function

以上でLive Spaces MetaWeblog APIで提供されているメソッドはすべて紹介したことになります。

MetaWeblog API エラー

APIのメソッド呼出し時に不正なパラメーターを指定したなど、メソッドの実行に失敗した場合、サーバーから応答されるXML文書にはそのエラー内容を表す構造体が返ってきます。ここでは簡単にその内容を紹介します。エラー時の構造体の内容は次の通りです。

faultCode エラーを示すコード(数値)
faultString エラーメッセージ

たとえば、記事の削除時に存在しない記事IDを指定した場合、次のXMLが返ってきます。

<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value>
            <int>40003</int>
          </value>
        </member>
        <member>
          <name>faultString</name>
          <value>
            <string>Directory or File Does Not Exist</string>
          </value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

これまで紹介したコードではエラー処理を省略していますが、実際のアプリケーションでは、これらの値を参照し適切に処理する必要があるでしょう。また、MetaWeblog APIに関するエラー処理だけでなく、HTTP通信における例外処理も必要です。

Live Spaces APIs and Feeds

最後にLive Spaces MetaWeblog以外の提供されているAPIについて少しふれておきます。適切なパラメーターを設定しLive SpacesのURLへアクセスすると引用などの操作ができます。それらはAPIとして提供されています。また、最新記事などの各種情報を取得するためにRSSフィードも提供されており、各フィードのURLもSDKのドキュメントに記載されています。

ただし、残念ながら このAPIとフィード情報は古く、最新のLive Spacesと対応していません。一部のAPIやフィード情報だけが利用できる状態となっています。ここではAPIとフィードの一部を紹介します。すべてのAPIとフィードはMSDN Libraryのドキュメントを参照してください。

Live Spaces APIs

APIのうちのひとつを紹介します。ブログの新規投稿ページをあらかじめタイトルや引用文を設定した状態で開くためのBlogIt(引用)APIがあります。次のURLにアクセスすることで、記事のタイトルと本文と引用元のURLを指定できます。

http://spaces.live.com/BlogIt.aspx?Title=<タイトル>&Description=<本文>&SourceURL=<引用元のURL>

指定可能なパラメーターは次の通りです。値は、いずれもURL内であるため適切にエンコードする必要があります。またパラメーターは省略できます。

Title タイトル
Description 本文
SourceURL 引用元のURL

たとえば、次のURLにアクセスすると図3のようなページに移動します。ページを開く際に、Live IDアカウントによる認証が必要です。

http://spaces.live.com/BlogIt.aspx?Title=%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%EF%BC%81+Windows+Live+SDK%2FAPI&Description=Live+Spaces+API%2FSDK&SourceURL=http://gihyo.jp/dev/serial/01/wl-sdk/0041
図3 BlogIt API
図3 BlogIt API

このAPIを利用すると、Webサイトの訪問者にLive Spacesの記事投稿用リンクを提供できます。

RSSフィード

次に、提供されているフィードについて紹介します。Live SpacesではいくつかのRSSフィードが提供されています。

たとえば、ブログ記事やフォト アルバム情報を含むフィードは次のアドレスにアクセスします。

http://***.spaces.live.com/feed.rss

上記の *** 部分は、Live MetaWeblog APIでユーザー名として使用していたLive SpaceのURLに含まれる文字列です。

フィードの公開は、ユーザーが選択できるようになっており、Live Spacesの設定ページ(http://***.spaces.live.com/Options/General/)図4から行います。

図4 全般オプション
図4 全般オプション

ブログ記事のみのフィードは次の書式になります。

http://***.spaces.live.com/blog/feed.rss

フォトアルバムのフィードは次の書式です。

http://***.spaces.live.com/photos/feed.rss

ユーザー情報のフィードもあります。

http://***.spaces.live.com/profile/feed.rss

このほかにもフィードはいろいろと提供されています。これらをMetaWeblog APIと組み合わせることで、アプリケーション開発時により多くのユーザー情報の取得も可能です。

おわりに

今回はここまでです。3回に渡り、Live Spacesに関するSDKとAPIを紹介してきました。Live Spaces MetaWeblog APIは、Live Spacesだけに依存したAPIではなく、一般的な仕様に基づいたAPIです。MetaWeblog APIに対応したブログであれば、同様の処理でブログ操作が可能です。本連載が、開発の手助けになれば幸いです。

また、今回扱ったLive Spacesは、関連するLiveサービスと連携できるようアップデートが行われていますが、ブログサービス自体や機能についてはあまりアップデートが最近ありません。Live Spacesに限った話ではありませんが、もし不満点や改良してほしい点があれば、より良いサービスとなるよう、ぜひ開発元へフィードバックしましょう。

おすすめ記事

記事・ニュース一覧