如何使用Simple Pie获取原子外壳图像

时间:2014-10-24 11:10:45

标签: rss silverstripe atom-feed simplepie

我正在构建RSS聚合器并尝试处理来自各种来源的图像。

我的大部分资源都是在内容或媒体中使用图片:RSS附件。

我设法让Simple Pie为媒体选择附件:RSS

还可以从RSS帖子的内容中删除图像。

但来自名为Silver Stripe的CMS的提要在每个帖子中都有一个原子样式的嵌入图像

表示我无法从Simple Pie中读取和提取图像。

<link rel="enclosure" type="image/JPG" href="http://example.com/image.jpg" />

我是否需要修改机箱类才能使其正常工作,或者我错过了什么,是吗

与我正在使用的命名空间有关吗?

Here is one of the feeds I am trying to get

我正在访问其他7个不同的SilverStipe网站,所有这些网站都包含相同的图片链接......

这是我当前的图片脚本:

if ($enclosures = $prPost->get_enclosures())
    {
        foreach ($enclosures as $enclosure)
        {
            $this->Fields['image'] = $enclosure->get_link();
        }
    }

    if (preg_match('/<img.+?src="(.+?)"/', $this->Fields['desc'], $matches) && strlen($this->Fields['image']) < 5) {
        $this->Fields['image'] = $matches[1];
        $this->Fields['desc'] = preg_replace('/<img(.*)>/i' , "" , $this->Fields['desc'], 1); 
    }

1 个答案:

答案 0 :(得分:0)

这些link元素是item元素的子元素:

<rss>
  <channel>
    ...
    <item>
      ...
      <description>...</description>
      <link rel="enclosure" ... />

您可以使用get_item_tagsitem获取特定元素。

他们位于Atom命名空间(<atom:link>),而是保留在默认命名空间(<link>)中,这是Feed中的错误。但是你需要解决一个问题:

$links = $item->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link');