【问题标题】:Any existing RSS feed url validators?任何现有的 RSS 提要 url 验证器?
【发布时间】: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 manualLIBXML_NOERRORLIBXML_NOWARNING (ref) 等内容有一个选项参数。好好阅读,你的问题可能会消失。
  • @Hakre,谢谢!想将此作为答案发布,以便我给你信用?
  • 我敢打赌,这个问题已经发布并且也有答案。最好删除问题并下次使用搜索 - 只要您只关心错误。我的意思是这可能不是在回答 RSS 提要验证器问题。但是请检查右侧的相关阵容,例如stackoverflow.com/questions/451338/validating-an-rss-feed 和类似的。
  • @Atticus 关于您尝试的方法,仅仅因为字符串是有效的 XML 并不意味着它是有效的 RSS 字符串。我建议你使用SimplePie 来处理这个问题。如果对象的 initialization 返回 true,则表示您有一个有效的提要。

标签: php rss simplexml validation


【解决方案1】:

W3C Feed Validation Service 提供 SOAP 接口。来自About 页面:

是否有带有用于该服务的公共 API 的 Web 服务?

是的,有一个 SOAP 接口,可以使用查询访问 常规查询之上的参数 output="soap12"。 SOAP 1.2 Web Service API documentation 有更多详细信息。

【讨论】:

  • 优秀的资源!谢谢你的链接,我会用这个。
  • @Atticus:没问题!很高兴您发现它有帮助。
  • @Atticus:很高兴听到!祝你的项目好运:)
【解决方案2】:

我会这样做:

  1. 它是有效的 XML 吗?如果是,请继续。

  2. 顶级元素是 rss 还是 feed?如果是这样,它是一个饲料。如果没有,那就不是。

这涵盖了除 1.0 之外的所有版本的 RSS 和所有版本的 Atom。

RSS 1.0 更加困难,因为它的顶级元素是 RDF,而且它是一种比 RSS 更通用的格式,因此您必须更深入地寻找 RSS 特性的迹象。但幸运的是,这些天没有太多的 RSS 1.0,其中大部分是 RSS 2.0 或 Atom 1.0。

希望这会有所帮助,通常的免责声明,我不是律师等。

【讨论】:

  • 感谢 Dave,这正是我担心的问题。RSS 版本或 Atom 之间的顶级元素是不同的。很好的提示,我想我会使用现有的 API 来避免任何我可能不知道的异常。 +1 :)
猜你喜欢
  • 1970-01-01
  • 2010-10-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2010-09-08
  • 2012-03-04
相关资源
最近更新 更多