Php 使用Zend_提要_阅读器的RSS名称空间
我在使用Zend_Feed_Reader解析RSS提要时遇到一些问题,特别是在使用RSS命名空间时 我试图解析的提要是BBC新闻提要(http://feeds.bbci.co.uk/news/rss.xml)其中包括:Php 使用Zend_提要_阅读器的RSS名称空间,php,zend-framework,zend-feed,Php,Zend Framework,Zend Feed,我在使用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"/&
<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->getMedia()
,$item->getMedia(“缩略图”)
,$item->{'media:thumbnail'}
或$item->{'media:thumbnail'}()
不起作用
我还尝试编写自己的扩展(使用):
然后执行所有适当的扩展注册(Zend\u Feed\u Reader::registerExtension('media');
)在运行$item->getThumbnail()时返回null
有人有什么想法吗?我也遵循了上的指南,发现第一个代码块有问题,Zend\u Feed\u Reader::addPrefixPath
的参数顺序不正确,必须是这样的:
if(!Zend_Feed_Reader::isRegistered('JungleBooks')) {
Zend_Feed_Reader::addPrefixPath(
'My_FeedReader_Extension', '/path/to/My/FeedReader/Extension'
);
Zend_Feed_Reader::registerExtension('JungleBooks');
}
我想你是这样注册分机的吧
这就完成了,我继续自定义扩展。
使用Zend.com上的完整示例只给了我一个空字符串。
在尝试了一些不同的符号,比如双冒号::
、方括号[]
甚至@
符号之后,我几乎放弃了
然后,我突然想到一件事;如果我尝试在不使用string()
wrap的情况下获取XPath,并且我这样做了(我使用了您的代码使其更加清晰),该怎么办
瞧,这是你的缩略图。谢谢,太好了!非常感谢你的帮助。
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');
}
}
if(!Zend_Feed_Reader::isRegistered('JungleBooks')) {
Zend_Feed_Reader::addPrefixPath(
'My_FeedReader_Extension', '/path/to/My/FeedReader/Extension'
);
Zend_Feed_Reader::registerExtension('JungleBooks');
}
class Zend_Feed_Reader_Extension_Media_Entry
extends Zend_Feed_Reader_Extension_EntryAbstract
{
public function getThumbnails()
{
if(isset($this->_data['thumbnails'])){
return $this->_data['thumbnails'];
}
$thumbnail_list = $this->_xpath->evaluate(
$this->getXpathPrefix() . '/media:thumbnail'
);
$thumbnails = array();
// According to your XML sample there are multiple thumbnails per item, so we're looping through them and adding them to a simple array
foreach($thumbnail_list as $_thumbnail_element){
array_push($thumbnails, array(
'url' => $_thumbnail_element->getAttribute('url'),
'width' => $_thumbnail_element->getAttribute('width'),
'height' => $_thumbnail_element->getAttribute('height'),
));
}
if(!count($thumbnails)){
$thumbnails = null;
}
$this->_data['thumbnails'] = $thumbnails;
return $this->_data['thumbnails'];
}
protected function _registerNamespaces()
{
$this->_xpath->registerNamespace('media', 'http://search.yahoo.com/mrss');
}
}