最近、CNETの読者ブログを書くようになったので、その更新状況をこのブログのサイドバーに表示したくRSSリーダを設置した。
どこかのガジェット系のRSSリーダは若干痛いかなと思い、フリーのコードを探す。意外と沢山あった。
一番良さそうなのはPHPで書かれたMagpieRSSというもの。
PHPならコード量も殆どない(実際簡単なRSSリーダなんかは数行で作れる)ので余裕かと思ったらカスタマイズするのにかなり苦労する。
デフォルトだとRSSで吐き出された情報をがーーっと表示させるだけなんだけど、①件数を任意で設定する②RSSの更新日の表示をしようと思った。
併せて、テキストだけでの吐き出しでは微妙なのでスタイルシートによる文字の整形だとか色々手を加える。
意外とRSSだけでもPHPの加工難しいんだね。。。
?php require_once 'rss_fetch.inc'; require_once 'code_table.ucs2jis'; require_once 'jcode.php'; $url = 'http://i-njoy.net/blog/?mode=rss'; $rss = fetch_rss($url); $title = $rss->channel['title']; //JcodeConvert($str, $from, $to) //0:PASS(無変換)1:EUC-JP 2:Shift_JIS 3:ISO-2022-JP(JIS) 4:UTF-8 $title = JcodeConvert($title, 4, 2); foreach ($rss->items as $item ) { $title = $item[title]; $title = JcodeConvert($title, 4, 2); $url = $item[link]; echo "<li><a href=\"$url\">$title</a></li>\n"; } ?>
↑デフォルトのソース。
ここに色々調べると結構設定があるような気がする。
そこに、
$rss->items = array_slice($rss->items, 0, 3);
↑このように表示件数を指定。
include_once 'rss_utils.inc'; $date = parse_w3cdtf($item['dc']['date']); $date_out = strftime("%y-%m-%d", $date);echo "
$title$date_out ";
↑更新の日付はこのように記述。
実際、なぜかparse_w3cdtfでエラーが出たりしたけど。。
どうやら、rss_utils.incをincludeしないとだめらしい。
多くのサイトではうまくいかない場合は $item['date_timestamp']);でやれと書いてあったけど結局そっちの方がわからず自力で解決。
ただ、あとでわかったことだけど$item['dc']['date']にするとrdfしか読めないらしい。(XMLは日付を吐き出していない為)
よくわからんなー。
結局PHPで作ったもののブログにはPHPはそのままソースコピーして貼るわけにはいかないので、iframeで呼び出して表示させるようにした。
うーむ、意外と手間取ったな。こんなことを夜な夜なやっている僕…。
もっとPHPくらいサクっと自分で思ったものを作れるような感じだと便利そうなのになーと思ったり。もっとキチンと体系的に勉強しときゃよかった。
まあ肝心の僕のCNETの記事更新用のRSSはできたのだけど、どうもうまくページにマッチしない。。
これこそキチンと休みの日に時間作って整えよう。もうちょっとポップな方がいい。