Zend_Feed_Reader を使用して RSS フィードを解析する際に、特に RSS 名前空間が使用されている場合に問題が発生しています。
解析しようとしているフィードは、BBC ニュース フィード (http://feeds.bbci.co.uk/news/rss.xml) で、次のものが含まれています。
<item>
<media:thumbnail width="66" height="49" url="http://news.bbcimg.co.uk/media/images/55800000/jpg/_55800088_013076641-1.jpg"/>
<media:thumbnail width="144" height="81" url="http://news.bbcimg.co.uk/media/images/55807000/jpg/_55807247_013074606-1.jpg"/>
</item>
他のアイテムを解析するために使用しているコードは<item>
次のとおりです。
$feed = Zend_Feed_Reader::import('http://feeds.bbci.co.uk/news/rss.xml');
foreach($feed as $item)
{
echo $item->getTitle();
echo $item->getDescription();
// etc
}
ただし、、、またはの使用$item->getMedia()
は機能$item->getMedia('thumbnail')
しません。$item->{'media:thumbnail'}
$item->{'media:thumbnail'}()
また、独自の拡張機能を作成してみました (これをガイドとして使用):
class Zend_Feed_Reader_Extension_Media_Entry extends Zend_Feed_Reader_Extension_EntryAbstract
{
public function getThumbnail()
{
if(isset($this->_data['thumbnail']))
return $this->_data['thumbnail'];
$thumbnail = $this->_xpath->evaluate(
'string(' . $this->getXpathPrefix() . '/media:thumbnail)'
);
if(!$thumbnail)
$thumbnail = null;
$this->_data['thumbnail'] = $thumbnail;
return $this->_data['thumbnail'];
}
protected function _registerNamespaces()
{
$this->_xpath->registerNamespace('media', 'http://search.yahoo.com/mrss');
}
}
そして、すべての適切な拡張登録 ( Zend_Feed_Reader::registerExtension('media');
) を実行すると、実行時に null が返されます$item->getThumbnail()
。
誰にもアイデアはありますか?