使用PHP解析读取网站RSS(Feed)内容

RSS是站点用来和其他站点之间共享内容的一种简易方式(也叫聚合内容),发布一个RSS文件后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用,WordPress也提供基于RSS的服务。

为什么使用 RSS?

RSS 被设计用来展示选定的数据。

如果没有 RSS,用户就不得不每日都来您的网站检查新的内容。对许多用户来说这样太费时了。通过 RSS feed(RSS 通常被称为 News feed 或 RSS feed),用户们可以使用 RSS 聚合器来更快地检查您的网站更新(RSS 聚合器是用来聚集并分类 RSS feed 的网站或软件)。

PHP解析RSS

不想解释什么,有几个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的内容
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');

用途是什么就自己考虑吧,比如什么美化友链啊啥的~~~

12 条评论

发表评论

*