PSLブログ

ヨシナシゴトヲツヅリマス

phpでxmlなrssを読み込んでリスト表示(simplexml_load_file)

PHP5から、simplexml_load_fileという関数があり、xmlのパースを勝手にやってくれるという。

ググってみたら、

$xml = simplexml_load_file($rss);
foreach ($xml->item as $item) {
    // 繰り返し処理
}

というのが多かったのだが、動かない。var_dump()で$xmlの中を調べたらば、$xml->channelの中にSimpleXMLElement Objectがあって、その中にitemがあったので、

foreach ($xml->channel->item as $item) {
    // 繰り返し処理
}

としたらOKだった。

とりあえず書いたコードが以下。

function get_blog_rss($url) {

    $rss = simplexml_load_file($url);
    foreach ($rss->channel->item as $item) {
        $link = h($item->link);
        $title = h($item->title);
        $date = date("Y-m-d", strtotime($item->pubDate));
        $list .= <<<STR
<li>{$date} <a href="{$link}">{$title}</a></li>

STR;
        if (++ $cnt >= 3) break;
    }
    if (strlen($list)) {
        return '<ul>'."\n".$list."</ul>";
    } else {
        return '<p style="margin:5px 0">記事がないか読み込みができませんでした</p>';
    }
}

h()というのは、htmlspecialchars()のラッパー。関数名が長いので。

本来は件数上限やhtml部分はテンプレートを外部で持つべき。 しかし、Perlのような、クォートの一般形(qq||)があればとても楽なのにと思う。ドットでつないでいくのは可読性が低いしバグの元。