MagpieRSSパーサー備忘録

 IshiiWebのトップページIshiiWeBlogの更新履歴を表示させたいと思い、色々調べた結果MagpieRSSが手軽で便利であると分かった。
 MagpieRSSはPHPで使えるRSSパーサーである。
(マルチバイト文字も扱えるので日本語も通ります。)
今回参考にさせていただいたサイト
http://www.hyuki.com/yukiwiki/wiki.cgi?MagpieRSS
http://www.lucky-bag.com/archives/2005/05/hot_entry.html

以下の方法は私の環境下でのものです、実行する場合には全て自己責任でお願いします。

① PHPをインストールする。

1.まずはサーバーでPHPが使えるようにルート権限でコマンドを実行する。

# yum install php php-mbstring

2.以下のコマンドでApacheを再起動する。

# /etc/init.d/httpd restart

3.テスト用のPHPスクリプト(/var/www/html/test.php)を記述する。

<?php
 phpinfo();
?>

4.http://サーバー名/test.phpにアクセスしてPHP情報が出ればインストール成功。

 ・PHPの設定は/etc/php.iniで行える。

② MagpieRSSを設置する。

1.以下にアクセスしDOWNLOADからMagpieRSSの最新版(現時点で0.72)を入手。

http://magpierss.sourceforge.net/

2.ダウンロードしたらファイルを解凍する。


3.RSSをパースさせたいページと同じディレクトリに以下をアップロード。

  • rss_cache.inc
  • rss_fetch.inc
  • rss_parse.inc
  • rss_utils.inc
  • extlib

4.さらにcacheというディレクトリを同じ階層に作成。(パーミッションを777にする)


③ 基本となるPHPスクリプトの記述。

<?php
 require_once 'rss_fetch.inc';
 define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
 $url = 'パースしたいRSSのURL';
 $rss = fetch_rss($url);
 $title = $rss->channel['title'];
 $title = mb_convert_encoding($title, "UTF-8", "auto");
 echo "$title\n";
 echo "<ul>\n";
 foreach($rss->items as $item){
   $title = $item[title];
   $title = mb_convert_encoding($title,"UTF-8","auto");
   $url = $item[link];
   echo "<li><a href=\"$url\">$title</a></li>\n";
 }
 echo "</ul>\n";
?>
 私の場合はひとまずこれで出来ました。
見栄えはまだまだだし、日付も取得してみたいので時間がある時にでもコードやCSSでいじってみようと思います。
(以上は自己責任において行ってください)
------------ここまでがMagpieRSSパーサー備忘録の内容------------

④ 日付・新着・装飾

 宣言したとおり日付(曜日も)を取得してみる、ついでに二日前の更新分までNEWを表示させる。
具体的に加えたのは、赤字の部分で日付(曜日)青字の部分で新着のNEWを表示させている。

<?php
 require_once 'rss_fetch.inc';//ファイルの位置によって書き換え
 define('MAGPIE_OUTPUT_ENCODING','UTF-8');
 $url = 'パースしたいRSSのURL';
 $rss = fetch_rss($url);
 $title = $rss->channel['title'];
 $title = mb_convert_encoding($title,"UTF-8","auto");
 echo "$title\n";
 echo "<ul>\n";
 foreach($rss->items as $item){
   $title = $item[title];
   $title = mb_convert_encoding($title,"UTF-8","auto");
   $url = $item[link];
   $youbi = array(0=>'(日)',1=>'(月)',2=>'(火)',3=>'(水)',4=>'(木)',5=>'(金)',6=>'(土)');
   $mday = date('w',$item['date_timestamp']);
   $date_str = date("n/d", $item['date_timestamp']);
   if($date >= time() - 3600 * 24 * 7){
      $date_str = "<EM>" . $date_str . "</EM>";
   }
   $days = 2;
   $rssdate = strtotime("$date_str");
   $today = strtotime(date("Y/m/d H:i"));
   $diff = date("U", ($today - $rssdate))/86400;
   if($days > $diff){
      echo "<BLINK>NEW</BLINK>";
   }
   echo "<li>$date_str$youbi[$mday]<a href=\"$url\">$title</a></li>\n";
 }
 echo "</ul>\n";
?>

⑤ プレーンの実行結果

IshiiWeBlog

 ここからはHTMLやCSS、PHPをいじって整えてください。
私は<BLINK>でNEWを点滅させたり、CSSで見栄えを整えたりしました。
★ MagpieのRSS取得が遅いと感じる場合
 rss_cache.incの21行目でRSSをキャッシュする時間の間隔を変更します。
デフォルトでは「var $MAX_AGE = 3600;」となっている。(1時間=3600秒)

装飾後の実行結果

(以上は全て自己責任において行ってください)
2007/9/27