铁东博客

程序员利用PHP是如何实现RSS订阅类

之前一直不知道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订阅类

评论,共有 0 条评论

  • 昵称 (必填)
  • 邮箱 (必填)
暂无评论数据,赶紧来评论吧