前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用PHP解析读取网站RSS(Feed)内容

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

作者头像
沈唁
发布2018-05-24 17:12:14
2K0
发布2018-05-24 17:12:14
举报
文章被收录于专栏:沈唁志

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 警告的提示我直接选择屏蔽了

代码语言:javascript
复制
//解决 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 内容格式有问题吧。

代码语言:javascript
复制
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 源地址列表写为数组,单个单独获取也可以。

代码语言:javascript
复制
//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)内容

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么使用 RSS?
  • PHP 解析 RSS
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档