創建自定義RSS饋送匯集器
發表時間:2023-08-20 來源:明輝站整理相關軟件相關文章人氣:
[摘要]豐富站點摘要饋送,它的縮寫RSS更有名,它是XML如何對信息消費的方式產生主要影響的偉大范例。這種 XML術語是用于總結信息的一種流行格式,這種信息即:典型地、但不是專門面向新聞的數據,它包括標題、...
豐富站點摘要饋送,它的縮寫RSS更有名,它是XML如何對信息消費的方式產生主要影響的偉大范例。這種 XML術語是用于總結信息的一種流行格式,這種信息即:典型地、但不是專門面向新聞的數據,它包括標題、摘要、作者和發布日期。建立和分配RSS饋送變得日益流行,主要有幾個原因:
·競爭:隨著為客源競爭的Web站點數的持續增長,使他們的信息到達消費者的選擇性方案也總是在考慮之中。
·信息超載:很明顯,消費者發現他們越來越依賴于日益增長的Web 站點。那就是說,從一個站點到另一個站點的線性導航方式一點也沒有削減他們的依賴性。瀏覽站點摘要而且不用常常轉移圖表、廣告和附加的外來資料,是一個投資時間最少、迅速篩選所需信息的重要方法。
·普遍性: 基于XML的格式清楚的劃分了數據和表達式,從而易于轉換以廣泛適應不同媒體分布出口(標準的Web瀏覽器、信元電話、紙張、電子郵件等等)的不同需求。
盡管RSS饋送的使用曾經歸入精英之手,但這些日子他們似乎到處出現。Yahoo!,Christian Science Monitor、CNET News.com、和 The BBC 只是近來提供RSS饋送給他們的讀者的Web站點中的幾個而已。
注意:那些對RSS完全陌生的讀者,請用一分鐘時間裝載Yahoo的技術饋送(http://rss.news.yahoo.com/rss/tech)到你的瀏覽器上。你可以迅速的認出組織良好的數據格式,它將自己借給了表達式的轉換,這是XML術語的典型之處。對于這個論題的完整論述來說,就是在你喜愛的搜索引擎上實現快速搜索;你會找到的指南比你鍵盤操作得到的指南更多。
目錄
Magpie RSS
RSS饋送
MySQL數據庫
PHP 腳本
結論
在本文中,我將闡述如何使用PHP、MySQL 數據庫服務器和 Magpie RSS parser來提供可自定義的RSS饋送服務給你的Web站點用戶。盡管我希望你至少有使用PHP和MySQL 的基本經驗,但對于初學者來說例子應該非常容易,以便于理解。因為你們中的大部分人可能不熟悉Magpie RSS Parser,我會就這個重要的工具提供一些額外的信息。
Magpie RSS
Magpie RSS Parser是在2002年晚期由Kellan Elliott-McCrea創建的,以確保他感知到的東西沒有真正的基于PHP的RSS 匯集解決方案。結果就出現了一個極佳的可行工具,它可提供一群有用特征,其中包括:
·面向對象的設計:面向對象的、模塊化的代碼允許你毫不費力的將匯集特征集成到以前的應用上。
·極高的可配置性:Magpie的匯集和緩存行為很容易通過一個良好貫穿的配置策略來修改。
·饋送緩存:這個非常酷的特征可以本地緩存RSS饋送(到服務器上),從而保存帶寬并且增強應用的性能
因為它是在GPL license下發布的,所以你不用掏錢,只要你愿意,并且遵守許可證的條款和條件,就可以自由使用這個軟件。它只需要使用XML(expat) 支持編譯的PHP (4.0+)的新版本。.
RSS饋送
讓我們從應用的內容開始討論。你喜歡提供哪種類型的RSS饋送給你的用戶?找到RSS饋送就好像細讀你喜愛的搜索引擎一樣容易:只要輸入"RSS" 和一些其他的選擇主題如"technology," "science,"或者"sports."等等。對于一個偷懶的人來說(編程行業中沒有不好的特性),通過Web. Feedster (http://www.feedster.com/)上彈出的許多RSS匯集器瀏覽也是我個人喜好之一。為了這篇指南,我將使用下列饋送:
·Yahoo! Top Stories (http://rss.news.yahoo.com/rss/topstories)
·MSDN, Recent Technical Articles (http://msdn.microsoft.com/rss.xml)
·Infoworld Latest News (http://www.infoworld.com/rss/news.rdf)
·PCWorld Latest News (http://rss.pcworld.com/rss/latestnews.rss)
·eWeek Technology News (http://rssnewsapps.ziffdavis.com/tech.xml)
你應該記住:有些RSS發布商需要許可后才允許你將它們的饋送用于商業用途。因此,在安裝之前你永遠要多看幾遍任何使用條款。
請記下饋送位置、標題、和URL,你愿意的話還可以記錄描述。在下一部分,我們將創建收藏這些信息的數據庫表格。
MySQL數據庫
為了實現我們的自定義RSS服務,只需要三個數據庫表格。這部分,我將介紹這三個表格。
rssfeed
第一個表格rssfeed,將存儲RSS饋送信息。為例子的簡單起見,我們只存儲三項:唯一的ID、標題和URL。在更為復雜的應用中,你可能存儲其它細節,如描述、饋送添加到匯集器的日期、連續兩次饋送檢索之間的等待秒數、和其它相關信息。
mysql>CREATE TABLE rssfeed (
>rowID tinyint unsigned not null auto_increment,
>title varchar(150) not null,
>url varchar(150) not null,
>primary key(rowID)
>);
Table 1-1顯示了添加所選擇的RSS饋送之后的表格內容:
user
第二個表格user 存儲關于使用該RSS匯集器的用戶的信息。每一個用戶只能有一個唯一標志,這樣我們才能提供自定義服務;如果這樣,每個用戶可用一個簡單的整數值來標記。在用戶管理他自己首選的饋送并且瀏覽饋送之前需要登錄,這樣他的電子郵件和密碼也會保存下來。為了安全起見,密碼可作為一個由32個字符組成的不可取消的散列表保存。另外,就像rss 表格一樣,在真實的應用中,該用戶表格可變得更加復雜;但是,實現我們匯集機制的必要部分仍可在我們的表格中找到。
mysql>CREATE TABLE user (
>rowID smallint unsigned not null auto_increment,
>email varchar(55) not null,
>pswd varchar(32) not null,
>primary key(rowID)
>);
為了例子的簡單起見,Table 1-2展示了存儲在該表格內的用戶信息示例:
Table 1-2: 用戶信息示例
user_to_rss_feed
第三個表格user_to_rss_feed,將用戶和他們選擇的RSS饋送聯系在一起。這個表格有兩列組成:userid 和rssid。userid 標記用戶;rssid標記RSS 饋送。
mysql>CREATE TABLE user_to_rss_feed (
>userid smallint unsigned not null auto_increment,
>rssid tinyint unsigned not null
>);
Table 1-3在我們的用戶選擇了他們喜愛的饋送之后提供了該表格內容的模擬。
Table 1-3: User/RSS 饋送映射
PHP 腳本
最后一個任務就是創建顯示用戶所選的RSS饋送的腳本。這個腳本的標題為myrss.php,他不可思議的簡單,只包含兩個主要組件:
·Login: 用戶需要登錄才能瀏覽他的自定義的饋送。這可以通過使用一個簡單的表格和一些確認提供的電子郵件地址與密碼的邏輯就可以完成了。
·RSS Aggregation and Delivery: 如果出現有效登錄(或者有效會話;見下一段),我們將使用Magpie RSS Parser 來顯示用戶所選的RSS饋送。
要避免用戶抱怨每次需要RSS "fix,"時都要重復登錄,我使用了PHP的會話期處理特征。一旦成功的登錄,用戶的唯一標志符就作為會話期變量存儲起來,以便于以后的檢索。記住,存儲期限完全取決于你如何配置你的PHP安裝的會話期功能。
Listings 1-1 和1-2為兩個組件都提供了注釋碼。兩個組件都裝配好并可用于瀏覽,瀏覽功能可通過在Listing 1-2結尾部分設置鏈接來實現。
Listing 1-1:登錄組件
// Start or continue a session
session_start();
// Has the user
if (! isset($_SESSION['userid']))
{
if (! isset($_POST['email']))
{
echo "<form action='myrss.php' method='post'>";
echo "Email:<br />";
echo "<input type='text' name='email' size='20'
maxlength='55' value='' /><br />";
echo "Password:<br />";
echo "<input type='password' name='pswd' size='20'
maxlength='20' value='' /><br />";
echo "<input type='submit' value='login'>";
echo "</form>";
} else {
mysql_connect("localhost","aggregator","secret");
mysql_select_db("rssfeeds");
$email = $_POST['email'];
$pswd = md5($_POST['pswd']);
$query = "SELECT rowID, email, pswd FROM user
WHERE email='$email' AND '$pswd'";
$result = mysql_query($query);
if (mysql_numrows($result) != 1)
{
echo "<p>Could not login!</p>";
} else {
list($rowID, $email, $pswd) = mysql_fetch_row($result);
$_SESSION['userid'] = $rowID;
}
mysql_close();
} // end isset[email]
}
Listing 1-2. RSS匯集和呈送組件
if (isset($_SESSION['userid'])) {
require_once("rss_fetch.inc");
mysql_connect("localhost","aggregator","secret");
mysql_select_db("rssfeeds");
$userID = $_SESSION['userid'];
$query = "SELECT rss.title, rss.url
FROM rssfeed AS rss, user_to_rss_feed as userrss
WHERE userrss.userid='$userID'
AND rss.rowID=userrss.rssid";
$result = mysql_query($query);
while(list($title,$url) = mysql_fetch_row($result))
{
$url = "$url";
$rss = fetch_rss( $url );
echo "<strong>" . $rss->channel['title'] . "</strong><p>";
echo "<ul>";
foreach ($rss->items as $item)
{
$href = $item['link'];
$title = $item['title'];
echo "<li><a href=$href>$title</a></li>";
}
echo "</ul>";
}
mysql_close();
}
View the complete script here
Figure 1-1 顯示了登錄表格。
Figure 1-2 描述了請求的RSS饋送的一個典型顯示。
結論
歡迎提問和評論!電子郵件可發至: jason@wjgilmore