今日では、個人的なブログや、企業や業界によるブログは、ほとんどの人達におなじみのものです。企業や業界によるブログは、企業や業界による従来の Web サイトから派生した次世代のツールであることは、疑う余地がありません。そしてそのコンテンツは、不器用に使い回された製品発表や広報活動のようなものから、企業の製品や業界の今後の動向と密接に関係するトピックについての極めて有用で示唆に富んだ解説に至るまで、多種多様です。
企業や業界のブログが適切に構成されており、実際に頻繁に更新され、有用な情報を提供できると、企業内での情報伝達や議論のためのメカニズムとしてブログを利用することへの関心を高めることができます。ブログを採用する企業は、企業の IT インフラを強化するための他のタスクと同様にブログを扱う必要があります。通常、社内向けの企業ブログには事業に関する機密事項が含まれた議論や情報が含まれているため、その企業の IT スタッフがホスト作業を行う必要があります。そのため、適切なブログ・プラットフォームを選択することが最初の重要なステップです。
標準的なブログ API をサポートするオープンなプラットフォームを選択すると、ユーザーにも管理者にも大きなメリットがあります。ユーザーは、ブラウザーのプラグインからプラットフォーム専用のクライアント・アプリケーションに至るまで、幅広い種類の一般的なアプリケーションを使ってブログ・エントリーを追加することができます。また管理者は、公開の API がサポートされていることで、監督や管理のためのアプリケーションを利用したり開発したりすることができます。
標準的なブログ API はいくつかあります。そうした API のうち、この記事の執筆時点で最も広く使用され、サポートされているものを以下に挙げます。
- Blogger: これらの API のなかで最も古い Blogger は、XML-RPC ベースのインターフェースであり、元々は Pyra Labs が彼らの Blogger ソフトウェア用に作成したものです。この最初のバージョンは他の多くのブログ・プラットフォームに即座に採用されました。これは、1 つには Blogger がデータの送信や交換用の標準メカニズムとして XML を使用していたためであり、また 1 つには Blogger が XML-RPC 標準を使用しており、XML-RPC ライブラリーを使用できる任意のプログラミング言語で Blogger を実装できたためです。Google は 2003年に Blogger を買収し、その後まもなく Blogger 2.0 API が登場しました。この API は現在、Google Data API の 1 つと見なされています。
- MetaWeblog: Blogger 1.0 API で見つかった制約を克服するために、ソフトウェア開発者の Dave Winer によって 2002年に開発されました。MetaWeblog API は XML-RPC ベースの API であり、RSS Web フィード・フォーマット (特に
<item>タグ) の概念を使用することにより、構造化されたデータとしてブログ記事を扱います。これは Blogger API でブログ記事を単純なストリングとして扱う方式とは異なります。この RSS Web フィード・フォーマットの統合によって、おなじみのモデルを使うことで、構造化されたブログ記事を作成、送信、管理、照会することができます。 - Atom: この XML ベースの API は Atom 出版プロトコルとして知られ、ワイヤー・レベルのプロトコルとして XML-RPC ではなく Web サービスを使用しています。この API は既存の HTTP 認証メカニズムを利用してセキュリティーを向上させており、また適切な
<link>タグを Web ページ・ヘッダーに使用することで API を検出するといった高度な機能をサポートすることができます。このプロトコルの詳細は「参考文献」のリンクを参照してください。
この 3 つのブログ API のうち、この記事では MetaWeblog に焦点を絞ります。
MetaWeblog API をサポートするブログ・パッケージとして最もよく使われるものはオープンソースのパッケージであり、従って社内用の企業インフラにインストールして使用することができます。よく使われるブログ・パッケージには以下のようなものがあります。
- BLOG:CMS: この GPL (GNU General Public License) パッケージには、Apache Web サーバー、PHP、そして MySQL や SQLite などの SQL データベースが必要です。
- Blojsom: この BSD (Berkeley Software Distribution) ライセンスのパッケージには、Java™ 言語、JSP (JavaServer Page) アプリケーション・サーバー (JBoss、Jetty、Apache Tomcat など)、そして SQL データベースが必要です。
- Drupal: Drupal は基本的に CMS (コンテンツ管理システム) ですが、MetaWeblog をサポートする GPL パッケージでもあります。Drupal には、Apache または Microsoft® IIS (Internet Information Service) Web サーバー、PHP、そして MySQL または PostgreSQL のいずれかが必要です。現在、Microsoft SQL サーバーをサポートするための作業が行われています。
- Movable Type: この GPL パッケージには、Apache または IIS Web サーバー、PHP、Perl、そして SQL データベースが必要です。最近、Movable Type 開発コミュニティーが 2 つに別れ、OpenMelody が作られました。OpenMelody は新しいものですが、調べてみる価値があります。
- Pebble: このBSD ライセンスのパッケージは MetaWeblog 用に作成されており、Java 言語と JSP バージョン 2.0/サーブレット・バージョン 2.4 のアプリケーション・サーバー (Tomcat など) を必要とします。コンテンツはサーバーに XML で保存されるため、データベースは必要ありません。
- Roller: Roller は Apache Foundation が提供する Apache ライセンスのパッケージであり、Java 言語、JSP 2.0/Servlet 2.4 アプリケーション・サーバー (Tomcat など)、そして SQL データベースを必要とします。
- WordPress: この GPL パッケージには、Apache Web サーバーと Perl、MySQL が必要です。
どのパッケージを利用することにするかは、まずは Web インフラが Web サーバー向けなのかアプリケーション・サーバー向けなのかによって変わってきます。WordPress と Movable Type は経験豊富なブロガーにはおなじみのはずであり、BLOG:CMS や Drupal と同様、Web サーバー以外は必要ありません。Blojsom、Pebble、Roller は強力なブログ・パッケージであり、アプリケーション・サーバーを必要としますが、リレーショナル・データベースに対する要件はそれぞれ異なります (Pebble にはデータベースが必要ありません)。
MetaWeblog API を利用すると、この API をサポートする任意のソフトウェア・パッケージを使ってブログ・エントリーを投稿、取得、編集することができます。多くの人達は単に彼らのブログに用意されているエディターを使ってオンラインでブログ・エントリーを作成しますが、MetaWeblog API を利用する場合には、デスクトップ・パッケージから、(後ほど説明する) ScribeFire のようなブラウザー・ベースのパッケージに至るまで、非常に表現力の豊かな編集ソフトウェアを使用することができます。また MetaWeblog API を利用すると、システム管理者はブログ・エントリーのバックアップやアーカイブの作成を容易に行うことができ、また必要に応じて別のブログ・パッケージに容易に移行することもできます。
MetaWeblog API は数個のメソッドで構成されているため、この API を容易に学ぶことができます。それらのメソッドを以下に挙げます。
- editPost
boolean metaWeblog.editPost(string postid, string username, string password, struct content, boolean publish) - getCategories
struct metaWeblog.getCategories(string blogid, string username, string password) - getPost
struct metaWeblog.getPost(string postid, string username, string password) - getRecentPosts
struct metaWeblog.getRecentPosts(string postid, string username, string password, integer numberOfPosts) - newMediaObject
struct metaWeblog.newMediaObject(string blogid, string username, string password, struct content) - newPost
string Post metaWeblog.newPost(string blogid, string username, string password, struct content, boolean publish)
以下はこれらのメソッドのパラメーターです。
blogid: 接続先のブログを特定します。content: ブログ・エントリー用のデータを含む構造です。この構造体の中にメンバーとして定義されるのは、RSS 2.0 の
<item>型が取り得る値です (author、category、comments、description、enclosure、guid、link、pubDate、source、title)。これらの標準的な値を使用することで、ブログ・コンテンツやメタデータのための、よく知られた語彙を提供することができます。必須属性を持つ RSS の要素 (enclosureなど) は、これらの要素の値を提供するメンバーを持つ構造体をとおして受け渡しされます。ブログ・エントリーの場合、この構造体の基本メンバーは、title、link、descriptionの 3 つです。newMediaObjectメソッドを利用すると、ファイル (通常は音声ファイルまたは動画ファイル) をブログ・サーバーに転送することができます。このメソッドを使用する場合には、メンバーとして bits (base64 でエンコードされた実際のファイルのコンテンツ)、name (ブログ・サーバーで使用するファイル名)、type (ファイルの MIME タイプ) が含まれている構造体を用意する必要があります。numberOfPosts: 取得対象のブログ記事の最大数を指定します。password: ブログにログインする際の認証に使用するパスワードを指定します。postid: 編集または取得対象のブログ記事を特定します。publish: そのブログ・エントリーを公開するのか (True)、それとも新規または更新エントリーを下書きとして保存するのか (False) を指定します。username: ブログにログインする際の認証に使用するユーザー名を指定します。
metaWeblog メソッドは以下のものを返します。
editPost: 必ず True を返します。getCategories: 利用可能な各カテゴリーを識別する構造体を返します。この構造体はメンバーとして 3 つのストリング (description、htmlUrl、rssUrl) を持ちます。getPost:newPostメソッドとeditPostメソッドのパラメーターとして提供される構造体のメンバーと同じメンバーを含む構造体を返します。getRecentPosts: 最新のブログ記事に対応する構造体の配列を返します。この配列の中の各構造体には、getPostを呼び出した場合に返されるメンバーと同じメンバーが含まれています。newMediaObject:urlという名前のメンバーを含む構造体を返します (url は HTTP または FTP を使用してファイルの URL を指定します)。newPost: ストリングを返し、このストリングをeditPostまたはgetPostを呼び出す場合にblogidとして使用することができます。
API の説明は興味深いものですが、実践演習に勝るものはありません。特に、おそらく皆さんにはなじみのない別の API (この場合は XML-RPC API) を使う必要のある API の使い方を学ぶためには、実際に使ってみることが一番です。以下の 2 つのセクションでは、MetaWeblog で最もよく使われる newPost メソッドの使い方に焦点を当て、さまざまな方法で新しい投稿を作成してみます。
リスト 1 の例は、metaWeblog.newPost メソッドを呼び出すための非常に単純な方法を示しています。
リスト 1. MetaWeblog を使った単純な投稿
import java.util.*;
import java.io.*;
import java.net.URL;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
public class DemoPost {
public static void main(String[] args) throws Exception {
// Set up XML-RPC connection to server
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http://wordpress-host/wordpress/xmlrpc.php"));
XmlRpcClient client = new XmlRpcClient();
client.setConfig(config);
// Set up parameters required by newPost method
Map<String, String> post = new HashMap<String, String>();
post.put("title", "Hello, Blog!");
post.put("link", "http://www.vonhagen.org/");
post.put("description", "This is the content of a trivial post.");
Object[] params = new Object[]{"1", "admin", "password", post, Boolean.TRUE};
// Call newPost
String result = (String) client.execute("metaWeblog.newPost", params);
System.out.println(" Created with blogid " + result);
}
}
|
main メソッドの中の最初のコード・ブロックにより、MetaWeblog が使用する XML-RPC の土台が構成され、URL http://wordpress-host/wordpress/xmlrpc.php へのクライアント接続が確立されます (この URL は、私がサンプルとして作成した WordPress によるブログ・サーバーの XML-RPC の URL です)。ブログ・サーバーが異なれば、そのサーバーで使用される XML-RPC の URL も異なります。具体的にどのような URL が必要かについては、皆さんが選択したブログ・サーバーのドキュメントを調べてください。
2 番目のコード・ブロックでは、ハッシュ・マップを作成し、ブログ記事の作成に必要な情報を提供する、名前と値のペアをそのハッシュ・マップに追加します。title、link、description の値を設定すると、ハッシュ・マップは metaWeblog.newPost メソッドに必要な他のパラメーターと共に、配列の中に格納されます。
3 番目のコード・ブロックは、最初のコード・ブロックで作成された XML-RPC によるクライアント接続を使って、実際に metaWeblog.newPost メソッドを呼び出します。次にこのコードは、このメソッドから返されるストリング (リモートで作成されたブログ・エントリーの blogid) を出力します。
MetaWeblog を使ってファイルをコンテンツとして投稿する
上記の例は興味深いものでしたが、ブログのフォーマットで Twitter を再実装して 1 つの短いストリングを投稿できるようにしたいという要求は、非常に稀なはずです。実際には、普段から使用しているテキスト・エディターを使ってファイルを作成し、そのファイルにカスタムのタイトルを付けてブログに投稿したい、という要求の方が現実的です。
リスト 2 の例は、metaWeblog.newPost メソッドを呼び出すことで、ファイルをコンテンツとして投稿することができ、またオプションとして投稿のタイトルを指定することができるように、上記の例を基に作成したものです。これらのアイテムの指定は、このアプリケーションを実行する際にコマンドラインで行います。
リスト 2. ファイルをコンテンツとして投稿する
import java.util.*;
import java.io.*;
import java.net.URL;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
public class DemoPostFile {
private static byte[] readFromFile(String src) throws Exception {
byte data[];
File file = new File(src);
InputStream in = new FileInputStream(src);
data = new byte[(int)file.length()];
in.read(data);
in.close();
return data;
}
public static void main(String[] args) throws Exception {
String filename = null;
String title = "Sample Post From a File";
// Parse and apply command-line args
if (args.length > 1) {
filename = args[0];
title = args[1];
} else if (args.length == 1) {
filename = args[0];
title = "Posted From File: " + filename;
} else {
System.out.println("Usage: DemoPostFile filename [title] ");
return;
}
// Set up XML-RPC connection to server
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http://wordpress-host/wordpress/xmlrpc.php"));
XmlRpcClient client = new XmlRpcClient();
client.setConfig(config);
// Read post from file and set up parameters required
// by newPost method
String bits = new String(readFromFile(filename));
System.out.println(bits);
Map<String, String> post = new HashMap<String, String>();
post.put("title", title);
post.put("description", bits);
Object[] params = new Object[]{"1", "admin", "password", post, true};
// Call newPost
String result = (String) client.execute("metaWeblog.newPost", params);
System.out.println(" Created with blogid " + result);
}
}
|
このアプリケーションで最初に定義されているメソッドは readFromFile メソッドです。ここでは readFromFile は静的メソッドとして宣言されているため、静的な main メソッドの中で使用しているコマンドライン引数の解析機能と容易に統合することができます。
このアプリケーションの main メソッドの最初のコード・ブロックでは、このアプリケーションが使用する 2 つの変数を初期化しています。この 2 つの変数は、このアプリケーションによって投稿されるブログ・エントリーを含むファイルの名前、そしてその投稿のタイトルです。このコード・ブロックでは次に、アプリケーションの呼び出し時に指定された引数を解析し、その引数の中にファイル名、タイトル、またはその両方が含まれているかどうかを判断し、それに応じて適切な動作を行います。
その次のコード・ブロックでは、ブログ・サーバーへの XML-RPC によるクライアント接続を初期化しています。その次のコード・ブロックでは、コマンドラインで指定したファイルのコンテンツを読み取って変数の中に入れ、metaWeblog.newPost メソッドを使うために必要な他の変数を設定します。最後のコード・ブロックでは、このメソッドを呼び出し、その結果のコード (ブログ・サーバー上の投稿の blogid) を出力しています。
すべての人が上のセクションで説明したような単純なユーティリティーを必要とするわけではありません。すべての人が独自のツールを作成したいと望むわけではなく、ましてや従来のコマンドラインからプログラムを実行したいと望む人は稀です。MetaWeblog のような標準的な API を使用するブログ・サーバーを実行する主な理由は、さまざまなアプリケーションを使用することができ、さまざまな言語で作成することができ、そしてさまざまなオペレーティング・システムや環境で実行できるからです。他にも、独自の機能と愛好者を持つ数多くのブログ・クライアントがあり、それらを利用することでブログ・エントリーを容易に作成、投稿することができます。
最も便利な MetaWeblog クライアントの 1 つが ScribeFire (「参考文献」を参照) です。ScribeFire は Mozilla Firefox のアドオンであり、Firefox の中でフル機能のブログ・エディターとして使用することができます。ScribeFire を使用すると、ブログへの投稿を容易に行うことができ、さらには他の Web ページや文書からのフォーマットが設定されたテキストをドラッグ・アンド・ドロップしたり、画像をアップロードしたり、その他さまざまなことを行うことができます。図 1 は、ScribeFire (Firefox ウィンドウの下の部分) を使って WordPress (Firefox ウィンドウの上の部分) によるブログに投稿する方法を示しています。
図 1. ScribeFire を使って WordPress に投稿する
また MetaWeblog クライアントでは、通常、複数のブログに接続する構成にしたり、同じコンテンツを異なるブログに投稿したりすることができます。この機能を利用すると、例えば社内用のブログから社外用のブログに非常に容易に投稿を転送することができます。図 2 は、ScribeFire (Firefox ウィンドウの下の部分) を使って図 1 と同じコンテンツを Pebble ブログ (Firefox ウィンドウの上の部分) に投稿する方法を示しています。
図 2. ScribeFire を使って Pebble に投稿する
Pebble: オープン・スタンダードに基づくオープンソースのソフトウェアによって作成されたブログ・サーバー
この記事で説明した (そしてこの記事に付属の) サンプル・ユーティリティーは、MetaWeblog 全体のうちの、ほんの一部にすぎません。MetaWeblog API をサポートする任意のユーティリティーを使って、MetaWeblog API をサポートする任意のブログ・サーバーと通信を行うことができます。また MetaWeblog API を、ブログ・サーバーの実装のためのコアとして使うこともできます。その一例が Pebble ブログ・サーバーです (「参考文献」を参照)。
Pebble ブログ・サーバーは BSD (Berkeley Software Distribution) ライセンスによるパッケージであり、MetaWeblog を使って作成されています。Pebble はオープンソースであるため、Pebble のコードは無料でダウンロードすることができます。また Pebble には、MetaWeblog API の呼び出し方法を示す有用な例が数多く含まれています。図 3 は Pebble の標準的なインターフェースを示しています。
図 3. Pebble のウェルカム・ページ
Pebble が持つ特徴のなかでも、より興味深いのは、Pebble サーバー上のブログ・コンテンツは XML ファイルとして保存され、他のほとんどのブログ・サーバーのようにデータベースに保存されるわけではありません。データベース・サーバーが不要なため、Pebble はシステム・リソースの要件の面で他の大半のブログ・サーバーよりも軽量であり、その上バックアップなどの作業も単純になります。ブログ記事は標準的なファイルシステムの一部としてバックアップされ、データベースへのダンプやチェックポイントは必要ありません。
企業ブログは、あらゆる種類の企業情報の提供に適した完璧な配信メカニズムというわけではありませんが、企業による新しい形の情報伝達や議論のための重要な一歩となることができます。企業ブログ用のサーバーを選択する際、従来からの判断要素は、コスト、保守性、そしてユーザビリティーです。しかしこの記事で説明したように、ブログ・サーバーがどのような API をサポートするかも、従来からの判断要素と同じように重要な判断要素です。標準的な API をサポートする MetaWeblog のようなブログ・サーバーを選択すると、ブログのユーザビリティーの点で長期的に大きなメリットがあります。標準的な API がサポートされていることで、その中央リソースへのブログ記事の投稿や編集を、さまざまなクライアントを使用して行うことができるからです。多くの場合、こうした柔軟性は皆さんのブログを人々が利用するかどうかに影響するのです
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| Simple MetaWeblog posting application | DemoPost.java.zip | 2KB | HTTP |
| MetaWeblog application to post file content | DemoPostFile.java.zip | 2KB | HTTP |
学ぶために
- MetaWeblog API に関して最も信頼のおけるリソース、MetaWeblog の最終 RFC 投稿を読んでください。
- さまざまなプログラミング言語による MetaWeblog の実装方法の説明や例など、MetaWeblog API の使い方についての情報を General MetaWeblog API で入手してください。
- XML-RPC.com を訪れ、XML-RPC、XML-RPC 仕様に基づく API、XML-RPC ツール、その他に関する一般的な情報や詳細な情報を入手してください
- Blogapps Project と、そこにある豊富なサンプル・プログラムを調べてください。これらのサンプル・プログラムを見ると、ブログを扱うためのさまざまな API の使い方を学ぶことができます。このプロジェクトは基本的に Atom API に焦点を当てていますが、MetaWeblog API の使い方を示す例も取り上げています。これらの例は、Dave Johnson による優れた著書、『RSS and Atom in Action』(2006 年、Manning 刊) に採用されています。この本は RSS や Atom フィード技術、Atom Publishing API を学ぶための素晴らしいリソースです。
- Atom 出版プロトコルのための仕様、Internet Engineering Task Force (IETF) RFC 5023 を読んでください。Atom 出版プロトコルの仲間で Web フィードに使われる Atom 配信フォーマットは、IETF 提案の標準として RFC 4287 で公開されています。
- XML および関連技術において IBM 認定技術者になる方法については、IBM XML certification を参照してください。
- developerWorks の XML ゾーンを XML の技術ライブラリーとして利用してください。広範な話題を網羅した技術記事やヒント、チュートリアル、技術標準、IBM Redbooks などが用意されています。
- developerWorks の technical events and webcasts で最新情報を入手してください。
- developerWorks podcasts ではソフトウェア開発者のための興味深いインタビューや議論を聞くことができます。
製品や技術を入手するために
- この記事の執筆時点で最もよく使われているブログ API である、Blogger、MetaWeblog、Atom をダウンロードしてください。
- Pebble のサイトを訪れ、MetaWeblog ベースのブログ・サーバーである Pebble の詳細について知り、また Pebble をダウンロードしてください。
- Apache XML-RPC のサイトから最新版を皆さんのシステムにダウンロードしてください。
- Apache XML-RPCのミラー・サイトから、Apache の XML-RPC 実装に必要な JAR ファイルをダウンロードしてください。
- Firefox 用のプラグイン、ScribeFire の最新バージョンをダウンロードしてください。
- IBM 製品の評価版をダウンロードするか、あるいは IBM SOA Sandbox のオンライン試用版で、DB2®、Lotus®、Rational®、Tivoli®、WebSphere® などが提供するアプリケーション開発ツールやミドルウェア製品を試してみてください。
議論するために
- XML zone discussion forums に参加してください。これらのフォーラムでは XML を中心に議論が行われています。
- developerWorks blogs から developerWorks のコミュニティーに加わってください。
