┏第74号━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃         .NETプログラミング研究         ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
──<メニュー>───────────────────────
■.NET Tips
・XML-RPCを使ったWebサービスにアクセスする
 -Blogger APIを使う
 -XML-RPC.NETを使用する
───────────────────────────────
───────────────────────────────
■.NET Tips
───────────────────────────────
●XML-RPCを使ったWebサービスにアクセスする
今回はXML-RPCによるWebサービスにアクセスする方法について説明し
ます。XML-RPCはHTTPのPOSTでXMLデータを送信し、XMLデータとして
結果を取得します。なおXML-RPCの仕様については、「XML-RPC 仕様
書」をご覧ください。
[URL]XML-RPC 仕様書
http://lowlife.jp/yasusii/stories/9.html
現在公に公開されているWebサービスでは、XML-RPCを使用したサービ
スは少ないようです。しかし、XML-RPCはブログ関係のAPIとしてはよ
く使われてきました。ブログへの投稿や、記事の更新、削除、情報の
取得などを行うためのAPIであるBlogger APIや、Pingサーバーにブロ
グの更新を伝えるためのWeblogs.Com XML-RPC interfaceなどはXML-
RPCです。
[URL]Weblogs.Com XML-RPC interface
http://www.xmlrpc.com/weblogsCom
そこでここでは、XML-RPCクライアントを作成する例として、Blogger
APIを使用する方法を紹介します。
★Blogger APIを使う
前述した通り、Blogger APIは、ブログへの投稿や、記事の更新、削
除、さらに投稿された記事の情報の取得等を可能にするAPIです。さ
らにBlogger APIを拡張したmetaWeblog APIやMovable Type独自の拡
張であるMovableType APIもよく知られています。Blogger APIは
Movable Typeをはじめ多くのブログアプリケーションや、ホスティン
グ型のブログサービスで利用できます。
[URL]Movable Type 3.3 マニュアル - XML-RPC API
http://www.sixapart.jp/movabletype/manual/3.3/03_blog_username_guide/customizing_blogs/xmlrpc_api.html
[URL]MovableType で使える XML-RPC API
http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html
早速ですが、Blogger APIを使用する具体例として、blogger.
getRecentPostsメソッドを呼び出して一番最近投稿した記事の内容(
content)を取得し表示するサンプルを紹介します。POST送信するXML
データの作成や、結果として返されたXMLデータの解析は手抜きです
が(faultが返された時の処理も省略しています)、大雑把にはこん
な感じです。
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
<%@ Page Language="VB" %>
    Blogger APIのサンプル
    
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
<%@ Page Language="C#" %>
    Blogger APIのサンプル
    
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
リクエストを送信するURLは、Movable Typeの場合、mtフォルダ内に
あるmt-xmlrpc.cgiとなります。また、XML-RPCには文字コードに関す
る明確な規定がないようですが、送信するリクエストは適当な文字コ
ード(多分ブログで使用している文字コードとなるでしょう)で送受
信する必要があるようです。
★XML-RPC.NETを使用する
上記の例はかなり手を抜きましたが、それでも結構大変です。ちゃん
としたものを作るとなると、なおさらです。ありがたい事に、XML-
RPCを実装するためのオープンソースのライブラリが存在します。そ
れがXML-RPC.NETです。
[URL]XML-RPC.NET
http://www.xml-rpc.net/
先と同じようにblogger.getRecentPostsメソッドを今度はXML-RPC.
NETを使って呼び出してみましょう。
まずはDLLをプロジェクトの参照に追加します。XML-RPC.NETには2つ
のDLLがあります。CookComputing.XmlRpc.dllは.NET Frameworkのす
べてのバージョンで使用できますが、CookComputing.XmlRpcV2.dllは
2.0以上でしか使用できません。ここではすべてのバージョンで使用
できるCookComputing.XmlRpc.dllを使います。
次に下に示すような構造体を宣言します。呼び出すメソッドのパラメ
ータや戻り値に構造体が含まれないのであればその必要はありません
が、blogger.getRecentPostsメソッドの場合は、戻り値が構造体の配
列となりますので、これに対応する構造体を宣言する必要があります
(「Movable Type 3.3 マニュアル - XML-RPC API」をご覧ください
)。なぜこのような構造体になるのかについては簡単にお分かりいた
だけると思いますので、特に説明の必要は無いでしょう。ただ、ISO.
8601はDateTime型となります。これは、「XML-RPC.NET FAQ」で説明
されています。
[URL]XML-RPC.NET FAQ
http://www.xml-rpc.net/faq/xmlrpcnetfaq.html#1.9
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Imports System
Namespace BloggerAPI
    Public Structure Post
        Public dateCreated As DateTime
        Public userid As String
        Public postid As String
        Public content As String
    End Structure
End Namespace
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
using System;
namespace BloggerAPI
{
    public struct Post
    {
        public DateTime dateCreated;
        public string userid;
        public string postid;
        public string content;
    }
}
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
次に、IXmlRpcProxyを継承した以下のようなインターフェイスを宣言
します。XmlRpcMethod属性で対応するXML-RPCのメソッドを指定しま
す。ここではblogger.getRecentPostsメソッドしかありませんが、そ
の他のメソッドを記述してももちろんOKです。もしリクエスト先の
URLが固定されているならば、インターフェイスにXmlRpcUrl属性を付
けることもできます。
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Imports System
Imports CookComputing.XmlRpc
Namespace BloggerAPI
    Public Interface IBlogger
        Inherits IXmlRpcProxy
         _
        Function getRecentPosts( _
            ByVal appkey As String, _
            ByVal blogid As String, _
            ByVal username As String, _
            ByVal password As String, _
            ByVal numberOfPosts As Integer) As Post()
    End Interface
End Namespace
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
using System;
using CookComputing.XmlRpc;
namespace BloggerAPI
{
    public interface IBlogger : IXmlRpcProxy
    {
        [XmlRpcMethod("blogger.getRecentPosts")]
        Post[] getRecentPosts(
            string appkey,
            string blogid,
            string username,
            string password,
            int numberOfPosts);
    }
}
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
ここまでできればあとは実に簡単です。XmlRpcProxyGen.Createメソ
ッドでプロキシクラスのインスタンスを作成し、getRecentPostsメソ
ッドを呼び出すだけです。実際のコードは以下のようになります。
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
<%@ Page Language="VB" %>
    Blogger APIのサンプル
    
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
<%@ Page Language="C#" %>
    Blogger APIのサンプル
    
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
ちなみにCookComputing.XmlRpcV2.dllを使用する場合は、次のように
してプロキシクラスのインスタンスを作成します。
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
'プロキシクラスのインスタンスを作成
Dim proxy As BloggerAPI.IBlogger = _
    CookComputing.XmlRpc.XmlRpcProxyGen.Create( _
    Of BloggerAPI.IBlogger)()
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
//プロキシクラスのインスタンスを作成
BloggerAPI.IBlogger proxy =
    CookComputing.XmlRpc.XmlRpcProxyGen.Create();
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
===============================
■ここで示したコードの多くはまずC#で書き、それを「C# to VB.NET 
Translator」でVB.NETのコードに変換し、修正を加えたものです。
[URL]C# to VB.NET Translator
http://authors.aspalliance.com/aldotnet/examples/translate.aspx
■このマガジンの購読、購読中止、バックナンバー、説明に関しては
 次のページをご覧ください。
 http://www.mag2.com/m/0000104516.htm
■発行人・編集人:どぼん!
 (Microsoft MVP for Visual Basic, Oct 2005-Oct 2006)
 http://dobon.net
 dobon_info@yahoo.co.jp
■ご質問等はメールではなく、掲示板へお願いいたします。
 http://dobon.net/vb/bbs.html
■上記メールアドレスへのメールは確実に読まれる保障はありません
 (スパム、ウィルス対策です)。メールは下記URLのフォームメール
 から送信してください。
 http://dobon.net/mail.html
Copyright (c) 2003 - 2006 DOBON!  All rights reserved.
===============================