|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
PHP-usersネタです。今まで、SAX関数やDOM関数、PEAR::XML_RSSを使ってそれぞれRSSを取得・表示してみましたが、今回はmRssライブラリを使ったモジュールがあるということで試してみました。
上鍵さんの投稿にもあるとおり、mRss自体はCのライブラリとして提供されていますが、PHP拡張モジュールに変換するスクリプトも含まれています。また、RSS2.0にも対応していることが特徴的です (0.91, 0.92, 1.0, 2.0に対応)。
まずはインストールした環境ですが、CentOS 4.2のrpmで提供されているPHP 4.3.9です(最近ますます無精になってる。。。)。
上記のドキュメントにもありますが、mRssをインストールするには
が必要になります。今回は、libnxmlはソース、libcurlはCentOSに用意されていたrpmを使用しました。それぞれのインストール手順は以下の通りです。なお、使用したlibnxml、libmrssのバージョンは2006/02/17現在最新のバージョン0.8です。
●libnxmlのインストール# wget http://www2.autistici.org/bakunin/libnxml/libnxml-0.8.tar.gz
# tar zxf libnxml-0.8.tar.gz -C /usr/local/src/
# cd /usr/local/src/libnxml-0.8/
# ./configure --prefix=/usr
# make
# make install
#
configureオプションに「--prefix=/usr」を指定していますが、指定しない場合、mRssのインストールの際にごそごそしなければならなくなりますので、付けた方が無難です。
●libcurlのインストール# up2date -i curl curl-devel
#
続いて、libmrssをインストールします。こちらもlibnxmlのインストール手順とほとんど変わりません。
●libnxmlのインストール# wget http://www2.autistici.org/bakunin/libmrss/libmrss-0.8.tar.gz
# tar zxf libmrss-0.8.tar.gz -C /usr/local/src/
# cd /usr/local/src/libmrss-0.8/
# ./configure
# make
# make install
#
libmrssをインストールした後、PHP拡張モジュールを作成します。ソースのTOPディレクトリ下に「phpmrss」ディレクトリがあり、拡張モジュール作成のためのスクリプトが用意されていますのでこれを使用します。なお、下の実行結果で「warning: underquoted definition」が頻発していますが、これについてはphpizeで「warning: underquoted definition」が多発する場合の対処法を参照してください。今回は放置プレーしてます(^^;
●libnxmlのインストール# cd phpmrss/
# ./phpmrss_install.sh
Creating a work directory... done.
Checking data with phpize... configure.in:9: warning:
underquoted definition of PHP_WITH_PHP_CONFIG
run info '(automake)Extending aclocal'
or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
configure.in:32: warning: underquoted definition of PHP_EXT_BUILDDIR
configure.in:33: warning: underquoted definition of PHP_EXT_DIR
configure.in:34: warning: underquoted definition of PHP_EXT_SRCDIR
configure.in:35: warning: underquoted definition of PHP_ALWAYS_SHARED
acinclude.m4:19: warning: underquoted definition of PHP_PROG_RE2C
done.
Configuring... done.
Compiling... done.
Installing... done.
Removing work directory... done.
#
スクリプト実行後、所定のディレクトリに拡張モジュールがインストールされていることを確認してください。
●libnxmlのインストール# ll /usr/lib/php4/
total 1552
-rwxr-xr-x 1 root root 1506684 Nov 11 11:42 mbstring.so
-rwxr-xr-x 1 root root 30752 Feb 15 17:06 mrss.so
-rwxr-xr-x 1 root root 41076 Nov 11 11:42 mysql.so
#
インストールが終わったら、拡張モジュールをロードするようphp.iniに追記します。
●php.iniの編集 :
extension=mrss.so
:
最後にApacheを再起動し、phpinfoの画面で正しくロードされている事を確認します。
mRss拡張モジュールを導入することで以下の関数が使用可能になります。取得・パースだけではなく、出力関数も用意されています。
- mrss_error
- mrss_free
- mrss_get
- mrss_get_last_modified
- mrss_get_timeout
- mrss_parse_buffer
- mrss_parse_file
- mrss_parse_url
- mrss_set_timeout
- mrss_strerror
- mrss_write_buffer
- mrss_write_file
phpmrssディレクトリやPHP-usersのアーカイブにもありますが、mrss_parse_*でパースを行いmrss_getでデータを取得というパターンになります。ただし、マルチバイト文字を含むRSSの場合、エンコーディング変換が必要になる場合があります。
●mrss.php
<?php
define('INPUT_ENCODING', 'utf-8');
?>
<?php
function convert($str) {
return htmlspecialchars(
(strtolower(INPUT_ENCODING) == mb_internal_encoding())
? $str
: mb_convert_encoding(
$str,
mb_internal_encoding(),
INPUT_ENCODING));
}
?>
<?php
$handle = mrss_parse_url("http://mixfeed.jp/1601");
if (mrss_error($handle) != MRSS_OK) {
die(mrss_strerror($handle));
}
$feed = mrss_get($handle);
echo '<h1>' . convert($feed['title']) . '</h1>';
echo convert($feed['description']) . '<br>';
echo '<hr>';
foreach ($feed['item'] as $index => $item) {
echo '<li><a href="' . $item['link'] . '">'
. convert($item['title'])
. '</a></li>';
}
?>
ざっと試してみましたが。。。
mrss_write_buffer関数についてはSegmentation Faultとなってしまいどうにもなりませんでした。ちなみに、引数としてmrss_parse_*関数から返される値(int型)を渡すようです。
また、mrss_write_fileについては第1引数にリソース型の変数を渡すようですが、何を渡すのか不明です。第2引数にはファイル名を渡すようです。
情報をお持ちの方、是非フィードバックをお願いします。
今流行の「Web2.0」の要素としてRSSはかなり盛り上がっています。そういった意味でもこの手のライブラリが色々とでてきそうです。
今回RSSの作成まではできませんでしたが、頻繁に更新されているようなので今後に期待です。
|