DOMDocumentで複数のRSSを読み込み日付順に並べ替えてみる

SimpleXMLElementより速い?二回目以降が前回のアクセスから12時間以内だったらキャッシュを読みこむので超速。頻繁に更新がある場合は向かないかも。
関係ないけどDOMDocumentはxmlの生成も出来るみたい。あと他のコードを見ているとこまめに変数にする方がイイっぽい。例えばcount($rssArray)*10としてるところも$limit = count($rssArray)*10;にしてコメントに「取得件数に40件を設定」とか書いてあげるとわかりやすい。

課題

  1. 複数のRSSから10件づつ読み込み日付順に並べる
  2. クラスで振り分け、背景を色付し各ブログが視覚でわかるようにする
  3. cacheを利用し二回目以降の表示を少しでも速くする。

Demo

  1. 2010/09/11hogenishi: @514design ありがとうございますー :-)
  2. 2010/09/11hogenishi: もうちょっとだ。頑張れ自分!
  3. 2010/09/11hogenishi: @w3gjp さんが是非にとのことです。@SB...
  4. 2010/09/10hogenishi: @shimael ほんまオモロイ人やw
  5. 2010/09/10hogenishi: @shimael もう目みて話すこと出来無い...
  6. 2010/09/10hogenishi: @_wonder 若いですってーw 僕も仕事に...
  7. 2010/09/10hogenishi: @w3gjp 絶対楽しいよねー :-)
  8. 2010/09/10hogenishi: @_wonder 僕にとってはすんごいですけどw
  9. 2010/09/10hogenishi: ドコダで開発合宿して欲しい。出来ない...
  10. 2010/09/10hogenishi: @shimael @5509 何か自分ら危なっかし...
  11. 2010/09/10"大切なのは何度倒されるかではない。何度起き上が...
  12. 2010/09/09奇跡的なタイミングが作り出すロマンチックな恋物...
  13. 2010/09/09FFFFOUND! | ★Baubauhaus.
  14. 2010/09/09Loves a Funny Thing on we heart it / visual boo...
  15. 2010/09/09"行き詰りは展開の一歩である。"
  16. 2010/09/09Loves a Funny Thing on we heart it / visual boo...
  17. 2010/09/09ojos de brujo† on we heart it / visual bookmark...
  18. 2010/09/08hhhh by ~lunariya on deviantART on we heart it ...
  19. 2010/09/08FFFFOUND! | M O O D
  20. 2010/09/08Tumblr on we heart it / visual bookmark #3784245
  21. 2010/08/26自転車のお披露目
  22. 2010/08/25いまさら夏休みのこと
  23. 2010/07/20Canvasで星空を描いてみた
  24. 2010/07/12W杯が終わった
  25. 2010/07/06日本のW杯が終わった
  26. 2010/06/16人の嫌がることを進んで出来るプラグイン jDTGnoKy...
  27. 2010/06/11タブが画像のjQueryプラグイン
  28. 2010/05/10W杯メンバーが発表されましたね
  29. 2010/05/04テキストからdl,ul,olリストやtableを生成
  30. 2010/04/03最近僕の周りでiPhonerが増えました
  31. 2010/03/24.coder Session1の報告
  32. 2010/03/13初jQueryプラグイン!HTMLのスライド mukiSlide.js
  33. 2010/02/22.coder(ドットコーダー)は出来てホヤホヤ勉強会
  34. 2010/02/21ランディ・パウシュの最後の授業
  35. 2010/01/30元気にしてますか?
  36. 2010/01/25XHTML&CSS超高速コーディング術を読んだ
  37. 2009/12/24Mr.Childrenのコンサートに行ってきたよ
  38. 2009/12/22WordPress2.9にアップグレードするためにMySQLを4...
  39. 2009/12/08jQueryでフィルタリングをしてみる
  40. 2009/11/22Happy birthday to me!!!
require('Cache/Lite/Output.php');

// キャッシュの保存場所とキャッシュの生存期間を指定
$options = array( 
    'cacheDir' => '/tmp/cache', 
    'lifeTime' => 3600 * 12
);

$cache = new Cache_Lite_Output($options);

// 指定id のキャッシュが存在するかどうか
if(!($cache->start($_SERVER['REQUEST_URI']))) {

    // startからendまでの出力内容をキャッシュする
    // RSSを複数読み込む
    $rssArray = array(
            'http://blog.yusukenakanishi.com/feed/index.php',
            'http://labs.yusukenakanishi.com/feed/index.php',
            'http://twitter.com/statuses/user_timeline/3836311.rss',
            'http://yusukenakanishi.tumblr.com/rss');
        // 各要素を配列に格納する
        $arrayLength = 0;
        for($i=0; $i<count($rssArray); $i++) {
            $dom = new DomDocument();
            $dom->load($rssArray[$i]);
            $xpath = new DomXPath($dom);
        
            for($j=0; $j<10; $j++) {
                $pubdate = $xpath->query('/rss/channel/item/pubDate');
                $title = $xpath->query('/rss/channel/item/title');
                $link = $xpath->query('/rss/channel/item/link');
                $allArray[$arrayLength]["judge"] = date("Y/m/d/H/i",strtotime($pubdate->item($j)->nodeValue));
                $allArray[$arrayLength]["day"] = date("Y/m/d",strtotime($pubdate->item($j)->nodeValue));
                $allArray[$arrayLength]["title"] = $title->item($j)->nodeValue;
                $allArray[$arrayLength]["link"] = $link->item($j)->nodeValue;
                $allArray[$arrayLength]["list"] = "list-0" . $i;
                $arrayLength++;
            }
        }
        // 配列を日付順に並べ替える
        foreach($allArray as $key => $row){
            $data[$key] = $row["judge"];
        }
        array_multisort($data, SORT_DESC, $allArray);
        // リスト表示
        echo "<ol id=\"rssList\">\n";
        for($k=0; $k<count($rssArray)*10; $k++) {
            echo "<li class=\"" . $allArray[$k]["list"] . "\">";
            echo $allArray[$k]["day"];
            echo "<a href=\"";
            echo $allArray[$k]["link"];
            echo "\">";
            echo mb_strimwidth(strip_tags($allArray[$k]["title"]), 0, 50, "...", "UTF-8");
            echo "</a></li>\n";
        }
        echo "</ol>\n";
    
    $cache->end(); 
}