[教學]快快樂樂學PHP5-RSS2.0建置介紹

好友池大師的舊文章,提供給有需要的朋友參考。

前些日子在"織夢線上"有人問到以下問題:

如何讓我的網站能夠支援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

留言

這個網誌中的熱門文章

用PHP寄MAIL的方法

ImageMagick應用大全(一)

php安裝openssl的方法