Pep*_*per 2 php rss feedparser atom-feed
我目前正在用PHP构建一个新的在线Feed阅读器.我正在研究的功能之一是Feed自动发现.如果用户输入网站URL,脚本将检测到它不是Feed,并通过解析HTML以获取正确的标记来查找实际的Feed URL.
问题是,我目前正在检测URL是Feed还是网站的方式只能部分工作,我知道它不是最好的解决方案.现在我正在接受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
}
Run Code Online (Sandbox Code Playgroud)
显然,这并不理想.此外,当它运行到可以解析的HTML网站时,它会认为它是一个提要.
有关检测PHP中的feed或non-feed之间差异的好方法的任何建议?
谢谢,
我会嗅到这些格式具有的各种唯一标识符:
原子:来源
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
Run Code Online (Sandbox Code Playgroud)
RSS 0.90:来源
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://my.netscape.com/rdf/simple/0.9/">
Run Code Online (Sandbox Code Playgroud)
Netscape RSS 0.91
<rss version="0.91">
Run Code Online (Sandbox Code Playgroud)
等等(有关完整概述,请参阅第二个源链接).
据我所知,通过分别查找<feed>
和<rss>
标记,分离Atom和RSS应该非常简单.另外,您无法在有效的HTML文档中找到它们.
您可以首先通过查找<html>
和<body>
元素进行初步检查,以告诉HTML和提要.为了避免输入无效的问题,这可能是使用正则表达式(通过解析器)最终证明一次的合理性:)
如果它与HTML测试不匹配,请对其运行Atom/RSS测试.如果它未被识别为提要,或XML解析器在无效输入上窒息,则再次回退到HTML.
在野外看起来是什么 - 饲料供应商是否始终遵守这些规则 - 是一个不同的问题,但你应该已经能够以这种方式认识到很多.