程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 如何使用PHP寫一個RSS訂閱

如何使用PHP寫一個RSS訂閱

編輯:關於PHP編程

RSS 聚合最近非常流行,因此至少對 RSS 及其工作方式有所了解是一名 PHP 開發人員的迫切需要。本文介紹了 RSS 基礎知識、RSS 眾多用途中的一些用途、如何使用 PHP 從數據庫創建 RSS 提要,以及如何使用 XML_RSS 模塊讀取現有 RSS 提要並將其轉換為 HTML。

RSS 聚合是最常見的 TLA(三字母縮寫詞)之一。RSS 作為縮寫詞具有多種含義,但是當前的標准含義是:真正簡單的聚合。這是對這一極為常見、極為有用的標准的最新解釋。

回想 Internet 早期,一個稱為 Pointcast 的軟件將數據 推送 到用戶計算機上的屏幕保護應用程序上,來提供各種新聞更新。最終,浏覽器開發商(例如 Netscape 和 Microsoft)創建了類似這種非常流行的服務的東西。Netscape 開發了接受程度最高的變體,此變體後來被發布到 Internet 開發環境中,並最終發展成了現在的 RSS。

RSS 將最近更新的信息分發給許多接收者,非常類似廣播系統。如果您擁有大量的用戶,那麼 RSS 提要就像燈塔一樣吸引您的用戶回來查看更新。因為 RSS 提供了一種急需的維持用戶注意力的方法,所以 RSS 越來越流行並為越來越多的內容提供者所使用就沒什麼好奇怪的了。

此圖標是表示一個站點針對內容更新提供 RSS 服務的標准圖標。圖標中的曲線代表無線電波,象征著 RSS 提要的廣播本質。

相當多的應用程序(其中許多是免費的)能夠閱讀 RSS 提要,其中許多允許用戶聚合提要。聚合特性甚至允許用戶進一步改進所收到內容的數量和性質。每種閱讀器都擁有不同的特性,旨在幫助管理來自 Internet 的難以置信的信息量。

Mozilla 公司的 Thunderbird 和 Firefox、Microsoft 公司的 Internet Explorer 7 和即將推出的 Office 版本以及許多其他產品是最接近您的搜索引擎的一些例子。在這麼多種獲取和閱讀提要的方法中,您應該可以找到適合您的方法。當然,除非您是一位眼光挑剔的軟件開發人員,希望編寫您自己的程序!本文馬上就要對此進行介紹!

如何使用 RSS

您的站點包含您希望公布給大眾的內容,這是您將內容發布到 Internet 的首要原因。如果很多用戶知道您的站點和內容,他們會每天回來查看更新嗎?恐怕不會。在您經常訪問的站點中,您會每天訪問它們來檢查更新嗎?恐怕不會。這就是 RSS 產生的原因。

對於您的用戶來說,RSS 可能是一個巨大的獲益,當他們認為您的站點上列出的觀點或新聞有價值時尤其如此。用戶無需頻繁返回您的站點,即可准確了解您進行的更新或添加的內容,從而使用戶能夠節省時間和精力,同時也不會錯過任何更新!

如果您整合 RSS 提要來支持您自己站點的內容聚合,那麼生成內容不是問題。如果您從提要中拉出數據並將其包括在您的站點中,那麼只需很少的時間投資就能為您的站點添加大量的內容。

我個人喜歡使用 RSS 來收集來自不同站點(例如 Craigslist (www.craigslist.org))的經過過濾的結果的提要。我使用的一個小技巧是將其用於購買二手電子產品。您可以設置一個站點搜索,然後 RSS 結果頁面。如果您設置了一個搜索某個價格范圍內的照相機的提要,那麼當有人發布在您定的價格范圍內的照相機銷售信息時,您就會在您的 RSS 提要中看到它!如果您想成為第一個競價者,這會為您提供巨大的優勢!

RSS 2.0 標准格式

RSS 標准定義和包含提要的內容。這些提要可能來自任何定義為 Internet 文檔的數據源,實際上是由鏈接清單及其描述構成的。

請查看下面 RSS 格式,它使用了一個來自 NASA "Liftoff News" 提要的示例文檔。

<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Liftoff News</title>
    <link>http://liftoff.msfc.nasa.gov/</link>
    <description>Liftoff to Space Exploration.</description>
    <language>en-us</language>
    <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
    <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Weblog Editor 2.0</generator>
    <managingEditor>[email protected]</managingEditor>
    <webMaster>[email protected]</webMaster>
    <item>
      <title>Star City</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
      <description>How do Americans get ready to work with Russians aboard the
        International Space Station? They take a crash course in culture, language
        and protocol at Russia's Star City.</description>
      <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
    </item>
    
    <item>
      <title>Space Exploration</title>
      <link>http://liftoff.msfc.nasa.gov/</link>
      <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada
        will experience a partial eclipse of the Sun on Saturday, May 31st.</description>
      <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
    </item>
    
    <item>
      <title>The Engine That Does More</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>
      <description>Before man travels to Mars, NASA hopes to design new engines
        that will let us fly through the Solar System more quickly.  The proposed
        VASIMR engine would do that.</description>
      <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>
    </item>
    
    <item>
      <title>Astronauts' Dirty Laundry</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>
      <description>Compared to earlier spacecraft, the International Space
        Station has many luxuries, but laundry facilities are not one of them.
        Instead, astronauts have other options.</description>
      <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>
    </item>
  </channel>
</rss>

XML 格式的文檔的第一個子對象是 的定義。通道就是提要自身及其相關信息。許多 RSS 提要具有一個通道對象,但是如果您希望使用任意過濾器分離提要,您就可以使用多個通道。通道對象需要 title、link 和 description 對象。它們定義了提要的基本描述信息。可選對象是:language, copyright、managingEditor, webMaster、pubDate, lastBuildDate、category, generator、docs、cloud、ttl、image、rating、textInput、skipHours 和 skipDays。

通道能夠包含的項目數量不受限制。ITEM 元素的全部元素都是可選的,然而,至少需要一個標題或描述來驗證元素。這些元素是:title、link、description、author、category、comments、enclosure、guide、pubDate和source。

在什麼地方使用 PHP?

本文假設您已經具有一些使用 PHP 的經驗,並能夠使用函數來傳遞變量並返回結果。PHP 擁有許多能夠迅速處理應用程序內外的 XML 的函數。

首先您會希望從本地存儲的數據源(一個內容管理系統、博客或任何符合 Internet 文檔格式的內容)獲取信息,並將其作為提要發布給您的用戶。您需要獲取此數據、將其格式化為 RSS 對象,然後將其提供給需要它的請求。

如果您的站點的某些部分需要額外的內容,您無需滿世界地為您的站點尋找額外的內容文檔,而是可以利用已經准備好的大量 RSS 提要的優勢。您可使用 XML_RSS 來為您的站點獲取和處理這些提要。

XML_RSS() 是一個 PEAR 軟件包,用於幫助您更輕松地完成更復雜的任務 —— 解釋 XML RSS 文件。PEAR 是 PHP 函數的開源庫,它可免費使用並且其開發工作仍在繼續。您可能已經在安裝 PHP 時安裝了 PEAR,但是您可能仍需為本文安裝它。XML_RSS() 僅僅是一個函數,它在已知 RSS 提要的位置時,將此提要的 XML 加載到一個陣列,從而為其在您的 PHP 應用程序中的使用做好准備。此陣列的元素將具有根據被讀取的 RSS 文件的元素和屬性命名的鍵。

提取數據

既然您了解了什麼是 RSS 數據格式,您就可以查看您希望發布的數據,並將其轉換為 RSS 格式。幸好 PHP 擁有一些功能強大的 RSS 和 XML 處理特性,這些特性可加速您的開發。和許多通用的 Web 標准一樣,PHP 擁有許多功能強大的函數,可在此應用程序中使用它們。

在本文中,您將使用 "" 將數據從數據庫中拉出,並將其格式化為 RSS 提要。您將對它進行設置,以便無論何時調用此 RSS 提要,它都能查找您的數據集中新增的內容,並為請求者返回新的 RSS。

提要可來自您的站點中的任何數據源,但是最終您需要確保其中包含足夠的數據,以便接收 RSS 提要的人能夠使用此數據。至少需要 URL 名稱和描述。您的站點上發布的任何數據均可被轉換為提要。

您將使用 PHP 來連接 Web 應用程序數據庫、拉出更新的信息,並將其格式化為 XML RSS 文檔。

假設您選擇了一個數據庫,您用正常方式創建一個連接,並生成一個頁面以適合用戶閱讀的方式顯示 XML 的布局。

既然您已經在您自己的代碼中很好地格式化了這些數據,您就需要確保正確地發布這些數據,以便當用戶將您的 URL 輸入閱讀器時,能夠獲得他們需要的 XML RSS 提要。

完整的 RSS.php

<?php
$database =  "nameofthedatabase";
$dbconnect = mysql_pconnect(localhost, dbuser, dbpassword);
mysql_select_db($database, $dbconnect);
$query = "select link, headline, description from `headlines` limit 15";
$result = mysql_query($query, $dbconnect);
while ($line = mysql_fetch_assoc($result))
        {
            $return[] = $line;
        }
$now = date("D, d M Y H:i:s T");
$output = "<?xml version="1.0"?>
            <rss version="2.0">
                <channel>
                    <title>Our Demo RSS</title>
                    <link>http://www.tracypeterson.com/RSS/RSS.php</link>
                    <description>A Test RSS</description>
                    <language>en-us</language>
                    <pubDate>$now</pubDate>
                    <lastBuildDate>$now</lastBuildDate>
                    <docs>http://someurl.com</docs>
                    <managingEditor>[email protected]</managingEditor>
                    <webMaster>[email protected]</webMaster>
            ";
            
foreach ($return as $line)
{
    $output .= "<item><title>".htmlentities($line['headline'])."</title>
                    <link>".htmlentities($line['link'])."</link>
                    
<description>".htmlentities(strip_tags($line['description']))."</description>
                </item>";
}
$output .= "</channel></rss>";
echo $output;
?>

因此,讓我們逐步實現此目的。首先,您設置一個到本地數據庫的數據庫連接對象。在此數據庫中有一個具有包含標題、鏈接和描述字段的記錄的表,您將請求把這些內容放入您的 XML 響應中。您使用 MYSQL_QUERY() 對您的表執行 SQL 查詢,然後您使用 WHILE 重新格式化結果來預排將得到的對象,並將數據重新格式化為新的簡單陣列。

當新的陣列准備好之後,您就可以開始使用 $output 變量構建 XML 文件,通過為每個返回的響應遍歷一次 $line 陣列的方式附加新的元素。這不應該占用太多的時間,因為在您的 SQL 語句中,您將響應限制設為 15。為了將此代碼片段用作起始構建塊,您需要替換虛擬鏈接、數據庫名稱和登錄信息來反映您自己的環境。

此腳本被執行之後,您會得到一個非常干淨的 RSS 文件輸出,類似於清單 3。

RSS.php 輸出

<?xml version="1.0"?>
    <rss version="0.97">
        <channel>
            <title>Our Demo RSS</title>
            <link>http://www.tracypeterson.com/RSS/RSS.php</link>
            <description>A Test RSS</description>
            <language>en-us</language>
            <pubDate>Mon, 13 Nov 2006 22:46:06 PST</pubDate>
            <lastBuildDate>Mon, 13 Nov 2006 22:46:06 PST</lastBuildDate>
            <docs>http://someurl.com</docs>
            <managingEditor>[email protected]</managingEditor>
            <webMaster>[email protected]</webMaster>
    <item rdf:about="http://www.tracypeterson.com/">
            <title>This is Tracy's Web Page!</title>
            <link>http://www.tracypeterson.com/</link>
            <description>This is a demonstration of how to get PHP to work for 
your RSS feed.</description>
        </item><item rdf:about="http://www.tracypeterson.com">
            <title>This is Tracy's site again!</title>
            <link>http://www.tracypeterson.com</link>
            <description>Again, this is a demonstration of the power of PHP 
coupled with RSS.</description>
        </item></channel></rss> 

現在任何人都可以通過輸入到 RSS.php 的 URL,加載包含您的全部更新的新 RSS 文件了!

導入數據

您將使用 XML_RSS() 函數將 RSS 提要導入到 PHP 腳本中,以便使其像任何陣列一樣准備就緒。就像對數據庫的查詢一樣,您將擁有一個准備好在需要時即可使用的陣列。

在本案例中,您將連接到 RSS.php 並加載一個副本,然後在無序清單中顯示它。

showfeed.php

<?php
require_once "XML/RSS.php";
$rss =& new XML_RSS("http://www.tracypeterson.com/RSS/RSS.php");
$rss->parse();
echo "<h1>Headlines from <a
href="http://www.tracypeterson.com/RSS/RSS.php">Tracy 
        Peterson's Site</a></h1>n"; echo "<ul>n";
foreach ($rss->getItems() as $item) {
  echo "<li><a href="" . $item['link'] . "">" . $item['title'] . 
"</a></li>n";
}
echo "</ul>n";
?>

此示例直接來自 PEAR 手冊,我使用它是因為它非常簡練。讓我們逐行查看它來看看它是否僅使用了 XML_RSS() 類、構造器和 parse()提供的幾個方法。解析操作僅將輸出作為我之前提到的陣列呈現。

首先,您使用 require_once() 函數來從 PEAR 安裝中加載 RSS.php 文件。如果正確設置了 PEAR 並安裝了 XML_RSS ,那麼它將正確地找到此引用文件,然後 XML_RSS 對象就准備好供您使用了。接下來,您創建一個名為 $rss 的新對象,此對象是將提要的 URL 傳遞到您的 XML_RSS 構造器的結果。

您僅使用 parse() 方法來返回 RSS 提要中的值。第一個 echo 行開始設置用於使 RSS 提要能夠被用戶閱讀的基本 HTML。在本案例中,您聲明此無序清單是來自我的站點的標題的清單!

foreach() 語句通過將 getItems() 方法用作新的陣列 $items,從解析的提要中獲取每個項目元素。每個陣列元素根據包含它們的實際 XML 標簽命名。在本案例中,您僅使用了鏈接和標題,一會您將添加對它們的描述。每處理一次 foreach 循環,就會移動到下一個元素,直到整個 RSS 提要以此方式全部顯示出來。

現在,將描述添加到每個顯示的結果中。

下面代碼行添加到 foreach() 循環中。

foreach ($rss->getItems() as $item) {
  echo "
  • " . $item['title'] . "

  • "; echo $item['description'] . "

    n"; }

    您只需向無序清單中添加一個換行符和描述行。

    結束語

    總的說來,Internet 才剛剛開始意識到它擁有的難以置信的潛力。通過 RSS 提供的提高了的可訪問性,您現在能夠簡化使您的用戶保持同步的過程。您能夠及時將更新通知到用戶,而無需用戶花費時間來檢查您是否添加了新信息。

    您剛剛探索了 RSS 格式的標准,以及如何創建提要、接收提要並將其轉換為可用的 HTML。現在您已經准備好在更大型的應用程序中使用這些技能了。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved