Rss简介
RSS目前广泛用于网上新闻频道,blog和wiki,主要的版本有0.91, 1.0, 2.0。使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。
开始使用
rss订阅就是返回一个规范的xml数据
下面是一个Rss2.0文件规范示例
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>媒体名称/发布内容网站名称</title>
<description>内容提供都描述,介绍</description>
<link>内容提供者网址</link>
<generator>生成该频道的程序名字符串。</generator>
<image>
<url>LOGO图片地址(绝对地址)</url>
<title>图片描述(alt)</title>
<link>网站首页地址</link>
</image>
<item>
<title><![CDATA[ 文章标题 ]]></title>
<link>文章URL地址(绝对地址)</link>
<description><![CDATA[ 摘要/全文 ]]></description>
<guid>项目的唯一识别码</guid>
<pubDate>Mon, 07 Jul 2014 13:42:28 +0800 发布时间</pubDate>
</item>
</channel>
</rss>
其中 每个item
就是一篇内容, 生成xml时, 只要循环生成item
再加上头尾即可
这里提供一个php类用来生成xml数据, 使用方法在下面
class Rss
{
public $title = '徐善通的随笔';
public $description = '徐善通的博客';
public $link = 'http://xstnet.com';
public $language = 'zh-cn';
public $copyright = 'Copyright 2016,2020 xstnet.com';
public $pubDate;
public $generator = 'xstnet.com';
public $items = [];
public function __construct($data = [])
{
$this->setData($data);
}
public function setData($data)
{
// $this->pubDate = date("D, d M Y H:i:s ", strtotime($date)) . "GMT";
foreach ($data as $key => $value) {
$this->$key = $value;
}
}
public function __set($name, $value)
{
}
public function setItem(array $item)
{
$this->items[] = $item;
}
public function renderRss() : string
{
return $this->renderHeader() . $this->renderItems() . $this->renderFooter();
}
public function renderItems()
{
$xml = '';
foreach ($this->items as $data) {
$xml .= "\t<item>\n\t";
foreach ($data as $key => $value) {
$xml .= "\t";
switch ($key) {
case 'title' :
$xml .= sprintf('<title><![CDATA[ %s ]]></title>', $value);
break;
case 'description' :
$xml .= sprintf('<description><![CDATA[ %s ]]></description>', $value);
break;
case 'link' :
$xml .= sprintf('<link>%s</link>', $value);
break;
case 'pubDate' :
$xml .= sprintf('<pubDate>%s</pubDate>', $value);
break;
case 'guid' :
$xml .= sprintf('<guid>%s</guid>', $value);
break;
}
$xml .= "\n\t";
}
$xml .= "</item>\n";
}
return $xml;
}
public function renderHeader() : string
{
$xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<rss version=\"2.0\">
<channel>
<title>{$this->title}</title>
<description>{$this->description}</description>
<link>{$this->link}</link>
<generator>{$this->generator}</generator>
<image>
<url>http://xstnet.com/favicon.ico</url>
<title>徐善通的随笔</title>
<link>http://xstnet.com</link>
</image>\n";
return $xml;
}
public function renderFooter() : string
{
return "</channel>\n</rss>";
}
}
使用方法
// 使用
$rss = new Rss(); // 此处可传数据赋值
// $dataList 该数据应为查数据库得到
$dataList = [
'id' => 1,
'title' => '标题',
'description' => '', // 可选
'created_at' => time(),
];
foreach ($dataList as $value) {
$item = [
'title' => $value['title'],
'description' => $value['description'],
'link' => 'http://example.com/article-' . $value['id'],
'pubDate' => date("D, d M Y H:i:s ", $value['created_at']) . "GMT",
'guid' => 'http://example.com/article-' . $value['id'],
];
$rss->setItem($item);
}
$xmlString = $rss->renderRss();
header('Content-Type:application/xml; charset=UTF-8');
echo $xmlString;
测试使用
可以直接在火狐浏览器直接打开网页, 如果是正确的内容会有提示订阅的消息,如