はじめに
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の情報を取得することができました。