2011年10月09日 Category:PHP

SimpleXMLで複数atom.xmlを読み込んで時系列に表示する

atom.xmlを読み込んで表示するだけのものが作りたかったのでSimpleXMLを使いました。
それをちょっと発展させて複数のファイルを読み込んで時系列に表示させるようしてみた。

複数atom.xmlを読み込んで時系列に表示

<?php
//読み込むatom.xml
$atom_url = array(
  'http://feed.rssad.jp/rss/gigazine/rss_atom',
  'http://sfool.net/feed/atom/',
  'http://www.goodpic.com/mt/atom.xml'
);
$i = 0;
$max = 30;
foreach ($atom_url as $url) {
  $atom = simplexml_load_file("$url"); 
  foreach ($atom->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を読み込んで時系列に表示」サンプル

サンプルとしてatom.xmlを3つ読み込んでいるけれど、それだけでちょっと重い。
なのでキャッシュを使ったほうが良い。
僕は以下のものを使わせて頂きました。

PHP 特別なライブラリなしで簡単に使える簡易キャッシュ

コードはそのままなので割愛。キャッシュ時間はサンプルということで1時間にしてあります。

「複数atom.xmlを読み込んで時系列に表示(キャッシュ版)」サンプル

atom以外のフォーマットに対応しないと使いづらい

RSSにはRSS1.0、RSS2.0などのフォーマットがあって、今回の物はatom形式のみに対応しています。
RSSリーダー的に使いたいと思ったら、やっぱり他の形式にも対応しないと使い物にならない。
実際に、サンプルで読み込ませるatom.xmlを3つ探すのに少し手間がかかった。(あまりに見つからなくて自分のブログを使ってるし)

読み込んだファイルの形式が何のフォーマットなのか判定して処理を分ければいけそうな感じではある。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

トラックバックURL

Page Top