好友池大師的舊文章,提供給有需要的朋友參考。
前些日子在"織夢線上"有人問到以下問題:
如何讓我的網站能夠支援RSS新聞閱讀的功能? 2006/2/21 下午 12:06:25
各位好:
TKY讓自己的PHPBB討論區新增了RSS的新聞閱讀系統,可以用RSS閱讀器來讀取討論區。
不過由於PHPBB和RSS系統都是人家做好的套件,所以TKY其實並不知道要怎麼樣設計一個RSS的發報系統,讓TKY網站上的新聞發佈系統也能有RSS發佈的功能。搜尋之前的文章,似乎還沒有人討論這個問題。
想請教一下茶米和其他高手們,是否能指點一下TKY這方面的問題,或介紹文章閱讀也可以。
謝謝大家 TKY
----------------------------------------------------------------------------------
當時我找幾篇範例如下:
http://usefulinc.com/rss/rsswriter/
http://www.hotscripts.com/PHP/Scripts_and_Programs/XML_and_PHP/
http://www.thewebmasters.net/
http://www.sitepoint.com/article/php-xml-parsing-rss-1-0
還有GOOGLE查詢的資訊後回答內容如下:
若你單純想製作RSS
可以參考以下連結
RSS 2.0 的規格 – 原文 ( 哈佛大學柏克曼中心 )
http://blogs.law.harvard.edu/tech/rss
RSS 2.0 的規格 – 中文簡述 ( 查爾斯的筆記本 )
http://www.aeu-studio.com/Charles/index.cfm?pid=200508121245
----------------------------------------------------------------------------------
由於我開始學PHP就是從PHP5開始,所以這一個範例您若在執行時有問題的話,請按照以下說明一一除錯:
步驟一
首先,在執行PHP5環境若是您還沒安裝,自行請參考"快快樂樂學PHP5-伺服器架設篇(VertrigoServ)"該篇說明:
1.安裝好伺服器,預設網頁根目錄為:
C:MYPHPVertrigoServ_htdocs
請在C:MYPHPVertrigoServ_htdocs 建立一個PHPRSS的範例目錄
2.請用文字編輯器,或是Dreamweaver新建一個PHP的檔案,貼入以下的程式碼並命檔名為RSSWriter.class.php存放在C:MYPHPVertrigoServ_htdocsPHPRSS 檔案夾裡。
/*///////////////////////////////////////////////////////////////
類別名稱 : RSSWriter.class
版本 : 1.0
修改者 :池明政
修改日期 : 2006.03.08
*** 修改說明 ***
RSS(Real Simple Syndication,Rich Site Summary) Writer
1. RSS 2.0 Specification
2. 編碼修正
*** 備註 ***
此CLASS為我所修改,若是你要引用請自行修改,範例若要取用請告知出處,謝謝!!
/////////////////////////////////////////////////////////////////*/
class RSSWriter {
var $charset = "utf-8";
var $title;
var $link;
var $description;
var $ChannelOptionalElements = array();
var $items = array();
function RSSWriter($title,$link,$description = null,$ChannelOptionalElements = array()){
$this->setChannel($title,$link,$description);
$this->setChannelOptionalElements($ChannelOptionalElements);
}
function setCharset($charset){
$this->charset = $charset;
}
function setChannel($title,$link,$description = ""){
$this->title = $title;
$this->link = $link;
$this->description = $description;
}
function setChannelOptionalElements($ChannelOptionalElements){
$this->$ChannelOptionalElements = $ChannelOptionalElements;
}
function setTitle($title){
$this->title = htmlspecialchars($title);
}
function setLink($link){
$this->link = htmlspecialchars($link);
}
function setDescription($description){
$this->description = htmlspecialchars($description);
}
function setLanguage($language){
$this->ChannelOptionalElements["language"] = $language;
}
function setCopyright($copyright){
$this->ChannelOptionalElements["copyright"] = $copyright;
}
function setManagingEditor($managingEditor){
$this->ChannelOptionalElements["managingEditor"] = $managingEditor;
}
function setWebmaster($webMaster){
$this->ChannelOptionalElements["webMaster"] = $webMaster;
}
// date format YYYY-MM-DD HH:mm:ss 設定發佈時間格式為 YYYY-MM-DD (輸出範例: 2000-11-01 00:00:00)
function setPubDate($pubDate){
$this->ChannelOptionalElements["pubDate"]
= sprintf("%s GMT",gmdate("M, d Y H:i:s",$this->GetTimeStamp($pubDate)));
}
// date format YYYY-MM-DD HH:mm:ss 設定最後修改時間格式為 YYYY-MM-DD (輸出範例: 2000-11-01 00:00:00)
function setLastBuildDate($lastBuildDate){
$this->ChannelOptionalElements["lastBuildDate"]
= sprintf("%s GMT",gmdate("M, d Y H:i:s",$this->GetTimeStamp($lastBuildDate)));
}
function setCategory($category){
$this->ChannelOptionalElements["category"] = $category;
}
function setGenerator($generator){
$this->ChannelOptionalElements["generator"] = $generator;
}
function setDocs($docs){
$this->ChannelOptionalElements["docs"] = $docs;
}
function setCloud($cloud){
$this->ChannelOptionalElements["cloud"] = $cloud;
}
function setTtl($ttl){
$this->ChannelOptionalElements["ttl"] = $ttl;
}
function setImage($image){
$this->ChannelOptionalElements["image"] = $image;
}
function setRating($rating){
$this->ChannelOptionalElements["rating"] = $rating;
}
function setTextInput($textInput){
$this->ChannelOptionalElements["textInput"] = $textInput;
}
function setSkipHours($skipHours){
$this->ChannelOptionalElements["skipHours"] = $skipHours;
}
function setSkipDays($skipDays){
$this->ChannelOptionalElements["skipDays"] = $skipDays;
}
function setItem($title,$link,$description ="",$author = "",$pubDate ="",$category ="",
$guid ="",$source ="",$comments ="",$enclosure =""){
$item = array();
$item["title"] = $title;
$item["link"] = $link;
$item["description"] = $description;
$item["author"] = $author;
$item["pubDate"] = sprintf("%s GMT",gmdate("M, d Y H:i:s",$this->GetTimeStamp($pubDate)));
$item["category"] = $category;
$item["guid"] = $guid;
$item["source"] = $source;
$item["comments"] = $comments;
$item["enclosure"] = $enclosure;
$this->addItem($item);
}
function addItem($item){
array_push($this->items,$item);
}
function println(){
header("Content-type: text/xml");
printf("n",$this->charset);
print("n");
$this->printChannel();
print("n");
}
function printChannel(){
print("n");
printf("n",$this->title);
printf("%sn",$this->link);
printf("%sn",$this->description);
while (list($name,$value) = each ($this->ChannelOptionalElements)) {
printf("<%s>%sn",$name,$value,$name);
}
$this->printItems();
print("n");
}
function printItems(){
foreach($this->items as $item){
print("n");
while (list($name,$value) = each($item)) {
if(!empty($item[$name])){
$value = htmlspecialchars($value);
printf("<%s>%sn",$name,$value,$name);
}
}
print("n");
}
}
function GetTimeStamp($date)
{
/* 時間格式
YYYY-MM-DD
YYYY-MM-DD HH:mm:ss
*/
if (strlen($DATE) == 10) {
$time = mktime(0,0,0,(int)substr($date,5,2),(int)substr($date,8,2),(int)substr($date,0,4));
} else {
$time = mktime((int)substr($date,11,2),(int)substr($date,14,2),
(int)substr($date,17,2),(int)substr($date,5,2),(int)substr($date,8,2),(int)substr ($date,0,4));
}
return $time;
}
}
?>
3.請用文字編輯器,或是Dreamweaver新建一個PHP的檔案,貼入以下的程式碼並命檔名為RSSTest.php存放在C:MYPHPVertrigoServ_htdocsPHPRSS 檔案夾裡。
mb_internal_encoding("UTF-8"); //輸出編碼設定
require "RSSWriter.class.php"; //引入該類別檔
$rss = new RSSWriter("爪哇豆的秘密(JAVA)","http://www.ihelpers.co.kr","小池");
$rss->setLanguage("utf-8"); //設定編碼
$rss->setLastBuildDate("2006-3-8"); //設定最後修正日期
$rss->setWebMaster("小池"); //設定webMaster
$item = array(
"title" => "爪哇豆的秘密(JAVA)",
"link" => "http://blog.xuite.net/jameschih/java",
"description" => "提供JAVA相關資訊"
);
$rss->addItem($item);
$item = array(
"title" => "織夢線上",
"link" => "http://www.dreamweaver.com.tw/index.asp",
"description" => "提供Dreamweaver資訊"
);
$rss->addItem($item);
$rss->println();
?>
4.顯示檔案存放處如下圖所示:
5.開啟IE並執行如下圖所示:
6.開啟能夠讀取RSS2.0的軟體,在這裡我所使用的是"FeedDemon"
7.執行結果如下圖所示:
說明:
透過引用RSSWriter.class.php類別檔來製作RSS2.0的XML檔案,十分方便好用。
在製作時請注意到檔案編碼的問題,請在PHP檔存檔時存成UTF-8的格式,還有再輸出RSS的檔案(RSSTest.php)請記得加入 mb_internal_encoding("UTF-8"); //輸出編碼設定 才會輸出正常。
關於從資料庫取資料產生RSS檔,請大家依樣畫葫蘆自行製做,相信應該是不會有所困難。
由於我沒有網路空間,若是你需要該範例檔請來信索取或是可以提供空間給我存放。謝謝!!
以上教學,如要引用請來信告知註明出處。謝謝!!
原文出處:
http://blog.xuite.net/jameschih/java/5411973