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; }
これで全部配列に変換できました。
あとは自由に正規表現を書くなりして要素を取得してください。