使用MacpieRSS在你的站点上添加RSS feed

今天在网上看到这样一个资料。很感兴趣。准备先记下来慢慢研究。

============================================

聚合其他站点的内容是在你的站点上获得最新内容的好办法。当用户访问你的站点的时候他们能高看到聚合的内容以及发布者的链接。如果他们对其中的某项内容感兴趣他们能够通过链接访问原始地址。你可以使用RSS协议和MagpieRSS格式的一点PHP代码在你的站点上添加聚合内容。方法如下:

MagpieRSS是一个PHP编写的RSS解析器。它支持RSS0.9和1.0,以及部分RSS2.0.MagpieRSS是一个简单的面向对象的末端,它包含了自动的解析RSS缓存来降低外部Web站点的负载。为了在你的Web站点上使用MagpieRSS,你需要带XML支持的PHP4.2.0,或者libxml2支持的PHP5。
下载MagpieRSS。解压得到四个主要文件(rss_fetch.inc, rss_parser.inc, rss_cache.inc, 和 rss_utils.inc)以及extlib目录,把他们拷贝到你的Web服务器上根目录中的magpierss目录下。
接下来,决定你要在你的站点上聚合的内容。如果你希望这些内容在你的起始页面显示,你需要修改index.php文件。如果你只有index.html文件,那么把它重命名为index.php然后加入一下PHP代码。
编辑这个文件,在顶部加入下面的内容:

<?php
require_once('magpierss/rss_fetch.inc');
?>

为了获得并解析RSS,需要在你的页面里调用fetch_rss()方法。

<?php
$rss = fetch_rss("http://www.newsforge.com/index.rss");
?>

把newsforge.com换成你想要聚合的URL。
这个函数返回一个数组($rss),这个数组包含聚合条目和发布者信息的数组,例如发布者的名字(保存在$rss->channel[’title’])和可选的发布者描述(例如,”The Online Newspaper for Linux and Open Source”)可以在$rss->channel[’description’]中得到。$rss->channel[’link’]中包含发布者的初始地址。
聚合的条目可以通过访问$rss->items得到。可以通过简单的循环一次列出所有条目:
foreach ($rss->items as $item)
{ // Your code here
}
每个条目包含一个标题,链接地址和描述。$item[’title’]包含文章或故事的标题,$item[’link’]是初始的地址,$item[’description’]是故事的描述--通常是介绍段落或者摘要。
用下面的代码可以显示聚合条目的简单列表:

<?php
require_once('magpierss/rss_fetch.inc');
$rss = fetch_rss('http://www.newsforge.com/index.rss');
 
echo "<a href=".$rss->channel['link']."><B>".$rss->channel[ 'title']."</B></a>";
foreach ($rss->items as $item) {
$href = $item['link'];
$title = $item['title'];
$desc = $item['description'];
echo "<P><a href=$href>$title</a><BR>";
if($desc)
echo $desc;
}
?>

当然,输出是简单的HTML,但是你应该可以从这里扩展代码来适应你的站点的样式和设计。

长度

在RSS的0.91版本中指定的标题长度限制在100个字符,描述为500个字符。然而在RSS0.92或者更新的版本中没有限制。这可能会给你的Web站点带来一个问题。重要的是保持你的站点的视觉和感觉。如果聚合条目显示的太自由,你的站点可能开始看着很散乱。想象一下在侧边栏中用上面类似的代码显示新闻条目。如果一个特殊条目的描述有几千个字符那么长,会发生什么呢?或者如果有50个条目要聚合会怎么样?
长度检验是把聚合条目放到你的站点上的一个重要方面。为了限制条目显示的数目,最简单的办法就是把结果数组分割成更小的块而。调用fetch_rss()之后,在其他任何处理之前,添加如下代码:
$items = array_slice($rss->items, 0, 10);
它会把数组缩减到只有前10条。现在可以放心的使用foreach循环。
检查描述的长度使用strlen()函数:
if (strlen($desc) >= 80)
{
$desc = substr($desc,0,79).”…”;
}
这里描述被缩减到少于80个字符,在末尾使用……表示还有更多的内容。如果你已经缩减了描述你可能会把链接指定到整个聚合文本而不是指定到初始地址。那将使用户停留在你的站点的时间更长。然后全部聚合条目再包含初始地址的链接。为了实现这个,你需要一个程序,例如叫做readmore.php,它使用MagpieRSS来在网页上显示全部文本作为主要条目同时包括你的正常导航,侧边栏以及广告。readmore.php的参数是RSS feed的URL和你希望显示的项目数。要注意的是有些描述包含HTML作为普通文本。轻易的截断字符串会导致字符串被截掉半个标签。需要的是智能的截断但是那超出了本文讨论的范围。粗糙的解决方案是使用PHP的函数strip_tags()他将从字符串中删掉HTML标记。用readmore.php显示的条目的完整内容可以保留完整的标记。

缓存

为了提高你的Web站点的速度和给发布者的web服务器节省资源,建立缓存是非常重要的。MacpieRSS已经内建了自动的缓存。通过缓存,MacpieRSS只去获取和解析缓存过期的RSS feeds。
把下面的代码加入到你的程序里,以使缓存生效:
define(’MAGPIE_CACHE_DIR’, ‘/tmp/mysite_magpie_cache’);
define(’MAGPIE_CACHE_ON’, 1);

MacpieRSS默认一小时缓存一次,可以通过下面的代码来修改:
define(’MAGPIE_CACHE_AGE’, 1800);
这里的1800是缓存对象的秒数(例如,30分钟,60*30)。
结论
MacpieRSS使在你的Web站点上添加聚合内容变得容易,只要很少的时间你就可以让你的站点变得更好,记住“内容至上”。

    关键词: ,

    One Response to “使用MacpieRSS在你的站点上添加RSS feed”

    1. jack says:

      讲得很好!支持~~~
      博主能加你为好友吗?
      继续探讨这方面的问题
      QQ:253728950

    Leave a Reply

    Twitter | 新浪微博 | Buzz | 豆瓣 | Flickr | Tumblr | Google+