我有以下代码:
function parse() {
$content = file_get_contents($this->feed);
$rss = new SimpleXmlElement($content);
$rss_split = array();
$i = 0;
foreach ($rss->channel->item as $item) {
$title = (string) $item->title; // Title
$link = (string) $item->link; // Url Link
$content = $item->children('content', true)->encoded;
preg_match('/<img.+src=[\'"](?P<src>.+)[\'"].*>/i', $content, $image);
$image = substr($image['src'], 0, strpos($image['src'], '"'));
$rss_split[$i]['title'] = $title;
$rss_split[$i]['link'] = $link;
$rss_split[$i]['image'] = $image;
$i++;
}
return $rss_split;
}
此处,$this->feed
包含RSS Feed的网址。问题是我不知道如何验证URL以确保它是有效的RSS源。
答案 0 :(得分:13)
验证它是XML:
function parse()
{
$content = file_get_contents($this->feed);
try { $rss = new SimpleXmlElement($content); }
catch(Exception $e){ /* the data provided is not valid XML */ return false; }
// rest of your function goes here
一旦您确认它是XML,您就有几个选择:
isset($rss->channel->item)
并$rss->channel->item->count()
&gt; 0 count($rss->xpath(/channel/item)) > 0
。我个人使用xpath,因为我在阅读代码时发现它更为明显。
真的?你已经有了XML对象。你为什么使用RegEx?
不要这样做:
preg_match('/<img.+src=[\'"](?P<src>.+)[\'"].*>/i', $content, $image);
当这是一个有效选项时:
$g = $item->xpath('//img'); $g[0]->attributes()->src;
答案 1 :(得分:1)
?php
function validateFeed( $sFeedURL )
{
$sValidator = 'http://feedvalidator.org/check.cgi?url=';
if( $sValidationResponse = @file_get_contents($sValidator . urlencode($sFeedURL)) )
{
if( stristr( $sValidationResponse , 'This is a valid RSS feed' ) !== false )
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
?>
答案 2 :(得分:0)
使用此
$rss = new SimpleXmlElement($content);
if($rss)
{
//your code
}
else
{ return false; }