我有一个我正在开发的本地Intranet站点,我想在其中显示来自其他站点的一些RSS源。目前是基于Concrete5 CMS,我使用RSS显示器插件来显示提要。该插件使用SimplePie来解析Feed。默认情况下,插件显示整个RSS内容。我已经调整了插件(SimplePie),只显示带有链接,日期和每个帖子/条目中第一个图像的标题。
我找到了这个函数,我将$item->get_content()
传递给了第一个图像的源:
function getFirstImage($text) {
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
$pattern = "/<img[^>]+\>/i";
preg_match($pattern, $text, $matches);
$text = $matches[0];
return $text;
}
function scrapeImage($text) {
$pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
preg_match($pattern, $text, $link);
$link = $link[1];
$link = urldecode($link);
return $link;
}
它工作正常,问题是某些Feed中包含广告,有时会放在实际的帖子内容之前,因此此函数会返回广告的网址。显然,这些RSS广告针对的是使用rss阅读器的人,但是为了在网站上显示它们,它们非常烦人。
如果我尝试定位<img>
中preg_match()
以外的确切标记,我觉得它只适用于我从中获取标记的特定Feed。 (例如,如果我尝试使用preg_match()
仅查找<p>
代码中的图片)
如何从实际帖子中获取非广告的第一张图片,而无需更改我想要显示的每个Feed的代码?
答案 0 :(得分:2)
我不确定这是否适用于您的情况,但通常广告图片来自与常规内容不同的域或子域。您可以尝试根据URL中的域或子域过滤掉图像,这些域与rss源的域或子域不同。