最新消息:博客断断续续关停过,感谢保留友链的友们,以后本博客可能会比较少更新,但是会一直开下去,并保持稳定性。

ThinkPHP 3.2.X 日志订阅 RSS 类

技术交流 东子 2775次浏览 2 条评论 无图浏览

公司用ThinkPHP做的项目需要做RSS给蜘蛛爬虫,找了下RSS类,官方讨论组有人发布了一个类,不过没说怎么用,看了半天也是没看懂。后来搜到了网智博客发布的一个类(地址 http://w3note.com/web/56.html),还不错,拿过来实例化下就能用。

由于笔者有强迫症,花了点时间把代码格式化了下…

以下代码丢到自定义类文件夹:/Thinkphp/Library/Org/Util/Rss.class.php

<?php
// | YBlog
// | Copyright (c) 2008 http://www.yhustc.com All rights reserved.
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// | Author: yhustc <yhustc@gmail.com>
// $Id$

/**
 * RSS生成类
 * @author    yhustc <yhustc@gmail.com>
 * @version   $Id$
 * @publish   kilvn <content@kilvn.com>
 */

namespace Org\Util;
class Rss{
    /**
     * RSS频道名
     * @var string
     * @access protected
     */

    protected $channel_title = '';

    /**
     * RSS频道链接
     * @var string
     * @access protected
     */

    protected $channel_link = '';

    /**
     * RSS频道描述
     * @var string
     * @access protected
     */

    protected $channel_description = '';

    /**
     * RSS频道使用的小图标的URL
     * @var string
     * @access protected
     */

    protected $channel_imgurl = '';

    /**
     * RSS频道所使用的语言
     * @var string
     * @access protected
     */

    protected $language = 'zh_CN';

    /**
     * RSS文档创建日期,默认为今天
     * @var string
     * @access protected
     */

    protected $pubDate = '';
    protected $lastBuildDate = '';
    protected $generator = 'Kilvn RSS Generator';

    /**
     * RSS单条信息的数组
     * @var string
     * @access protected
     */

    protected $items = array();

    /**
     * 构造函数
     * @access public
     * @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;
     }

    /**
     * 添加RSS项
     * @access public
     * @param string $title  日志的标题
     * @param string $link  日志的链接
     * @param string $description  日志的摘要
     * @param string $pubDate  日志的发布日期
     */

     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 = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n";

        $rss = "<rss version=\"2.0\">\r\n";
        $rss .= "<channel>\r\n";
        $rss .= "<title><![CDATA[{$this->channel_title}]]></title>\r\n";
        $rss .= "<description><![CDATA[{$this->channel_description}]]></description>\r\n";
        $rss .= "<link>{$this->channel_link}</link>\r\n";
        $rss .= "<language>{$this->language}</language>\r\n";

        if (!empty($this->pubDate)) $rss .= "<pubDate>{$this->pubDate}</pubDate>\r\n";

        if (!empty($this->lastBuildDate)) $rss .= "<lastBuildDate>{$this->lastBuildDate}</lastBuildDate>\r\n";

        if (!empty($this->generator)) $rss .= "<generator>{$this->generator}</generator>\r\n";

        $rss .= "<ttl>5</ttl>\r\n";

        if (!empty($this->channel_imgurl)) {
            $rss .= "<image>\r\n";
            $rss .= "<title><![CDATA[{$this->channel_title}]]></title>\r\n";
            $rss .= "<link>{$this->channel_link}</link>\r\n";
            $rss .= "<url>{$this->channel_imgurl}</url>\r\n";
            $rss .= "</image>\r\n";
        }

        for ($i = 0; $i < count($this->items); $i++) {
            $rss .= "<item>\r\n";
            $rss .= "<title><![CDATA[{$this->items[$i]['title']}]]></title>\r\n";
            $rss .= "<link>{$this->items[$i]['link']}</link>\r\n";
            $rss .= "<description><![CDATA[{$this->items[$i]['description']}]]></description>\r\n";
            $rss .= "<pubDate>{$this->items[$i]['pubDate']}</pubDate>\r\n";
            $rss .= "</item>\r\n";
        }
        $rss .= "</channel>\r\n</rss>";
        return $rss;
    }

    /**
     * 输出RSS的XML到浏览器
     * @access public
     * @return void
     */
    public function Display(){
        header("Content-Type: text/xml; charset=utf-8");
        echo $this->Fetch();
        exit;
    }
}

然后用的时候实例化,我就直接新建了个Feed的控制器,谁也不继承,查下数据库即可..:

<?php
namespace Home\Controller;
use Think\Controller;
class FeedController extends Controller{
    /**
     * 生成RSS
     */
    public function index(){
        $name = '网站名';
        $url = '网站首页地址';
        $desc = '网站描述';
        $RSS = new \Org\Util\Rss($name, $url, $desc, ''); //依次为:网站名称,URL,描述,缩略图片
        $db = M(TABLE_RESOURCES);
        $where = array('status' => 'ready');
        $result = $db->where($where)->order('id desc')->limit(20)->select();
        //pre($result);die;
        foreach($result as $list){
            $RSS->AddItem($list['title'].' '.$list['price'].' 元/月', $url.U('/fang/'.$list['id']), '北京市 '.$list['place'].$list['address'].' '.$list['room_desc'].' '.$list['price'].' 元/月,起租时间:'.$list['start_date'].'。本地段'.$list['remark'], date('Y-m-d H:i:s', $list['createtime'])); //查询的东西格式化,参考类文件
        }
        $RSS->Display(); //输出
    }
}

已经上传到了官方扩展:http://www.thinkphp.cn/extend/620.html

声明:欢迎转载,转载请注明来源:东子博客。  本文地址链接:http://blog.kilvn.com/thinkphp-rss-class/

发表我的评论
取消评论
表情 每日打卡 贴图 链接 私密消息

Hi,您需要填写昵称和邮箱!

  • 昵称
  • 邮箱
  • 网址

网友最新评论 (2)

  1. 小可先森2015-02-04 03:20 看的有点晕 。 :mrgreen:回复
    • 东子2015-02-04 10:14 额。。可能是代码高亮插件太炫了吧。。回复