我目前正在用 PHP 构建一个新的在线 Feed 阅读器。我正在开发的功能之一是提要自动发现。如果用户输入网站 URL,脚本将检测到它不是提要,并通过解析 HTML 来查找正确的提要 URL。<link>
tag.
问题是,我目前检测 URL 是否为提要或网站的方式仅在部分时间有效,而且我知道这不是最佳解决方案。现在我正在获取 CURL 响应并运行它simplexml_load_string
,如果它无法解析它,我会将其视为一个网站。这是代码。
$xml = @simplexml_load_string( $site_found['content'] );
if( !$xml ) // this is a website, not a feed
{
// handle website
}
else
{
// parse feed
}
显然,这并不理想。此外,当它遇到一个可以解析的 HTML 网站时,它会认为它是一个提要。
关于检测 PHP 中 feed 和非 feed 之间差异的好方法有什么建议吗?
我会嗅探这些格式具有的各种唯一标识符:
Atom: Source
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
RSS 0.90:Source
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://my.netscape.com/rdf/simple/0.9/">
网景RSS 0.91
<rss version="0.91">
等等(有关完整概述,请参阅第二个源链接)。
据我所知,通过寻找来分离 Atom 和 RSS 应该很容易<feed>
and <rss>
标签,分别。另外,您不会在有效的 HTML 文档中找到这些内容。
您可以通过查找来进行初步检查以区分 HTML 和 feed<html>
and <body>
元素第一。为了避免无效输入的问题,这可能是使用正则表达式(通过解析器)最终合理的情况for once :)
如果它与 HTML 测试不匹配,请对其运行 Atom / RSS 测试。如果它未被识别为提要,或者 XML 解析器因无效输入而阻塞,则再次回退到 HTML。
在实际情况下,饲料供应商是否始终遵守这些规则是一个不同的问题,但您应该已经能够通过这种方式识别出很多东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)