之前一直不知道RSS订阅是什么东东,后来百度查了一下:
RSS(简易信息聚合,也叫聚合内容)是一种描述和同步网站内容的格式。RSS可以是以下三个解释的其中一个: Really Simple Syndication;RDF (Resource Description Framework) Site Summary; Rich Site Summary。但其实这三个解释都是指同一种Syndication的技术。RSS目前广泛用于网上新闻频道,blog和wiki。使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。
从技术上来说一个RSS文件就是一段规范的XML数据,该文件一般以rss,xml或者rdf作为后缀,下面是一段 rss 文件的内容示例:
下面分享一段使用 php 动态生成 RSS 的代码示例的一个RSS类:
namespace app\common\service; class RSS { protected $channel_title = ''; protected $channel_link = ''; protected $channel_description = ''; protected $channel_imgurl = ''; protected $language = 'zh_CN'; protected $pubDate = ''; protected $lastBuildDate = ''; protected $generator = 'YBlog RSS Generator'; protected $items = array(); /** * @param string $title RSS频道名 * @param string $link RSS频道链接 * @param string $description RSS频道描述 * @param string $imgurl RSS频道图标 */ public function __construct($title, $link, $description, $imgurl = '') { $this->channel_title = $title; $this->channel_link = $link; $this->channel_description = $description; $this->channel_imgurl = $imgurl; $this->pubDate = Date('Y-m-d H:i:s', time()); $this->lastBuildDate = Date('Y-m-d H:i:s', time()); } /** * @access public * @param string $key 变量名 * @param string $value 变量的值 */ public function Config($key,$value) { $this->{$key} = $value; } /** * @access public * @param string $title 日志的标题 * @param string $link 日志的链接 * @param string $description 日志的摘要 * @param string $pubDate 日志的发布日期 */ public function AddItem($title, $link, $description, $pubDate) { $this->items[] = array('title' => $title, 'link' => $link, 'description' => $description, 'pubDate' => $pubDate); } /** * 输出RSS的XML为字符串 * @access public * @return string */ public function Fetch() { $rss = ''; $rss .= "\r\n"; $rss .= "\r\n"; $rss .= "\r\n"; $rss .= "channel_title}]]>\r\n"; $rss .= "channel_description}]]>\r\n"; $rss .= "{$this->channel_link}\r\n"; $rss .= "{$this->language}\r\n"; if (!empty($this->pubDate)) $rss .= "{$this->pubDate}\r\n"; if (!empty($this->lastBuildDate)) $rss .= "{$this->lastBuildDate}\r\n"; if (!empty($this->generator)) $rss .= "{$this->generator}\r\n"; $rss .= "5\r\n"; if (!empty($this->channel_imgurl)) { $rss .= "\r\n"; $rss .= "channel_title}]]>\r\n"; $rss .= "{$this->channel_link}\r\n"; $rss .= "{$this->channel_imgurl}\r\n"; $rss .= "\r\n"; } for ($i = 0; $i items); $i++) { $rss .= "\r\n"; $rss .= "items[$i]['title']}]]>\r\n"; $rss .= "{$this->items[$i]['link']}\r\n"; $rss .= "items[$i]['description']}]]>\r\n"; $rss .= "{$this->items[$i]['pubDate']}\r\n"; $rss .= "\r\n"; } $rss .= "\r\n"; return $rss; } /** * 输出RSS的XML到浏览器 * @access public * @return void */ public function Display() { header("Content-Type: text/xml; charset=utf-8"); echo $this->Fetch(); exit; }
使用步骤:
1·、实例化对象
$title = config('base.site_name'); $link = config('base.site_domain'); $description = config('base.site_description'); $imgUrl = config('base.site_logo'); $rssObj = new RSS($title,$link,$description,$imgUrl);
2、存数据进数据
//获取文章列表 $list = $newsModel::where('status',1)->field('id,cid,title,ctime,describe')->order('ctime desc')->select(); $arr = $list->toArray(); foreach ($arr as $k=>$v){ $ename = getCateEname($v['cid']); $describe = empty($v['describe']) ? config('base.site_description'):$v['describe']; $url = config('base.site_domain')."/new/{$ename}/{$v['id']}.html"; $rssObj->AddItem($v['title'],$url,$describe,$v['ctime']); }
3、调用
$rssObj->Display();
4.结果
未经允许不得转载:铁东博客 » 程序员利用PHP是如何实现RSS订阅类