┏第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. ===============================