gpt4 book ai didi

php - 使用 Zend_Feed_Reader 的 RSS 命名空间

转载 作者:行者123 更新时间:2023-12-04 06:12:21 26 4
gpt4 key购买 nike

我在使用 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'}()不起作用。

我还尝试编写自己的扩展程序(使用 this as a guide ):
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'); )在运行 $item->getThumbnail() 时返回 null .

有没有人有任何想法?

最佳答案

我也确实遵循了 Zend.com 上的指南发现第一个代码块有问题,Zend_Feed_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() 的情况下获取我的 XPath 怎么办?换行,所以我做了(我用你的代码使它更清晰):
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');
}
}

瞧,有你的缩略图。

关于php - 使用 Zend_Feed_Reader 的 RSS 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7642852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com