RSS 是站点用来和其他站点之间共享内容的一种简易方式(也叫聚合内容),发布一个 RSS 文件后,这个 RSS Feed 中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的 XML 格式,所以也能在其他的终端和服务中使用,WordPress 也提供基于 RSS 的服务。
RSS 被设计用来展示选定的数据。
如果没有 RSS,用户就不得不每日都来您的网站检查新的内容。对许多用户来说这样太费时了。通过 RSS feed(RSS 通常被称为 News feed 或 RSS feed),用户们可以使用 RSS 聚合器来更快地检查您的网站更新(RSS 聚合器是用来聚集并分类 RSS feed 的网站或软件)。
不想解释什么,有几个 Bug 待解决,有些网站解析不出来,不知道为什么,可能是 xml 格式问题。还有一个变量未定义 PHP 警告的提示我直接选择屏蔽了
//解决 PHP 显示 Warning 和 Notice 等问题
ini_set("display_errors", 0);
error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL ^ E_WARNING);
先看一下效果
PHP 解析 RSS 的内容
最后这里的无法打开该站 Feed,测试打开Boke112 导航的站点 Feed 无法打开,不知什么原因。个人感觉是 Boke112 导航的 RSS 内容格式有问题吧。
for ($i = 0; $i < sizeof($rssfeed); $i++) {
//分解开始
$buff = "";
$rss_str = "";
//打开 rss 地址,并读取,读取失败则中止
$fp = fopen($rssfeed[$i], "r") or die("无法打开该网站 Feed");
while (!feof($fp)) {
$buff .= fgets($fp, 4096);
}
//关闭文件打开
fclose($fp);
//建立一个 XML 解析器
$parser = xml_parser_create();
//xml_parser_set_option -- 为指定 XML 解析进行选项设置
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
//xml_parse_into_struct -- 将 XML 数据解析到数组$values 中
xml_parse_into_struct($parser, $buff, $values, $idx);
//xml_parser_free -- 释放指定的 XML 解析器
xml_parser_free($parser);
foreach ($values as $val) {
$tag = $val["tag"];
$type = $val["type"];
$value = $val["value"];
//标签统一转为小写
$tag = strtolower($tag);
if ($tag == "item" && $type == "open") {
$is_item = 1;
} else if ($tag == "item" && $type == "close") {
//构造输出字符串
$rss_str .= "<a href='" . $link . "' target=_blank>" . $title . "</a><br />";
$is_item = 0;
}
//仅读取 item 标签中的内容
if ($is_item == 1) {
if ($tag == "title") {$title = $value;}
if ($tag == "link") {$link = $value;}
}
}
//输出结果
echo $rss_str . '<br/>';
}
记得加上 Header 头,防止文字编码格式错误,将 RSS 源地址列表写为数组,单个单独获取也可以。
//RSS 源地址列表数组
$rssfeed = array(
"https://qq52o.me/feed/",
"https://foreverblog.cn/feed/",
"https://boke112.com/feed/",
);
//设置编码为 UTF-8
Header('content-type:text/html;Charset=utf-8');
用途是什么就自己考虑吧,比如什么美化友链啊啥的~~~
沈唁志|一个PHPer的成长之路!
原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:使用PHP解析读取网站RSS(Feed)内容