PHP商城RSS訂閱源類開發詳解(原創)

1、RSS簡介  
      RSS(ReallySimple Syndication-簡易供稿),是一種網頁內容聯合格式(web contentsydication format)。RSS是XML的一種。全部的RSS文檔都遵循XML 1.0規範,該規範發佈在W3C網站上。
 
      在一個RSS文檔的開頭是一個<rss>節點和一個規定的屬性version,該屬性規定了該文檔將以RSS的哪一個版本表示。若是該文檔以這個規範來表示,那麼它的version屬性就必須等於2.0。
      在<rss>節點的下一級是一個獨立的<channel>節點,該節點包含關於channel的信息和內容。
      內容信息使用< item>節點表示,< item>的子節點有title、link、author、pubDate、description。 
 
        rss:每一個RSSFeed,都有並且只能有一個rss標籤,做爲頂層元素
        channel:在RSS標籤下,必須有且只能有一個channel標籤
        item:能夠出現多個item,每一個item,描述一條日誌信息
        title:日誌的標題
        link:日誌的URL訪問地址
        author:日誌的做者
        pubDate:日誌的發佈日期
        description:日誌的內容 
注:具體的語法內容,能夠參考  http://wenku.baidu.com/view/bcb222eeaeaad1f346933f64.html



2、RSS格式參考模板php

 1 <?xml version="1.0" encoding="utf-8" ?> 
 2 
 3 <rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
 4 
 5         <channel>
 6 
 7                     <title>標題></title>
 8 
 9                     <link>連接地址</link>
10 
11                     <description>描述</description>
12 
13                     <language>描述語言</language>
14 
15                     <copyright>版本</copyright>
16 
17                     <pubDate>21 Oct 2008 01:43:15 GMT</pubDate>
18 
19                     < item>
20 
21                                 <title>日誌的標題1</title>
22 
23                                 <link>日誌的URL訪問地址</link>
24 
25                                 <author>日誌的做者</author>
26 
27                                 <pubDate>日誌的發佈日期</pubDate>
28 
29                                 <description>日誌的內容</description>
30 
31                     </item>        
32 
33                     < item>
34 
35                                 <title>日誌的標題2</title>
36 
37                                 <link>日誌的URL訪問地址</link>
38 
39                                 <author>日誌的做者</author>
40 
41                                  <pubDate>日誌的發佈日期</pubDate>
42 
43                                 <description>日誌的內容</description>
44 
45                     </item>
46 
47         </channel>
48 
49 </rss>

 

 3、RSS錯誤分析html

        有時,咱們的RSS代碼寫的是正確的,即單獨運行時有用,但是一旦與PHP結合,便會報如下錯誤,這個問題困擾了我一個上午:
  圖片
據我經驗瞭解,因爲咱們編寫代碼的習慣,咱們寫PHP程序是,常常會使用穩妥的辦法,使用echo xxx,來調試代碼,這既是此處報錯的緣由,多是由於RSS的代碼前面不得有任何的輸出(echo xxx);    
同時,php文件的<?php 前不得有空行或者輸出內容
                                                    ------此處僅表明本人我的 根據經驗總結的思想,還望前輩們不吝賜教

4、PHP商城 RS訂閱源實戰

(1)首先咱們編寫一個RS模板  template.xml,以下:mysql

<?xml version="1.0" encoding="utf-8"?>web

<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/"></rss>sql

圖片


(2):編寫好模板,咱們就能夠正式開發RS訂閱源類了   feed_class.php,代碼以下:數據庫

 
 

(3)好了,此時,咱們完成了 RSS模板 和 RSS類的開發,開啓Apache 服務器,在瀏覽器上運行咱們的feed_class.php,結果圖以下:
正常的結果以下: 
 
圖片


在未安裝RSS閱讀器上,顯示的是xml文件代碼,結果去下:好比說GOOGLE的Chrome(解決的辦法很簡單,安裝RSS閱讀器插件便可)

圖片編程

 1 <?php
 2  
 3 //鏈接數據庫,動態生成RSS feed
 4 //鏈接數據庫,取得最新的10條商品,輸出XML feed
 5  
 6 class feed_class{
 7  
 8         public $title = '';                 //channel的title
 9         public $link  = '';                //channel的link
10         public $description = '';     //channel的description
11         public $itemlist = array();
12  
13         public $template = '';        //xml模板
14         protected $dom = null;
15         protected $rss = null;
16         protected $channel = null;
17  
18         public function __construct(){
19             $this->dom = new DomDocument("1.0","utf-8");
20             $this->dom->load('./template.xml');
21             $this->dom->formatOutput = true;
22             $this->rss = $this->dom->getElementsByTagName('rss')->item(0);
23         }
24  
25     //調用createItem,把全部的item節點生成,再輸出
26         public function display(){
27             $this->createChannel();
28             $this->addItem($this->itemlist);
29             header('content-type: text/xml');
30             echo $this->dom->saveXML();
31             //$this->dom->save('01.xml');        //如需將代碼保存,則打開此語句
32         }
33     
34         //封裝createChannel方法,用於建立RSS惟一且必須的channel節點
35         protected function createChannel(){
36             $channel = $this->dom->createElement('channel');
37             $channel->appendChild($this->createEle('title',$this->title));
38             $channel->appendChild($this->createEle('link',$this->link));
39             $channel->appendChild($this->createEle('description',$this->description));
40             $this->channel = $channel;
41             $this->rss->appendChild($channel);
42         }
43  
44         //封裝addItem方法,把全部的商品增長到RSS中去
45         //$list是商品列表,是二維數組,每一行都是一個商品
46         public function addItem($list){
47             foreach($list as $goods){
48                    $this->channel->appendChild($this->createItem($goods));
49             }
50         }
51  
52         //封裝一個類用於造Item
53         protected function createItem($arr){
54             $item = $this->dom->createElement('item');
55             foreach($arr as $k=>$v){
56                 $item->appendChild($this->createEle($k,$v));
57             }
58             return $item;
59         }
60  
61         //快速建立節點  相似:<name>lover雪</name>
62         public function createEle($name,$value){
63             $ele = $this->dom->createElement($name);
64             $text = $this->dom->createTextNode($value);
65             $ele->appendChild($text);
66  
67             return $ele;
68         }   
69  
70     
71 }
72 //鏈接數據庫
73 $conn = mysql_connect('localhost','root','');
74  
75  
76 mysql_query('set names utf8',$conn);
77 mysql_query('use boolshop1');
78 
79 
80  
81 $sql = "select goods_name as title,goods_brief as description from goods order by add_time asc limit 10";
82 $rs = mysql_query($sql,$conn);
83  
84  
85 $list = array();
86 while($row = mysql_fetch_assoc($rs)){
87     $list[] = $row;
88 }
89  
90 $feed1 = new feed_class();
91 $feed1->title = "布爾商城";
92 $feed1->link = "http://127.0.0.1/boolshop/";
93 $feed1->description = "這個一個好商城";
94 $feed1->itemlist = $list;
95  
96 $feed1->display();
97  
98 ?>

 


5、總結

    RSS 決不是一個完美的格式,可是它如今已經很是流行,並獲得普遍的支持。要成爲一個固定的規範,RSS須要很長的一段時間。
    編寫RSS的xml文件時,因爲瀏覽器的嚴格解析模式,一旦出現一點點錯誤,都不會顯示任何效果,此時須要足夠的耐心去找到錯誤,而且修正它,
    須特別注意,在RSS代碼前不得有任何的文字或者其餘信息輸出,一旦把這點忘記了,你纔會明白,這個錯誤查找起來是有多麼痛苦(由於本人就是犯了這個錯誤,花了一個上午不斷的在調試,過程很痛苦,由於代碼根本就沒錯,也就是說根本就無法查錯,有點相似感慨是接觸編程時的邏輯錯誤,無法查)。





數組

相關文章
相關標籤/搜索