目次


Flex マイクロブロギング・アプリケーションで pureXML を利用する

第 3 回 pureXML Web サービスを使用して、マイクロブログ・エントリーを HTML ページに公開する

pureXML データベースから最新の近況アップデートを抽出し、RSS フィードとして、あるいは Twitter に公開する

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: Flex マイクロブロギング・アプリケーションで pureXML を利用する

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:Flex マイクロブロギング・アプリケーションで pureXML を利用する

このシリーズの続きに乞うご期待。

前提条件

この記事では PHP を使用して、プロフィール・バッジ・ジェネレーター、RSS パブリッシャー、そして Twitter プッシュ・アプリケーションを作成します。開発環境の一部として、オープンソースの Apache Web サーバーと DB2 Express-C データベース・サーバーが必要です。それぞれのダウンロードについての情報は、記事の終わりにある「参考文献」を参照してください。

はじめに

この連載では、IBM DB2 pureXML データベースを操作するアプリケーションを作成しています。最終回となる第 3 回目の記事では、よく使われている PHP 言語を使用して、データベースに保管された近況アップデートを Web を介して公開および配信するスクリプトを作成します。

今回の作業で最初に行うのは、ユーザーがプロフィール・バッジを HTML で作成できるようにして、その HTML コードを自分のブログや Web サイトに貼り付けられるようにすることです。このコードで、最新の近況アップデートを pureXML データベースから抽出し、事前定義されたフォーマットで表示します。バッジのサイズと色はユーザーが選択することで、デザインをカスタマイズすることができます。また、表示するアップデートの数もユーザーが定義することができます。これに続き、データベースに保管された最新の近況アップデートを RSS フィードとして公開する PHP スクリプトを作成します。そして最後に、データベースに保管されたすべての近況アップデートを、それぞれのアップデートの横に「Post to Twitter」ボタンを配してユーザーに表示するスクリプトを作成します。ユーザーがこのボタンをクリックすると Twitter API が指定された投稿を取得して、そのユーザーの Twitter ストリームにアップデートを追加するという仕組みです。

コードの作成に取り掛かる前に、開発環境をセットアップする必要があります。そのための最初の作業は、Web サーバーをインストールすることです。この記事では、オープンソースの Apache Web サーバーを使用します。Web サーバーをインストールしたら、続いて PHP をインストールし、Apache および DB2 と連動するように構成します。それでは早速、Apache をダウンロードして、インストールする手順を開始します。

Apache のインストール

任意の Web ブラウザーを開いて Apache HTTP Server のダウンロード・ページにアクセスしてください (リンクについては「参考文献」を参照)。best available version と示されているバージョンのセクションまでスクロールダウンし、そのセクションに記載されている Win32 Binary without crypto ダウンロードを見つけます。この記事を執筆している時点での最新バージョンは 2.2.14 でした。

ダウンロード・ファイルをアクセスしやすい場所 (Windows® デスクトップなど) に保存します。ダウンロードが完了したら、.msi ファイルを起動してセットアップ・ユーティリティーを実行します。

Next」をクリックして「License Agreement」画面に進みます。使用許諾契約の内容を読んでから「I accept the terms in the license agreement」オプションを選択し、「Next」をクリックします。次の画面には「Read This First」文書が表示されます。「Next」をクリックして続けます。

「Server Information」画面で入力する値はそれほど重要ではありません。ここでセットアップしているのは開発環境なので、Apache インストール環境にはローカル・ホストのアドレスでアクセスします。したがって、任意のドメインと E メール・アドレスを入力するので構いません。「Install Apache HTTP Server 2.2 programs and shortcuts for」オプションでは、「for All Users, on Port 80, as a Service」オプションが選択されていることを確認してください (これが、推奨されるオプションです)。この画面での私の設定内容を図 1 に示します。設定が完了したら、「Next」をクリックします。

図 1. Apache Server 情報
Apache の「Server Information」ダイアログのスクリーン・キャプチャー。ネットワーク・ドメイン、サーバー名、管理者の E メール・アドレスを入力するフィールドが表示されています。
Apache の「Server Information」ダイアログのスクリーン・キャプチャー。ネットワーク・ドメイン、サーバー名、管理者の E メール・アドレスを入力するフィールドが表示されています。

次の画面では、セットアップのタイプとして「Typical」または「Custom」を選択するように求められます。インストールする Apache Server のコンポーネントを変更する必要がない限り、ここでは「Typical」を選択するのが無難です。「Next」をクリックして次の画面に進んでください。

「Destination Folder」画面では、デフォルトのインストール・ディレクトリー「C:\Program Files\Apache Software Foundation\Apache2.2\」を使用します。

これで、インストールを開始する準備が整いました。「Ready to Install the Program」画面で「Install」をクリックして、インストールを開始してください。

インストールにはほんの数分しかかからないはずです。インストールが完了すると、図 2 のような画面が表示されるので、「Finish」をクリックしてインストーラーを終了します。

図 2. インストールの完了
Apache サーバーのインストール完了を伝えるダイアログのスクリーン・キャプチャー
Apache サーバーのインストール完了を伝えるダイアログのスクリーン・キャプチャー

インストールが正常に完了すると、Apache がシステムで稼働中になります。まずその目安として、システム・トレイに小さなアイコンが追加されているはずです。このアイコンは、Apache のロゴの上に再生ボタンを重ねたものになっています (図 3 を参照)。

図 3. Apache のシステム・トレイ・アイコン
Apache のシステム・トレイ・アイコンのスクリーン・キャプチャー

Apache が稼働中であることをダブルチェックするために、任意の Web ブラウザーを開いて、アドレス・バーに URL http://localhost/index.html を入力してください。Apache のインストールが正常に完了していれば、「It works!」というメッセージが表示されます (図 4 を参照)。

図 4. It works!
Apache サーバーが正常にインストールされた場合に表示される「It works!」メッセージのスクリーン・キャプチャー
Apache サーバーが正常にインストールされた場合に表示される「It works!」メッセージのスクリーン・キャプチャー

Apache がインストールされて稼働している状態になったので、次は PHP のインストール作業に移ります。

PHP のインストール

PHP には、最新の Windows 用バイナリーをダウンロードする必要があります (リンクについては「参考文献」を参照)。ダウンロード・ページには多数の選択肢がありますが、ここで必要なのは、PHP バージョン 5.2.x (この記事を執筆している時点での最新版は 5.2.11) の VC6 x86 Thread Safe バージョンです (図 5 を参照)。PHP 5.3 は使用しないでください。現時点で、PHP 5.3 は PECL (PHP Extension Community Library) 拡張機能をサポートしていないからです。VC6 x86 Thread Safe バージョンでは、Zip ファイルを選択します (インストーラーまたはデバッグ・パックをダウンロードしないでください)。

図 5. PHP Windows 用バイナリー・ダウンロード・ページ
PHP Windows 用バイナリー・ダウンロード・ページのスクリーン・キャプチャー
PHP Windows 用バイナリー・ダウンロード・ページのスクリーン・キャプチャー

Zip ファイルをアクセスしやすい場所に保存します。ダウンロードが完了したら、Zip アーカイブの内容を C:\php フォルダーに解凍します。解凍後のフォルダーには、図 6 に示すように、複数の lib と php dll ファイルに加え、PEAR などのフォルダーが含まれています。

図 6. C:\php フォルダーの内容
C:\php フォルダーの内容のスクリーン・キャプチャー
C:\php フォルダーの内容のスクリーン・キャプチャー

次に必要な作業は、システム・パスを変更して PHP インストール・フォルダーをパスに追加することです。Windows の「Control Panel (コントロール パネル)」で「System (システム)」を開き、「Advanced (詳細設定)」タブをクリックします (図 7 を参照)。

図 7. システムのプロパティー
「System Properties (システムのプロパティ)」ダイアログの「Advanced (詳細設定)」タブのスクリーン・キャプチャー
「System Properties (システムのプロパティ)」ダイアログの「Advanced (詳細設定)」タブのスクリーン・キャプチャー

Environment Variables (環境変数)」をクリックしてダイアログを開きます。「System variables (システム環境変数)」の下の Path 変数を見つけて選択し、「Edit (編集)」をクリックします (図 8 を参照)。

図 8. 環境変数
「Environment Variables (環境変数)」ダイアログで「System variables (システム環境変数)」の Path 変数が選択されている画面のスクリーン・キャプチャー
「Environment Variables (環境変数)」ダイアログで「System variables (システム環境変数)」の Path 変数が選択されている画面のスクリーン・キャプチャー

「Edit System Variable (システム変数の編集)」ダイアログで、「Variable value (変数値)」フィールドに値 ;c:\php を追加します (図 9 を参照)。

図 9. システム変数の編集
値 ;c:\php が追加された「Edit System Variable (システム変数の編集)」ダイアログのスクリーン・キャプチャー
値 ;c:\php が追加された「Edit System Variable (システム変数の編集)」ダイアログのスクリーン・キャプチャー

OK」をクリックして、開いている 3 つのウィンドウをすべて閉じます。C:\php フォルダーのなかに、php.ini-recommended という名前のファイルがあります。このファイルをコピーして同じフォルダー内に貼り付け、ファイル名を php.ini に変更してください。この作業が終わったら、今度は PHP の DB2 拡張機能をダウンロードします (リンクについては「参考文献」を参照)。ダウンロードするのは、PHP 用 PECL 拡張機能のアーカイブです。このアーカイブを任意の場所に解凍します。ファイルの解凍先フォルダーを開くと、php_ibm_db2.dll というファイルがあるので、このファイルをコピーして C:\php\ext フォルダーに貼り付けます。これで、DB2 拡張機能は有効になりました。続いてこの拡張機能を使用するように PHP を構成します。

C:\php\php.ini ファイルを任意のテキスト・エディターで開き、extension_dir = "./" という行を検索します。この行を extension_dir = "c:\php\ext" となるように変更してください。次に、このファイルの動的拡張機能のセクションを見つけます。同セクションの最後の行は、;extension=php_zip.dll となっているので、この行の下に、extension=php_ibm_db2.dll という行を追加して、DB2 拡張機能を有効にします。次に、拡張機能のセクションで ;extension=php_curl.dll という行を検索し、行の先頭にあるコメントのセミコロン文字を削除し、extension=php_curl.dll となるようにします。

このファイルを保存すれば、PHPの構成は完了です。今度は、Apache インストール環境を構成して PHP の場所を指定します。C:\Program Files\Apache Software Foundation\Apache2.2\conf\ にある Apache 構成ファイル httpd.conf を任意のテキスト・エディターで開いてください。このファイルの終りに、リスト 1 の行を追加します。

リスト 1. PHP 対応 Apache の構成 – httpd.conf ファイル
LoadModule php5_module "c:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
PHPIniDir "C:/php"

httpd.conf ファイルを保存してテキスト・エディターを閉じます。ここで、システム・トレイの Apache アイコンを左のマウス・ボタンでクリックし、「Apache2.2」 > 「Restart」の順に選択します。すると Web サーバーが停止してから再起動します。万事順調であれば、すべてが適切に構成された PHP と DB2 拡張機能を使用して Web サーバーが稼働中になります。

PHP と DB2 拡張機能が実際に稼働していることを確かめるために、ここで簡単なテストを行います。テキスト・エディターをもう一度開き、新規ファイルを作成して、そのファイルに <?php phpinfo(); ?> と入力してください。

ファイルに test.php という名前を付けて C:\Program Files\Apache Software Foundation\Apache2.2\htdocs フォルダーに保存した後、Web ブラウザーを開いて http://localhost/test.php にアクセスしてください。図 10 のような PHP アプリケーションに関する情報を記載したページが表示されれば、テストは合格です。

図 10. PHP 情報ページ
PHP 情報ページのスクリーン・キャプチャー
PHP 情報ページのスクリーン・キャプチャー

このページが表示されることだけで PHP が稼働中であることは確認できますが、DB2 拡張機能についてはどうでしょうか。ページの半分までスクロールダウンすると、ibm_db2 というタイトルのセクションがあります (図 11 を参照)。このセクションがあれば、DB2 拡張機能は正常にロードされたことになります。

図 11. ibm_db2 拡張機能に関する情報
ibm_db2 拡張機能に関する情報のスクリーン・キャプチャー
ibm_db2 拡張機能に関する情報のスクリーン・キャプチャー

PHP と PHP 対応 DB2 拡張機能のインストールおよび構成が完了したので、これで、PHP で DB2 データベースを操作することができます。次のセクションではすべてが機能することをテストするために、DB2 データベースに接続し、PHP を使ってデータを取得してみます。

PHP による DB2 との接続

これから、DB2 データベースとの接続をテストします。テキスト・エディターを開いて、新規ファイルを作成し、リスト 2 の内容を追加してください。このファイルを test_db.php という名前で、C:\Program Files\Apache Software Foundation\Apache2.2\htdocs フォルダーに保存します。$db$user$pass の各変数は、連載第 1 回で DB2 自体を扱ったときに使用した値に変更してください。$user は、表が保管されているスキーマを表す変数です。

リスト 2. test_db.php
<?php
$db = 'MBLOG';
$user = 'MBLOG';
$pass = 'password';
$host = 'localhost';
$port = 50000;

$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$db; " .
    "HOSTNAME=$host;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$pass; ";

$conn = db2_connect($settings, '', '');

if(!$conn) {
    echo "Connection failed<br />";
    echo db2_conn_errormsg($conn);
}

$sql = "SELECT * FROM status_updates";
$result = db2_exec($conn, $sql);
echo "<ul>";
while($row = db2_fetch_array($result)) {
    echo "<li>$row[0]</li>";
}
echo "</ul>";
?>

このスクリプトを Web ブラウザーで開くには、http://localhost/test_db.php にアクセスします。この URL にアクセスすると、図 12 に示すような日時スタンプとメッセージが連結されたリストが表示されます。

図 12. PHP を使用して DB2 から取得したデータ
PHP を使用して DB2 から取得した、日時とメッセージが連結されたデータのスクリーン・キャプチャー
PHP を使用して DB2 から取得した、日時とメッセージが連結されたデータのスクリーン・キャプチャー

このデータには見覚えがあるはずです。これは、連載第 1 回で作成した DB2 データベースから取得したデータです。これで、PHP が稼働していること、そしてデータベースからデータを抽出できることがわかったので、今度は PHP を利用した便利な機能を組み立てる作業に移ります。次のセクションでは、ユーザーがプロフィール・バッジを HTML コードと併せて生成できるようにするための PHP スクリプトを作成します。この HTML コードを Web サイトやブログに貼り付けるだけで、マイクロブログのアップデートをそのページに追加できるようにします。

HTML バッジの作成

前のセクションでは、PHP を使用して DB2 データベースからデータを取得できることを確認しました。図 12 を見てお気付きかもしれませんが、データは XML としてデータベースに保管されているものの、SELECT 文を使用してデータベースからすべてを取得したときに返されるのは XML ではありません。代わりに、「date_created」タグと「text」タグの値が連結された文字列が返されます。HTML バッジを適切なフォーマットにするためには当然、この 2 つのフィールドを個別に取得する必要があります。

そのためにはまず、SQL/XML を使用して pureXML データベース内のデータを個別の列に分ける DB2 ビューを作成し、PHP で簡単に構文解析できるようにします。お望みであれば、XQuery を使用することもできます。

DB2「Command Editor (コマンド・エディター)」アプリケーションを開いてください (「Start (スタート)」 > 「Programs (すべてのプログラム)」 > 「IBM DB2」 > 「DB2COPY1 (Default)」 > 「Command Line Tools (コマンド行ツール)」 > 「Command Editor (コマンド・エディター)」の順に選択)。「Target (ターゲット)」には必ず MBLOG データベースを選択し、その上で、リスト 3 に記載するコードをエディター領域に入力します。

リスト 3. アップデート・ビューを作成する
CREATE VIEW updates(date_created, text) AS
SELECT t.date_created, t.text FROM status_updates su,
XMLTABLE('$u/update' passing su.data as "u"
columns date_created varchar(100) path 'date_created',
text varchar(500) path 'text') as t;

エディター領域の左上にある緑色の「Play (実行)」ボタンをクリックして、入力した文を実行します。これにより、レスポンス領域に正常に実行されたことを通知するメッセージが表示されるはずです。作業を進める前に、ビューが適切に動作することをチェックしてください。それにはエディター領域の文を、「select date_created, text from updates;」という文に置き換えます。

この文を実行すると、図 13 のような結果が表示されます。

図 13. アップデート・ビューの実行結果
アップデート・ビューの実行結果のスクリーン・キャプチャー。日時データとメッセージ・データが分かれています。
アップデート・ビューの実行結果のスクリーン・キャプチャー。日時データとメッセージ・データが分かれています。

上記の SELECT 文は、「status_updates」表の「date_created」列と「text」列のそれぞれからデータを取得します。このような PHP の SELECT 文を使用することで、DB2 データの操作が非常に簡単になります。

ここからは、プロフィール・バッジ・ジェネレーターの作成に取り掛かります。最初に作成しなければならない PHP スクリプトは、バッジ・ジェネレーターのフォームです。このフォームでは、ユーザーはバッジに使用する色 (白、黄色、またはグレー) およびサイズ (ワイドまたはナロー) を選択するように求められます。ユーザーが「Generate」ボタンをクリックするとバッジの外観とともに、ユーザーが自分のブログまたは Web サイトに貼り付けるために使用できる HTML コードが表示されます。

最初に作成するこの generate.php ファイルは、C:\Program Files\Apache Software Foundation\Apache2.2\htdocs フォルダーに保存してください。リスト 4 に、このスクリプトの内容を記載します。

リスト 4. generate.php
<html>
<head>
<?php
if(isset($_GET['size']) && isset($_GET['color'])) {
    if($_GET['size'] == "wide") $size = 'width="400" height="150"';
    else $size = 'width="200" height="300"';
    ?>
    <title>Your Profile Badge is Ready!</title></head>
    <body><h1>Your Profile Badge is Ready!</h1>
    <iframe src="badge.php" frameborder="1" scrolling="auto" <?php echo 
$size; ?>
        marginheight="0" marginwidth="0"
        style="background-color: <?php echo $_GET['color']; ?>;">
        Older browser see this message as iframes aren't supported.
    </iframe><br /><br />
    Paste the following code into your blog or Website HTML code in order to add
    the Profile Badge to that page:<br />
    <textarea readonly="readonly" cols="40" rows="5">
<iframe src="//localhost/badge.php" frameborder="1" scrolling="auto"
<?php echo $size; ?>
    marginheight="0" marginwidth="0"
    style="background-color: <?php echo $_GET['color']; ?>;">
    Older browser see this message as iframes aren't supported.
    </iframe>
    </textarea>
    <?php
} else {
    ?>
    <title>Generate Profile Badge</title></head>
    <body><h1>Generate Profile Badge</h1>
    <form method="get" action="generate.php">
    <strong>Color:</strong><br />
    <input type="radio" name="color" value="white" /> White
    <input type="radio" name="color" value="yellow" /> Yellow
<input type="radio" name="color" value="silver" /> Grey
    <br /><br /><strong>Size:</strong><br />
    <input type="radio" name="size" value="wide" /> Wide
    <input type="radio" name="size" value="narrow" /> Narrow
    <br /><br /><input type="submit" value="Generate!" />
    </form>
    <?php
}
</body></html>
?>

フォームがまだ送信されていなければ、スクリプトがユーザーにフォームを表示し、プロフィール・バッジの色とサイズを選択するように求めます。フォームが送信済みであればプロフィール・バッジの IFRAME が表示され、その下に、この IFRAME を他のページに組み込むための HTML コードが表示されます。しかしこのスクリプトを試す前に、実際のバッジ自体を作成する必要があります。バッジを作成するには、badge.php というファイルを新規に作成してリスト 5 のコードを追加し、generate.php と同じフォルダーに保存します。

リスト 5. badge.php
<?php
$db = 'MBLOG';
$user = 'MBLOG';
$pass = 'password';
$host = 'localhost';
$port = 50000;

$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$db; " . 
    "HOSTNAME=$host;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$pass; ";

$conn = db2_connect($settings, '', '');

if(!$conn) {
    echo "Connection failed<br />";
    echo db2_conn_errormsg($conn);
}

?>
<style type="text/css">
.update { border-bottom: 1px solid black; padding: 5px; }
</style>

<?php
$sql = "SELECT text, date_created FROM updates order by date_created desc";
$result = db2_exec($conn, $sql);
if(!$result) echo db2_stmt_errormsg();
else {
echo '<div class="updates">';
while($row = db2_fetch_array($result)) {
        if(strlen($row[0]) > 0 && strlen($row[1]) > 0) {
echo '<div class="update">'
                .'<div class="update_text">'.$row[0].'</div>'
                .'<div class="update_date"><em>'.$row[1].'
</em></div>'
                .'</div>';
        }
}
echo "</div>";
}
?>

上記のスクリプトは DB2 データベースに接続し、このセクションで初めに作成した DB2 ビューから近況アップデートを取得します。そして「text」フィールドと「date_created」フィールドの両方にデータが含まれていることを確認してから、これらのフィールドのデータを表示します。このスクリプトは、他のページによって IFRAME タグ内に呼び出されてそのページ内に表示されるため、ブログや Web サイトに簡単にドロップすることができます。

Web ブラウザーを開いて、http://localhost/generate.php にナビゲートすると、図 14 のようなページが表示されます。

図 14. 「Generate Profile Badge」ページ
色およびサイズのラジオ・ボタンが表示された「Generate Profile Badge」ページのスクリーン・キャプチャー
色およびサイズのラジオ・ボタンが表示された「Generate Profile Badge」ページのスクリーン・キャプチャー

色とサイズを選択して「Generate!」ボタンをクリックすると、選択した項目に基づいてページが表示されます。図 15 は、その一例です。

図 15. プロフィール・バッジの結果ページ
プロフィール・バッジの結果を表示するページのスクリーン・キャプチャー。このページには、日時スタンプとメッセージのリストに加え、iframe 内にコードが表示されています。
プロフィール・バッジの結果を表示するページのスクリーン・キャプチャー。このページには、日時スタンプとメッセージのリストに加え、iframe 内にコードが表示されています。

もちろんこのプロフィール・バッジには、さまざまなスタイル設定や機能の改善を加えることができます。例えば会社のロゴやジェネレーター・ページへのリンクを追加したり、表示される日付形式を設定したり、あるいは表示されるアップデートの数をフィルタリングするなどです。

RSS フィードの公開

このセクションでは、PHP を使用して Microblog アプリケーションの RSS フィードを生成します。テキスト・エディターで新規ファイルを作成し、rss.php という名前で C:\Program Files\Apache Software Foundation\Apache2.2\htdocs フォルダーに保存します。リスト 6 に、この新規ファイルに追加する内容を記載します。

リスト 6. rss.php
<?php
header("Content-type: text/rss+xml");
header("Pragma: no-cache");

echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<rss version="2.0">';
echo '<channel>';
echo '  <title>Microblog RSS Feed</title>';
echo '  <description>An RSS Feed of Microblog Status'. 
'Updates</description>';
echo '  <link>http://localhost/rss.php</link>';
echo '  <language>en-us</language>';
echo '  <generator>DB2 Microblog</generator>';

$database = 'MBLOG';
$user = 'JOE LENNON';
$password = 'password';
$hostname = 'localhost';
$port = 50000;

$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
    "HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;" .
    "UID=$user;PWD=$password;";

$conn = db2_connect($settings, '', '');

$sql = "select text, date_created from updates order by date_created desc";
$result = db2_exec($conn, $sql);

while($row = db2_fetch_array($result)) {
    if(strlen($row[0]) > 0 && strlen($row[1]) > 0) {
        $pub_date = $row[1];
        $pub_date = str_replace('T', '-', $pub_date);
        $pub_date = str_replace(':', '-', $pub_date);
        $date_array = explode("-", $pub_date);
        $timestamp = mktime($date_array[3], $date_array[4], 
$date_array[5], $date_array[1], $date_array[2],
$date_array[0]);
        $rss_date = date(DATE_RSS, $timestamp);

        echo '<item>';
        echo '  <title>'.htmlentities($row[0]).'</title>';
        echo '  <description>'.htmlentities($row[0]).'</description>';
        echo '  <pubDate>'.$rss_date.'</pubDate>';
        echo '  <link>http://localhost/generator.php</link>';
        echo '</item>';
    }
}

echo '</channel>';
echo '</rss>';
?>

このスクリプトは、標準 RSS 2.0 フォーマットで XML 文書を生成し、DB2 データベースからエントリーを抽出します。フィードを表示するには、RSS 対応の Web ブラウザー、または RSS フィード・リーダー・アプリケーションを開いて URL http://localhost/rss.php にアクセスしてください。ここにアクセスすると、図 16 のような画面が表示されるはずです。

図 16. RSS フィードの動作
リンク項目のリストが表示された Microblog アプリケーションの RSS フィードのスクリーン・キャプチャー
リンク項目のリストが表示された Microblog アプリケーションの RSS フィードのスクリーン・キャプチャー

現時点で、この RSS フィード・ジェネレーターは、各エントリーをプロフィール・バッジ・ジェネレーターのページにリンクしています。当然のことながら、それぞれのアップデートを個々のページに表示する Web サイトの場合には、そのページへのリンクをフィードに提供することができます。また、ジェネレーターが実行されるたびにデータベースからデータを取得するようにすることも可能ですが、それよりも好ましいソリューションは、cron ジョブまたは周期タスクによって、事前に定義された間隔で PHP スクリプトを呼び出し、その PHP スクリプトによって生成された RSS フィードを rss.xml というファイルに保存することです。このようにすれば、リーダー/サブスクライバーには動的 rss.php スクリプトではなく、rss.xml ファイルを使用するように指示することができます。

Twitter との統合

最後に作成するスクリプトは、Twitter API を使用してマイクロブログのエントリーをデータベースから Twitter に送信できるようにするためのスクリプトです。このスクリプトでは、最初にユーザーに対し、データベース内のすべてのアップデートのリストを表示します。それぞれのアップデートの横には「Push to Twitter」というリンクを配し、このリンクをクリックすると、Twitter API が該当するエントリーを新しい Twitter アップデートとして追加するという仕組みにします。

まず、テキスト・エディターで新規ファイルを作成し、twitter.php という名前で C:\Program Files\Apache Software Foundation\Apache2.2\htdocs フォルダーに保存します。このファイルに追加するスクリプトの内容は、リスト 7 のとおりです。

リスト 7. twitter.php
<?php
if(isset($_GET['text'])) {
    $ch = curl_init("http://www.twitter.com/statuses/update.xml?status=".
urlencode(stripslashes(urldecode($_GET['text']))));
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
    curl_setopt($ch, CURLOPT_USERPWD, "joelennon:password");
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_POST, 1);
    $result = curl_exec($ch);
    $res_info = curl_getinfo($ch);
    curl_close($ch);

    if($res_info['http_code'] == '200') {
        echo '<h1>Yippee! Your update was posted to Twitter!</h1>';
    } else {
        echo '<h1>Whoops! Something seemed to go wrong when posting '.
'to Twitter...</h1>';
    }
} else {
    $database = 'MBLOG';
    $user = 'JOE LENNON';
    $password = 'password';
    $hostname = 'localhost';
    $port = 50000;

    $settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
        "HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;" .
        "UID=$user;PWD=$password;";

    $conn = db2_connect($settings, '', '');
    $sql = "select text, date_created from updates order by ".
"date_created";
    $result = db2_exec($conn, $sql);

    echo '<h1>Push to Twitter</h1>';
    echo '<ul>';
    while($row = db2_fetch_array($result)) {
        if(strlen($row[0]) > 0 && strlen($row[1]) > 0) {
            echo '<li><strong>'.htmlentities($row[0]).'</strong>'.
' (<a href="twitter.php?text='.htmlentities($row[0]).'">Push to '.
'Twitter</a>)<br /><em>Posted '.$row[1].'</em></li>';
        }
    }
    echo '</ul>';
}
?>

このスクリプトでは、最初にユーザーがページを開くと近況アップデートのリストを表示します。それぞれのアップデートに示された「Push to Twitter」というリンクをユーザーがクリックすると、スクリプトは PHP の curl 拡張機能 (この記事の最初のほうで、PHP を構成するときに有効にした機能) を使用し、Twitter API を使って該当するアップデートを Twitter に投稿します。CURL_USERPWD の値は、必ずお使いの Twitter アカウントに変更してください。Web ブラウザーで http://localhost/generate.php にアクセスすると、図 17 のようなページが表示されます。

図 17. Twitter へのアップデートの送信
アップデートを Twitter に送信できるページのスクリーン・キャプチャー
アップデートを Twitter に送信できるページのスクリーン・キャプチャー

Push to Twitter」リンクのいずれかをクリックしてみてください。アップデートが Twitter に投稿されるはずです。スクリプトが成功のレスポンス・メッセージを受け取ると、図 18 のようなメッセージが表示されます

図 18. Twitter への近況アップデートの投稿完了
Twitter への近況アップデートの投稿完了を示すスクリーン・キャプチャー
Twitter への近況アップデートの投稿完了を示すスクリーン・キャプチャー

残る作業は、Twitter ページを調べて、アップデートが新しく投稿されているかどうかを確認することだけです。私が http://twitter.com/joelennon で自分のページにアクセスしたところ、私のアップデートは全世界に公開されるべく誇らしげに掲載されていました (図 19)。

図 19. Twitter に表示されたアップデート
著者の Twitter ページに表示されたアップデートのスクリーン・キャプチャー
著者の Twitter ページに表示されたアップデートのスクリーン・キャプチャー

このスクリプトには多くの領域で改善の余地があります。まず第一に、このスクリプトにはアップデートが Twitter に送信済みであるかどうかを知る手段がありません。理想としては、ユーザーにアップデートが送信済みであるとわかるようにするか、あるいは送信済みのアップデートは表示しないように改善することができます。また他に考えられる便利な機能としては、連載第 2 回で作成した Flex アプリケーションを拡張して、アップデートを Twitter と Microblog アプリケーションの両方に同時に投稿するオプションをユーザーに提供するのも一考です。

まとめ

IBM DB2 pureXML と Flex を使用してマイクロブロギング・アプリケーションを作成する方法を紹介する連載の第 3 回目かつ最終回となるこの記事では、マイクロブログ・データを利用して有益なスクリプトを作成する方法を詳しく説明しました。今回の作業では、まず始めに Apache Web サーバーと PHP をインストールし、続いて IBM DB2 サポートを有効にする PHP 拡張機能をインストールしました。次に、ブログや Web ページにそのまま挿入できる簡潔な HTML コードを作成するプロフィール・バッジ・ジェネレーターを PHP で作成しました。そして RSS を使用してマイクロブログのアップデートを配信し、最後にアプリケーションを Twitter と統合するために、curl と Twitter API を使用して、ユーザーがマイクロブログの近況アップデートを Twitter に送信できるようにしました。

この連載をとおして、IBM DB2 Express-C、DB2 pureXML、SQL/XML、XQuery、pureXML Web サービス、IBM Data Studio、IBM WebSphere Application Server Community Edition、Adobe Flex、Apache、PHP、RSS フィード、そして Twitter API と、さまざまなトピックを取り上げてきました。これらの技術の知識は、これで十分に身に付いているはずです。これからはその知識を生かして、さらに高度なアプリケーションを作成してください。


ダウンロード可能なリソース


関連トピック

  • Flex マイクロブロギング・アプリケーションで pureXML を利用する: 第 1 回 DB2 pureXML を使って Web サービスを機能させる」(Joe Lennon 著、developerWorks、2009年10月): この 3 回連載の第 1 回を読んで、IBM DB2 Express-C と IBM Data Studio を使用してサンプル・マイクロブロギング・アプリケーション用のデータベースをセットアップしてください。
  • Flex マイクロブロギング・アプリケーションで pureXML を利用する: 第 2 回 Flex でアプリケーション・ユーザー・インターフェースを作成する」(Joe Lennon 著、developerWorks、2009年10月): 連載の第 2 回では、Flex と ActionScript を利用して、DB2 駆動の Web サービスに接続するユーザー・インターフェースを作成する方法を説明しています。
  • Use DB2 native XML with PHP」(Hardeep Singh、Amir Malik 共著、developerWorks、2005年10月): DB2 に組み込まれたネイティブ XML 機能を使用する上での有効性について学んでください。
  • Integrating Flex applications with IBM Mashup Center」(Ronald C. Leung 著、developerWorks、2009年6月): Adobe Flex アプリケーションを IBM Mashup Center 内で使用する方法を学んでください。
  • Getting Started with IBM DB2 Express-C: DB2 Express-C のホーム・ページにアクセスしてください。
  • DB2 9 pureXML ガイド: pureXML のデータ・ストア、ハイブリッド・データベース設計、および管理に関するこの IBM Redbook を読んでください。
  • DB2 9: pureXML: Overview and Fast Start」: この Redbook では、DB2 9 for Linux™, UNIX®, and Windows のハイブリッド XML データ・サービスについて紹介しています。
  • DB2 pureXML Cookbook: Master the Power of the IBM Hybrid Data Server』(Matthias Nicola、Pav Kumar-Chatterjee 共著): IBM を代表する 2 人のエキスパートがデータベースのプロに向けて、より良い XML ソリューションをより素早く構築するために必要な実際的ソリューション、そして実証されたサンプル・コードを紹介しています。
  • Overview of IBM DB2 pureXML」(Monash Research Publication、2008年10月): DBMS2 による IBM DB2 pureXML の概要を読んでください。
  • IBM Data Studio: 全体像」(Holly Hayes 著、developerWorks、2009年6月): この記事を読んで、統合データ管理の構想と現実を把握し、データ・アーキテクト、開発者、テスター、DBA、またはデータ管理者の誰もが今すぐ IBM ソリューションを使用することで、浮上しつつある可能性に素早く対応し、サービス品質の改善、リスクの軽減、そしてコストの削減を達成できるようになる仕組みを理解してください。
  • IBM XML 認定: XML や関連技術の IBM 認定技術者になる方法について調べてください。
  • developerWorks podcasts: ソフトウェア開発者向けの興味深いインタビューとディスカッションを聞いてください。
  • Apache HTTP Server ダウンロード・ページ: Apache HTTP (Web) サーバーのソース・コード実装を入手してください。現在入手できる最新バージョンは、2.2.13 です。
  • PHP バージョン別 Windows バイナリー: PHP バージョン別の最新 Windows バイナリーを入手してください。この記事で使用したのは PHP バージョン 5.2.11 です。PHP 5.3 は現時点で PECL (PHP Extension Community Library) 拡張機能をサポートしていないので、使用しないでください。
  • PHP 用 DB2 拡張機能: この拡張機能をダウンロードして、サンプル・アプリケーションを作成できるようにセットアップしてください。
  • Twitter API wiki: このリソースにアクセスしてください。資料、OAuth FAQ、サンプル、メーリング・リスト、ディスカッション・グループ、その他のコミュニティー・リソースが揃っています。
  • DB2 Express-C: 無料版の IBM DB2 データベース・サーバーを入手してください。中小企業にとって理想的なアプリケーション開発の基礎となります。
  • IBM 製品の評価版: DB2®、Lotus®、Rational®、Tivoli®、および WebSphere® のアプリケーション開発ツールとミドルウェア製品を体験するには、評価版をダウンロードするか、IBM SOA Sandbox のオンライン試用版を試してみてください。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Information Management, Open source, Web development
ArticleID=449889
ArticleTitle=Flex マイクロブロギング・アプリケーションで pureXML を利用する: 第 3 回 pureXML Web サービスを使用して、マイクロブログ・エントリーを HTML ページに公開する
publish-date=11032009