快快樂樂學PHP5-RSS2.0建置介紹:爪哇豆的秘密(JAVA&RUBY)網頁設計:Xuite日誌
  • 文章分類
  • 最新文章
  • 搜尋文章
  • 關鍵字
  • 最新回應
  • Re:開發JSP輸出EXCEL時,0被刪除的解決方法,by(Hero)於2008-07-17
    Re:快快樂樂學PHP5-RSS2.0建置介紹,by(lifeiskuso)於2008-07-15
    Re:小牛 vs 小羊,by(小池)於2008-07-14
    Re:小牛 vs 小羊,by(身為女兒的淑媛)於2008-07-14
    Re:迷町羽球週末成人特訓班 (六、日皆有開課),by(淑媛)於2008-07-14
    Re:080614夜宿海生館yoho之旅,by(YOGO)於2008-06-19
    Re:使用MSN控制arduino開關家電,by(953904)於2008-05-14
    Re:快快樂樂學PHP5-RSS2.0建置介紹,by(ernest)於2008-05-13
    Re:快快樂樂學PHP5-PHP/Java Bridge(Java與PHP互動),by(小小)於2008-05-07
    Re:使用MSN控制小玩偶 開燈 關燈 閃燈 ,by(阿珠)於2008-04-29
  • 小池
  • 唯有不斷學習
    不斷分享
    才會不斷進步....

  • 已建立的日誌
  • 最愛連結
  • lookblog
  • 參觀人氣統計
  • SiteSearch
  • Google
    Webblog.xuite.net
  • Googlea
  • 2006-03-08 02:03 快快樂樂學PHP5-RSS2.0建置介紹
  • ?
  • PHP開發
  • 好文轉寄
  • 平均分數:0 顆星    投票人數: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檔,請大家依樣畫葫蘆自行製做,相信應該是不會有所困難。

    由於我沒有網路空間,若是你需要該範例檔請來信索取或是可以提供空間給我存放。謝謝!!
    以上教學,如要引用請來信告知註明出處。謝謝!!



    小池 / Xuite日誌 / 回應(37) / 引用(0) / 好文轉寄
  • 回應