明道洋 李斯納
摘要:RSS是一種常見的Web 2.0應(yīng)用,在PHP中比較常用的RSS解析器為MagpieRSS。該文主要探討了RSS的語法規(guī)則,MAG PIERSS解析機(jī)制、解析過程等方面的內(nèi)容。
關(guān)鍵詞:PHP;RSS;MAGPIERSS;WEB 2.0
中圖分類號:TP393文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)21-5072-02
RSS(簡易信息聚合,也叫聚合內(nèi)容)是一種描述和同步網(wǎng)站內(nèi)容的格式,簡單地說就是用于在網(wǎng)站間分享信息。RSS目前廣泛用于網(wǎng)上新聞?lì)l道、blog及wiki等。使用RSS訂閱能更快地獲取信息,網(wǎng)站提供RSS輸出,有利于讓用戶獲取網(wǎng)站內(nèi)容的最新更新。網(wǎng)絡(luò)用戶可以在客戶端借助于支持RSS的聚合工具軟件,在不打開網(wǎng)站內(nèi)容頁面的情況下閱讀支持RSS輸出的網(wǎng)站內(nèi)容。[1]
<b> 1 RSS語法</b>
RSS文檔使用一種簡單的自我描述的語法,下面的代碼段( example.xml )構(gòu)成了一個(gè)簡單的RSS文檔:
<xml version="1.0" encoding="ISO-8859-1" >
<rss version="2.0">
<channel>
<title>Home Page</title>
<link>http://www.bsnc.cn</link>
<description>A University Located IN Yunnan Province</description>
<item>
<title>The Institute of Physics </title>
<link>http:// www.bsnc.cn /rss</link>
<description>New RSS FROM BSNC</description>
</item>
</channel>
</rss>
代碼清單中的第一行:XML聲明,用于定義文檔中使用的XML版本和字符編碼。該例子遵守XML 1.0規(guī)范,并使用ISO-8859-1 (Latin-1/West European)字符集。下一行是標(biāo)識此文檔是一個(gè)RSS文檔的RSS聲明(這里是RSS version 2.0)。下一行含有<channel>元素,此元素用于描述RSS feed。
<channel>元素有三個(gè)必需的子元素:
<title> -定義頻道的標(biāo)題。(比如Home Page)
<link> -定義到達(dá)頻道的超鏈接。(比如http://www.bsnc.cn)
<description> -描述此頻道(A University Located In Yunnan Province)
每個(gè)<channel>元素可擁有一個(gè)或多個(gè)<item>元素。每個(gè)<item>元素可定義RSS feed中的一篇文章或"story"。<item>元素?fù)碛腥齻€(gè)必需的子元素:
<title> -定義項(xiàng)目的標(biāo)題。(比如The Institute of Physics)
<link> -定義到達(dá)項(xiàng)目的超鏈接。(比如http:// www.bsnc.cn /rss)<description> -描述此項(xiàng)目(比如New RSS FROM BSNC)
<b> 2如何在PHP中使用RSS</b>
在很多PHP語言編寫的RSS工具中,MagpieRSS是一個(gè)很突出的RSS解析器。MagpieRSS(簡稱Magpie)是由Kellan Elliott-Mc Crea使用PHP編寫的一個(gè)強(qiáng)大的RSS解析器。Magpie為開發(fā)人員提供了一種非常簡潔實(shí)用的方式來獲取和顯示RSS提要,其主要特點(diǎn)如下:
簡單易用:通過幾行簡單的代碼就能夠獲取和解析RSS提要,并轉(zhuǎn)換為網(wǎng)絡(luò)用戶容易閱讀的格式。
高度的兼容性:Magpie支持各種RSS版本中的幾乎所有標(biāo)簽集合以及開發(fā)人員自己定義的標(biāo)簽,只要格式正確,Magpie就能成功解析。
帶寬占用率低:默認(rèn)認(rèn)情況下,Magpie將提要內(nèi)容緩存為60分鐘(當(dāng)然我們可以根據(jù)實(shí)際需要修改此值,以適合各種提要的緩存首選項(xiàng)。[2]
2.1安裝Magpie
與大多數(shù)PHP類一樣,Magpie的安裝非常簡單,只需將相關(guān)的文件放在PHP腳本能夠引用的目錄中,安裝步驟如下:
1)從http://magpierss.sourceforge.net/下載Magpie。
2)將包的內(nèi)容解壓至一個(gè)便于從PHP腳本包含的位置。
3)在腳本中包含Magpie類(rss_fetch.inc):
require(magpie/rssfetch.php);
2.2 Magpie如何解析
RSS提供了一種規(guī)范化的方式,基于XML格式封裝網(wǎng)站內(nèi)容,這稱為提要(feed)。Magpie解析提要時(shí),將其放在四個(gè)字段(chan nel、image、items和textinput)的對象中。其中,channel是一個(gè)關(guān)聯(lián)數(shù)組的數(shù)組,其余三個(gè)是關(guān)聯(lián)數(shù)組。我們可以通過以下PHP腳本獲取example.xml提要,使用print_r()語句輸出:
<php
require("magpie/rss_fetch.inc");
$url="http://localhost/example.xml";
$rss=fetch_rss($url);
print_r($rss);
>
2.3如何顯示RSS提要
var STORE_KEY_FeedURL = "gf_FeedURL";
var STORE_KEY_FeedName = "gf_FeedName";
GF_RSS_URL= "http://answers.yahoo.com/rss/catqsid=396546051";
GF_RSS_TITLE = "Yahoo! Answers";
function gf_showRssView()
{document.getElementById("tickerView").style.display = "none";
widget.setPreferenceForKey(GF_RSS_URL, STORE_KEY_FeedURL);
widget.setPreferenceForKey(GF_RSS_TITLE, STORE_KEY_FeedName);
init(); }
把這些文件添加到你的工程,并且將下段代碼插入到你的PHP主文件中。
<style> @import url("RSSReader.css"); </style>
2.4緩存提要[3]
默認(rèn)情況下,magpie緩存60分鐘,這是因?yàn)橐话愕奶嵋惶赡芤恍r(shí)內(nèi)更新超過1次。因此,即使經(jīng)常嘗試獲取相同的提要,比如每5分鐘一次,也不會出現(xiàn)任何更新,直到提要緩存達(dá)到60分鐘為止。但有些提要確實(shí)會在一小時(shí)內(nèi)發(fā)布多次,或者可能用來發(fā)布更緊急的信息。為了完全禁用緩存,可以禁用常量MAGPIE_CACHE_ON,如下:
define ("MAGPIE_CACHE_ON",0)
為修改默認(rèn)的緩存時(shí)間(以秒為單位),可以修改常量MAGPIE_CACHE_AGE,如下:
define("MAGPIE_CACHE_AGE",1800)
最后,可以選擇在獲取失敗時(shí)顯示一個(gè)錯(cuò)誤,而不是顯示緩存的提要,這需要啟用常量MAGPIE_CACHE_FLASH_ONLY: define("MAGPIE_CACHE_FLASH_ONLY",1)
<b> 3結(jié)論</b>
使用RSS訂閱能幫助網(wǎng)絡(luò)用戶更快地獲取信息,有利于讓用戶獲取網(wǎng)站內(nèi)容的最新更新。該文對RSS的語法及PHP環(huán)境下的MagpieRSS解析器的安裝、解析機(jī)制、解析過程等方面進(jìn)行了初步的探討,希望能夠?qū)HP開發(fā)人員有一定的幫助。
參考文獻(xiàn):
[1] RSS百度百科[EB/OL].http://baike.baidu.com/view/1644.htm.
[2] MagpieRSS: RSS for PHP[EB/OL].http://magpierss.sourceforge.net/.
[3] Gilmore W J.PHP與MySQL 5程序設(shè)計(jì)[M].2版.北京:人民郵電出版社,2007.