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||)があればとても楽なのにと思う。ドットでつないでいくのは可読性が低いしバグの元。