SimpleXMLで複数atom.xmlを読み込んで時系列に表示する
2011年10月09日- PHP
atom.xmlを読み込んで表示するだけのものが作りたかったのでSimpleXMLを使いました。
それをちょっと発展させて複数のファイルを読み込んで時系列に表示させるようしてみた。
複数atom.xmlを読み込んで時系列に表示
entry as $entry) {
if($i++ === $max) { break; } //表示する件数
$_link = $entry->link['href']; //リンク先
$_title = $entry->title; //タイトル
$_date = date('Y年m月d日', strtotime($entry->published)); //日付
$_content =$entry->content; //本文
$_content = strip_tags($_content); //本文のhtmlタグを削除
$_content = mb_strimwidth($_content, 0, 200, "...",utf8); //本文を200文字でトリミング
$key = date('YmdHis', strtotime($entry->published)); //配列のキー
//配列に値を入れる
$entryArr[$key] = '<article>'."\n" . '<h2><a href="' . $_link . '" target="_blank">' . $_title . '</a></h2>'."\n" . '<p class="date">' . $_date . '</p>'."\n" . '<p>' . $_content . '</p>'."\n" . '</article>'."\n\n";
}
}
//キーで降順にソート
krsort($entryArr);
//出力
foreach ($entryArr as $key => $val) {
echo $val;
}
?>
サンプルとしてatom.xmlを3つ読み込んでいるけれど、それだけでちょっと重い。
なのでキャッシュを使ったほうが良い。
僕は以下のものを使わせて頂きました。
コードはそのままなので割愛。キャッシュ時間はサンプルということで1時間にしてあります。
「複数atom.xmlを読み込んで時系列に表示(キャッシュ版)」サンプル
atom以外のフォーマットに対応しないと使いづらい
RSSにはRSS1.0、RSS2.0などのフォーマットがあって、今回の物はatom形式のみに対応しています。
RSSリーダー的に使いたいと思ったら、やっぱり他の形式にも対応しないと使い物にならない。
実際に、サンプルで読み込ませるatom.xmlを3つ探すのに少し手間がかかった。(あまりに見つからなくて自分のブログを使ってるし)
読み込んだファイルの形式が何のフォーマットなのか判定して処理を分ければいけそうな感じではある。