【发布时间】:2011-09-27 17:13:11
【问题描述】:
在我开始编写一个验证器来检查一个 URL 是否真的指向一个 RSS 提要之前,我做了一些搜索,一些验证器可能已经存在,但没有任何可靠的验证器。
我只是想问问社区中是否有人知道通过 URL 的 RSS 验证器?
如果我自己写,你有什么建议?
我想只检查一行文本的第一个实例并确保它定义了<?xml version="1.0" encoding="UTF-8"?>,然后可能检查下一个项目是<rss> 节点。
您对此有何看法?是否存在提要可能不遵循上述语法的情况?
另外请注意,我尝试使用的一种方法如下:
$valid = true;
try{
$content = file_get_contents($feed);
if (!simplexml_load_string($content)){
$valid = false;
}
} catch (Exception $e){
$valid = false;
}
不幸的是,我似乎无法抑制警告(error_reporting(0) 不起作用..)所以只是向我发送垃圾邮件警告。
解决方案
对于任何感兴趣的人,我使用了 W3C Validator API
$url = "http://feed_url.com";
$validator = "http://validator.w3.org/feed/check.cgi";
$validator .= "?url=".$url;
$validator .= "&output=soap12";
$response = file_get_contents($validator);
$a = strpos($response, '<m:validity>', 0)+12;
$b = strpos($response, '</m:validity>', $a);
$result = substr($response, $a, $b-$a);
echo $result;
这将相应地返回真或假。
【问题讨论】:
-
Take a look in the manual,
LIBXML_NOERROR、LIBXML_NOWARNING(ref) 等内容有一个选项参数。好好阅读,你的问题可能会消失。 -
@Hakre,谢谢!想将此作为答案发布,以便我给你信用?
-
我敢打赌,这个问题已经发布并且也有答案。最好删除问题并下次使用搜索 - 只要您只关心错误。我的意思是这可能不是在回答 RSS 提要验证器问题。但是请检查右侧的相关阵容,例如stackoverflow.com/questions/451338/validating-an-rss-feed 和类似的。
-
@Atticus 关于您尝试的方法,仅仅因为字符串是有效的 XML 并不意味着它是有效的 RSS 字符串。我建议你使用SimplePie 来处理这个问题。如果对象的 initialization 返回 true,则表示您有一个有效的提要。
标签: php rss simplexml validation