[PHP]PEARパッケージXML_RSSとHTTP_Requestを使ったWebRSSリーダー | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

PHPを使って、Web RSSリーダーを作ろうと思ったら、PEARパッケージのXML_RSS を利用するととても簡単に構築できます。

ただ、社内環境でWeb RSSリーダーを作ろうとした場合、プロキシ経由でアクセスする必要がありますね。

その場合、XML_RSSだけだとインターネット上のRSSフィードを取得する事ができません。


今回は、そのプロキシを経由してインターネット上にあるRSSフィードを取得し、ブラウザ上に表示するRSSリーダーのサンプルを紹介します。


まず、最初にPEARパッケージである、XML_RSSとHTTP_Requestを使用しますので、その2つをインストールしておきます。

インストール方法は、pearコマンドを利用すれば簡単に行えます。

pearコマンドは、PHPインストール時に「--without-pear」オプションを付けてなければ利用可能だと思います。


今回の環境ではインターネットアクセス時にプロキシを経由する事を想定していますので、PEARのパッケージを取得する際にプロキシを経由するように設定しておきます。


$ pear config-set http_proxy プロキシのアドレス:ポート番号

でセットします。

あとは、


$ pear install XML_RSS

で、インストールできます。

関連するパッケージ(XML_Treeとか)が必要になる場合もありますので、エラーになった場合はそれらのパッケージを先にインストールしておきます。


XML_RSSとHTTP_Requestパッケージがインストールできたら、あとは下記のようなプログラムでインターネット上のRSSフィードを取得できます。


<?php
require_once "XML/RSS.php";
require_once "HTTP/Request.php";

// HTTP_Requestを通して、RSSフィードを取得
$req = &new HTTP_Request('http://ameblo.jp/itboy/rss.html');

// インターネットに出る際に通るプロキシ
$req->setProxy('hoge-proxy.hogehoge.com');

// リクエストを送信
$req->sendRequest();

// 取得したRSSフィードの内容をファイルに書き出しておく
$tmp_file = uniqid("rss_") . ".xml";
$fp = fopen($tmp_file, "w");

// ファイルに書き出す際は、文字コードをカレントの内部文字エンコーディングに変換
if (fwrite($fp, mb_convert_encoding($req->getResponseBody(), mb_internal_encoding(), 'auto')) === FALSE) {
    echo "Cannot write to file ($tmp_file)";
    exit;
}

fclose($fp);

echo "
<html>
<title>Web RSSリーダー</title>
<head>
<meta http-equiv='Content-Type' content='text/html;charset=euc-jp'>
</head>
<body>
";

// XML_RSSを使って、取得したRSSフィードを解析
$rss =& new XML_RSS($tmp_file);
$rss->parse();
echo "<h1>Headlines from <a href=\"http://ameblo.jp/itboy/\"> A Day In The Boy's Life</a></h1>\n";
echo "<ul>\n";
foreach ($rss->getItems() as $item) {
echo "<li><a href=\"" . $item['link'] . "\" target=\"_blank\">" . $item['title'] . "</a></li>\n";
}

echo "</ul>\n";
echo "</body></html>";
?>


初めに、HTTP_Requestパッケージを利用して、本BlogのRSSフィードを取得します。

その際に、setProlxy()関数でセットしたプロキシを経由するようにしています。


次に、取得したRSSフィードの内容を一旦ローカル(/tmp)に保存しています。

XML_RSSでは、オブジェクト生成時に一つの引数を渡せますが、この引数にはRSSフィードのURLか、フィードの内容を保存したファイルのパスかどちらかを渡せます。


プロキシを経由する必要の無い環境であれば、XML_RSSのオブジェクト生成時に、直接RSSフィードのURLを渡してあげればよいです。

今回の環境の場合は、プロキシを経由する必要があり、XML_RSSにはプロキシを経由してRSSフィードにアクセスする手段が用意されていないので、一旦HTTP_RequestパッケージでRSSフィードの内容を取得し、XML_RSSによってその内容を解析させています。


今回の出力例)


WEB-RSS


とても簡単にRSSリーダーが構築できますね・・・。

もちろん、複数のRSSフィードを一覧表示するために、特定のフィード情報をサーバー側に保持させておく機能などが必要になるかと思いますが、それもDBなりファイルなりに保存しておくだけで実装できます。


※ ここまで書いてやっと気がつきましたが、社内のシステムのRSSフィードを参照する場合は、プロキシを経由する

  必要が無い場合もありますので、その辺を考慮しなければいけませんね・・・。

  IEのインターネットオプションにある、プロキシを除外するようなイメージでしょうか。


RSSリーダーは、沢山ありますがブラウザ上で確認できた方が、その親和性から使い勝手は良いと思いますので用途によっては使えるのではないでしょうか。