要了解什麼是 RSS 可以參考這篇,這邊就用 CodeIgniter 來實作如何建置自己的 RSS Feed。
首先建立一個 Controller Rss.php:
class Rss extends MY_Controller { public function __construct() { parent::__construct(); $this->load->helper('text'); $this->load->model('tools_model', 'tools_m'); } public function index() { } }
我在 tools_model 這邊建立一個方法來讀取資料庫的文章,大概是長這樣:
public function rss_articles(){ $data = $this->db ->limit(30) ->order_by('create_time', 'desc') ->get('article') ->result_array(); return $data; }
limit 設定 30 是 RSS 沒有必要抓取所有的文章,可以看網站的更新頻率看總共要抓幾篇文章就好。
接著在 Controller 把必要的資料都抓出來:
public function index() { $data['feed_name'] = "YOUR SITE NAME"; $data['encoding'] = 'utf-8'; $data['feed_url'] = "YOUR RSS URL"; $data['page_description'] = "Feed 的敘述"; $data['page_language'] = 'zh-TW'; $data['creator_email'] = "YOUR EMAIL"; $data['posts'] = $this->tools_m->rss_articles(); header("Content-Type: application/rss+xml"); $this->load->view('rss', $data); }
接著在 view 建立一支 rss.php 的檔案,並把從資料庫抓的內容顯示出來:
前面先做宣告:
<?php echo '<?xml version="1.0" encoding="' . $encoding . '"?>' . "\n"; ?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title><?= $feed_name; ?></title>
<link><?= $feed_url; ?></link>
<description><?= $page_description; ?></description>
<dc:language><?= $page_language; ?></dc:language>
<dc:creator><?= $creator_email; ?></dc:creator>
<dc:rights>Copyright <?= gmdate("Y", time()); ?></dc:rights>
後面利用迴圈把內容輸出:
<?php foreach($posts as $post): ?>
<item>
<title><?php echo $post["title"]; ?></title>
<link><?php echo $this->data["siteUrl"]."article/sn/".$post["id"] ?></link>
<guid><?php echo $this->data["siteUrl"]."article/sn/".$post["id"] ?></guid>
<description><![CDATA[ <?php echo character_limiter($post["description"], 200); ?> ]]></description>
<pubDate><?php echo date("D, d M Y H:i:s T", strtotime($post["create_time"])); ?></pubDate>
</item>
<?php endforeach; ?>
</channel>
</rss>
這邊注意 guid 是自訂的用來識別的字串,我是用跟文章網址一樣,這邊可以自訂,而 pubDate 需要遵循 RSS 的格式,所以我有做格式的轉換。
寫好後可以到 W3C 去測試 RSS 的格式對不對。
可以的話也歡迎訂閱本站的 RSS 喔。