我想知道其他开发者如何管理从RSS源中的URL正确获取/提取网站博客主要内容中的第一个图像。这是我想到的方式,因为RSS源没有其中的帖子/博客项目的图像URL。虽然我一直在看
<img src="http://feeds.feedburner.com/~r/CookingLight/EatingSmart/~4/sIG3nePOu-c" />
但它只有1px图像。这个是否与Feed项具有相关价值,或者我可以将其转换为实际图像吗?这是RSS http://feeds.cookinglight.com/CookingLight/EatingSmart?format=xml
无论如何,这是我尝试使用Feed中的网址提取图片:
function extact_first_image( $url ) {
$content = file_get_contents($url);
// Narrow the html to get the main div with the blog content only.
// source: http://stackoverflow.com/questions/15643710/php-get-a-div-from-page-x
$PreMain = explode('<div id="main-content"', $content);
$main = explode("</div>" , $PreMain[1] );
// Regex that finds matches with img tags.
$output = preg_match_all('/<img[^>]+src=[\'"]([^\'"]+)[\'"][^>]*>/i', $main[12], $matches);
// Return the img in html format.
return $matches[0][0];
}
$url = 'http://www.cookinglight.com/eating-smart/nutrition-101/foods-that-fight-fat'; //Sample URL from the feed.
echo extact_first_image($url);
此功能的明显缺点:
如果在html中找到<div id="main-content"
,它会正确爆炸。当另一个xml与另一个结构进行解析时,也会有另一个爆炸。这非常不稳定。
我想它值得一提的还有加载时间。当我执行循环中的项目循环时,它甚至更长。
我希望我明确指出这些观点。随意放下任何可能有助于优化解决方案的想法。
答案 0 :(得分:1)
图片网址在rss文件中,因此您可以通过解析xml来获取它们。每个&lt; item&gt; element包含&lt; media:group&gt;包含&lt; media:content&gt;的元素元件。该项目的图片的网址位于&lt; media:content&gt;的“url”属性中。元件。这是一些用于将图像URL提取到数组中的基本代码(php):
$xml = simplexml_load_file("http://feeds.cookinglight.com/CookingLight/EatingSmart?format=xml");
$imageUrls = array();
foreach($xml->channel->item as $item)
{
array_push($imageUrls, (string)$item->children('media', true)->group->content->attributes()->url);
}
但请记住,媒体不一定是图像。它可以是视频或录音。甚至可能有多个&lt; media:group&gt;。您可以检查&lt; media:content&gt;的“type”属性。要看它是什么的元素。