Flex マイクロブロギング・アプリケーションで pureXML を利用する: 第 3 回 pureXML Web サービスを使用して、マイクロブログ・エントリーを HTML ページに公開する

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

IBM DB2® の pureXML® 機能を使用すれば、XML をそのままの形式でデータベースに保管することができ、XML を変更する必要がありません。一方 Adobe® Flex® アプリケーションは、XML を直接読み取って Flex ユーザー・インターフェースに取り込むことが可能です。この 3 回の連載記事で作成するマイクロブロギング・アプリケーションでは、pureXML、Web サービス、そして Adobe Flex を利用できるだけでなく、さらにマイクロブロギングでの近況アップデートを Twitter に公開することもできます。連載の第 1 回では、Web サービスについて説明し、マイクロブログ・データベースを作成およびテストして、DB2 pureXML を使用した Web サービスを有効にする方法を説明しました。第 2 回では Adobe Flex と ActionScript® を利用してアプリケーションのユーザー・インターフェースを作成しました。連載の最終回となる今回の記事では、サンプル pureXML Web サービスを使用して、マイクロブログのエントリーを HTML ページに公開する方法を説明します。

Joe Lennon, Software developer, Freelance

Joe Lennon photoJoe Lennon は、アイルランド・コーク出身の 24 歳のソフトウェア開発者です。彼は Apress から出版予定の『Beginning CouchDB』の著者で、IBM developerWorks の技術記事やチュートリアルにも度々貢献しています。余暇は、サッカー、ガジェットの研究、そして Xbox 360 のゲームで楽しんでいます。



2009年 11月 03日

前提条件

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


はじめに

よく使われる頭字語

  • API: Application Program Interface
  • HTML: HyperText Markup Language
  • HTTP: HyperText Transfer Protocol
  • RSS: Really Simple Syndication
  • SDK: Software Development Kit
  • SQL: Structured Query Language
  • URL: Uniform Resource Locator
  • XML: Extensible Markup Language

この連載では、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 メール・アドレスを入力するフィールドが表示されています。

次の画面では、セットアップのタイプとして「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 のロゴの上に再生ボタンを重ねたものになっています (図 3 を参照)。

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

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

図 4. 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 用バイナリー・ダウンロード・ページのスクリーン・キャプチャー

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

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

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

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

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

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

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

図 9. システム変数の編集
値 ;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 が稼働中であることは確認できますが、DB2 拡張機能についてはどうでしょうか。ページの半分までスクロールダウンすると、ibm_db2 というタイトルのセクションがあります (図 11 を参照)。このセクションがあれば、DB2 拡張機能は正常にロードされたことになります。

図 11. 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 から取得した、日時とメッセージが連結されたデータのスクリーン・キャプチャー

このデータには見覚えがあるはずです。これは、連載第 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="http://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!」ボタンをクリックすると、選択した項目に基づいてページが表示されます。図 15 は、その一例です。

図 15. プロフィール・バッジの結果ページ
プロフィール・バッジの結果を表示するページのスクリーン・キャプチャー。このページには、日時スタンプとメッセージのリストに加え、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 フィードのスクリーン・キャプチャー

現時点で、この 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 に送信できるページのスクリーン・キャプチャー

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

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

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

図 19. 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 と、さまざまなトピックを取り上げてきました。これらの技術の知識は、これで十分に身に付いているはずです。これからはその知識を生かして、さらに高度なアプリケーションを作成してください。


ダウンロード

内容ファイル名サイズ
Article source codexmlflexpt3.source.zip5KB

参考文献

学ぶために

製品や技術を入手するために

  • 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 のオンライン試用版を試してみてください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


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