シンプル&パワフルなPHPライブラリ rhacoを使ってみよう!

第2回ライブラリとして使うrhaco

第1回では、rhacoの概要について簡単に解説しました。今回は、rhacoの機能の一部のみを利用する場合について解説します。⁠ほかのフレームワークで開発しているアプリケーションの一部機能のみをrhacoを利用して記述する」といったことも簡単にできます[1]⁠。

ダウンロードする

rhacoをインストールする際には、PEARコマンドなどを使用する必要はなく、各自好きなところにダウンロードして展開するだけです。rhaco自体をドキュメントルート以下に設置する必要はありませんが、Apacheの権限で読み出しができる場所へ展開してください。 最新安定版のアーカイブはGoogle Code上で配布しています。

ファイル名のバージョン番号は、パッケージ作成時のSubversionリビジョン番号となっています。不思議に思われるかもしれませんが、細かなバージョニングでのリリースを行わず、リビジョンをベースにある程度の修正ごとにアーカイブが作成されています。現在はrhaco1.6を随時更新しています。

また、常に修正が行われているので、開発版をSubversionリポジトリからチェックアウトして利用することもできます。

svn checkout http://rhaco.googlecode.com/svn/rhaco_1_x/trunk/ rhaco

以下では、rhacoを展開するファイルパスを「/path/to/rhacoと表記し、⁠/path/to/wwwが http://localhost/ でアクセスできることとして解説を進めて行きます。それぞれのパスは、各自の環境にあわせて読み替えてください[2]⁠。

フィードパーサーを使う

ライブラリの読み込み

rhacoには、XMLやHTMLを簡単に解析できるライブラリが付属しており、これを使うとPHP4/5で動作するRSSリーダーが簡単に作成できます。

まずはPHPファイル /path/to/www/feed.php を作成し、その中に次のように記述してください。

<?php
require '/path/to/rhaco/Rhaco.php';
Rhaco::import('tag.feed.FeedParser');

ここでは、まず始めにrhacoの基となるRhaco.phpをインクルードし、rhaco内のライブラリFeedParserをインクルードしています。

Rhaco::import()はrhacoで使用するライブラリを読み込む関数です。Rhaco::import()を使うことで、パスを気にすることなくrhaco内のライブラリを読み込むことができ、気にしなければならないのはRhaco.phpのパスのみとすることができます。

Rhaco::import()には、ディレクトリ構造を「.」⁠ドット)で連結した文字列を渡します。この場合、⁠tag.feed.FeedParser」の実体は「/path/to/rhaco/tag/feed/FeedParser.php」に存在します。

RSSを読み込む

それでは早速、フィードパーサーで実際のRSSを読み込んでみましょう。feed.phpを次のように書き換えてください。

<?php
require '/path/to/rhaco/Rhaco.php';
Rhaco::import('tag.feed.FeedParser');
Rhaco::import('util.Logger');

$items = FeedParser::getItem('http://gihyo.jp/feed/rss1');
Logger::d($items);

FeedParser::getItemによって、$itemsには対象のフィードを解析してRssItem20オブジェクトに変換されたものの配列が入ります。Logger::dは、var_dumpとほぼ同じです。このファイルを実行すると、ダンプした結果が出力され、$itemsにフィードのデータが入っていることが確認できます。

HTML出力をする

RSSを読み込むことはこれでできました。折角なので、HTMLに出力してみましょう。 rhacoのテンプレートエンジンも、単体で利用することができるので、これを使ってみましょう。

<?php
require '/path/to/rhaco/Rhaco.php';
Rhaco::import('tag.feed.FeedParser');
Rhaco::import('tag.HtmlParser');

$items = FeedParser::getItem('http://gihyo.jp/feed/rss1');
$parser = new HtmlParser(dirname(__FILE__). '/feed.html');
$parser->setVariable('items', $items);
$parser->write();

コードを上のように書き換えたら、テンプレートを記述します。/path/to/www/feed.html を作成してください。

テンプレートの詳細な記法については、次回以降に実践アプリ作成で解説して行きます。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>feed parser</title>
</head>
<body>
<h1>Feed Parser</h1>
<ul rt:param="items" rt:var="item">
    <li><a href="{$item.link}" target="_blank">{$item.title}</a></li>
</ul>
</body>
</html>

http://localhost/feed.php をブラウザで確認してみましょう。このような画面が表示されます。

画像

複数フィードをまとめる

これまで、FeedParser::getItemではひとつのRSSフィードのみを扱ってきましたが、FeedParser::getItemは複数のRSSフィードをまとめて読み込むことができます。また、FeedのAuto Discovery[3]にも対応しています。

ここでは、複数フィードを取得してマージし、ひとつのRSS2.0フィードとして出力する例を紹介します。

feed_merge.phpというファイルを作成し、次のようなコードを記述してください。

<?php
require '/path/to/rhaco/Rhaco.php';
// ライブラリのインポート
Rhaco::import('tag.feed.FeedParser');
Rhaco::import('tag.feed.Rss20');

// $feeds は、配列を用いても構いません
$feeds = <<< FEEDS
http://gihyo.jp/feed/rss1
http://rhaco-users.jp/
FEEDS;
// フィードの取得
$items = FeedParser::getItem($feeds);

$new_feed = new Rss20();
$new_feed->setChannel(
    'Mixed Feed', // rssのtitle
    '複数フィードをマージするサンプル', // rssのdescription
);
foreach($items as $item){
    $new_feed->setItem($item);
}
$new_feed->output();

FirefoxやSafariなど、RSSが読み込めるアプリケーションで http://localhost/feed_merge.php を開くと、RSSとして出力されていることがわかります。

画像

まとめ

rhacoをライブラリとして使用する方法、特にフィード処理をメインに解説をしました。その他の機能についてもそれぞれ単独で利用することができます。次回以降の記事で、気になる機能のみを使いたくなった場合、今回の記事を参考にすると導入しやすいかもしれません。

今回紹介したライブラリのほかにも、rhacoにはたくさんのライブラリがあります。また、今回紹介したライブラリについても一部の機能しか紹介していません。rhacoのライブラリのAPI Referenceはウェブで見ることができます。これを参考にして、ライブラリとして使うrhacoに是非チャレンジしてみてください。

おすすめ記事

記事・ニュース一覧