SimplePieのget_sourceがNULLで返ってくる場合の対応方法


はじめに

Laravel開発で、SimplePieパッケージを導入し、RSS情報を取得する処理を行っているときに、なぜかget_source()の結果が必ずNULLになる現象が発生。

feedデータを見てみたが、sourceタグは存在しているにもかかわらずNULLが返ってくる。

 

原因を調査

NULLが返ってくる原因は下記であった

SimplePieで対応している

<source>XXXXXXX</source>

NULLで返ってくる時のタグの状態

<source url="xxxxxxxxxxxxx">XXXXXXX</source>

sourceタグに url属性がついているとNULLが返ってくるみたいです。

 

対応策

今回は、SimplePieをそのまま利用したいので、無理やりですが下記の様にして情報を取得しました。

$sampleArr = array();
foreach($items as $item){
    $feed = $item->get_feed();
    $tmp=array();

    if ($feed){
        $tmp['date'] = $item->get_date('j M Y, g:i a');
        $tmp['content'] = $item->get_content();
        $tmp['title'] = $item->get_title();
        $tmp['link'] = $item->get_link();
        $tmp['description'] = $item->get_description();
        $tmp['source'] = $item->get_item_tags('','source')[0]["data"];

        array_push($RSS, $tmp);
    }
}

var_dump($sampleArr);

今回は、get_source()を利用する代わりに「get_item_tags」を利用してsourceタグの情報を取得する様にしています。

feedの結果は下記の形式で取得できますので、source配列の値を直接参照する形式にして居ます。

["source"]=>
        array(1) {
          [0]=>
          array(5) {
            ["data"]=>
            string(18) "XXXXXXXXX"
            ["attribs"]=>
            array(1) {
              [""]=>
              array(1) {
                ["url"]=>
                string(29) "http://xxxxx.co.jp"
              }
            }
            ["xml_base"]=>
            string(0) ""
            ["xml_base_explicit"]=>
            bool(false)
            ["xml_lang"]=>
            string(0) ""
          }
        }

 

さいごに

結構はまりましたが、これでsourceの情報を取得することができました。