创建自定义RSS馈送汇集器

发表于:2007-07-01来源:作者:点击数: 标签:
丰富站点摘要馈送,它的缩写RSS更有名,它是XML如何对信息消费的方式产生主要影响的伟大范例。这种 XML术语是用于总结信息的一种流行格式,这种信息即:典型地、但不是专门面向新闻的数据,它包括标题、摘要、作者和发布日期。建立和分配RSS馈送变得日益流行
丰富站点摘要馈送,它的缩写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

原文转自:http://www.ltesting.net