ウェブプログラミングおじさん

PHPとRubyと時々CSSやJSなどなど

PHP(CakePHP)でRSSをパースしてみる

今回は前の投稿でも言ってましたが、RSSのパースについての記事を書いていきたいと思います。

RSSのフェッチとオブジェクト化

<?php
$url = 'http://example.com/feed';
$xml = @file_get_contents($url);
if($xml === false){
  //not found
}

$xml = preg_replace('/content:encoded/', 'content_encoded', $xml);
$data = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);

ここで一つ注意しないといけないのが、コロン:の入った名前の付いた要素はsimplexml_load_string()では取得できないので、あらかじめパースする前に名前自体を置換してしまします。

オブジェクトの配列化

ここで取得できた$dataは配列ではなくて、オブジェクトになっているのでアロー演算子でしかアクセスできません。これは、CakePHPをいつも使っている身としては少し扱いずらいので、配列に変換してしまいます。

<?php
function convertXml2Array($xmlObject, $out = []){
  foreach ((array) $xmlObject as $index => $node){
    $out[$index] = (is_object($node) || is_array($node)) ? convertXml2Array($node) : $node;
  }
  return $out;
}

これで全部配列に変換できました。
あとは自由に正規表現を書くなりして要素を取得してください。