容易RSS聚合与MagpieRSS

轻松的RSS联合与MagpieRSS

什么是MagpieRSS?

MagpieRSS,亲切地称为Magpie,是PHP和RSS的Atom解析器。 它允许您在您自己的网站上显示RSS或Atom订阅源网站的最新文章。 这是向您的网站添加新的,新鲜的和相关信息的好方法。 它解析RSS 0.9,RSS 1.0,并且对RSS 2.0以及Atom 0.3有一些支持。

我需要使用Magpie?

为了使用Magpie,您的服务器必须支持PHP版本4.2.0与XML支持,或PHP5与libxml2支持。 之后,设置和使用鹊是一个紧张。

好的,我已经听到了,我在哪里得到它?

您可以点击这里下载来自SourceForge的Magpie。

怎么办?

只需解压缩文件并将以下文件上传到您的服务器: rss_fetch.inc,rss_parser.inc,rss_cache.inc和rss_utils.inc以及名为extlib的整个目录。 您可以将这些文件放在Web服务器根目录中的任何目录中。 我倾向于将其上传到名为rss的目录。

接下来,您需要确定要组合联合内容的位置。 例如,如果您想在www.example.com的索引​​上联合内容,则需要编辑index.html(php)文件。 如果您的文件没有以php结尾,那么您将需要更改它,因为我们将添加php代码。

接下来我们将实际编辑该文件index.php 。 我们需要将以下代码添加到要显示Feed的页面顶部:

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

请注意,您的路径可能会有所不同,具体取决于您命名的目录,以及index.php所在的树中的哪个位置。 要将Feed添加到页面中,还需要添加以下行来获取和解析RSS:

<?php $rss = fetch_rss("http://site.to.syndicate.com/index.rss"); ?>

并将地址替换为您希望显示的Feed的地址。

这将返回一个数组, $ rss ,其中包含联合内容以及有关发布者的一些信息。 返回的其他信息(通常)是存储在$ rss-> channel ['title']中的发布者的名称,存储在$ rss-> channel ['description']的发布者的描述 ,以及一般链接发布者存储在$ rss-> channel ['link']中

可以通过$ rss->项目访问项目,并且可以使用简单的循环来一次横向显示一个项目。 循环的代码是:

foreach ($rss->items as $item)
{ // Code to manipulate the items here
}

每个项目都包含标题,链接和说明。 $ item ['title']包含文章的标题, $ item ['link']是指向原始的链接, $ item ['description']是故事的描述,通常是前几行内容。 可以使用以下代码实现联合内容的基本列表:

<?php require_once('rss/rss_fetch.inc');
$rss = fetch_rss('http://site.to.syndicate.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;
}?>

这是非常基本的,但您应该可以自定义它以满足您的需要。

一般问题和解决方案

联合内容对我的网站来说太长了。

如果您合并的内容太长,或者合并太多的项目,并开始使您的网站看起来很有趣,您可以简单地添加以下行来设置显示的条目数量并设置描述的长度。

$items = array_slice($rss->items, 0, 5);

此行仅返回Feed的一个子集,在这种情况下,仅返回前5个条目。 要缩短描述,您将使用以下行:

if (strlen($desc) >= 100)
{
$desc = substr($desc,0,99)."...";
}

这样做是检查描述的字符串长度是否长于100个字符,如果是,则会显示第一个99和...,然后让读者知道它继续。

我想启用缓存feed以减少带宽并加快加载。 这可能吗?

你打赌! Magpie默认启用缓存,但您可能需要更改其缓存的目录,并使服务器运行的用户可以写入它。 它尝试写入脚本调用的工作目录。 例如,如果将Feed添加到主页,脚本将尝试在服务器根目录中创建缓存目录。 以下行启用缓存并将其缓存的目录设置为:

define('MAGPIE_CACHE_DIR', '/tmp/magpie_cache');
define('MAGPIE_CACHE_ON', 1);

默认情况下,Magpie只缓存一个小时的项目,但可以用以下行来更改:

define('MAGPIE_CACHE_AGE', 1800);

这使Magpie缓存项目30分钟。 请注意,间隔以秒为单位指定。

好的,我添加了这些行,但缓存仍然不工作!

您需要确保将缓存设置的目录存在并由服务器运行的用户写入。 在Debian中,这是www-data。 我很抱歉,但我不知道哪个用户apache在其他发行版上默认运行。 您可以使用以下命令(以root用户身份)完成此操作:

mkdir /tmp/magpie_cache
chown www-data:www-data /tmp/magpie_cache

请注意,缓存不必在/ tmp,如果您使用共享托管,实际上是一个好主意。 之后刷新该页面,您应该看到一些文件在缓存目录中有一些非常奇怪的名称。 如果你做的一切都很好。 如果没有,请参阅MagpieRSS主页上的常见问题。

把它们放在一起

以下是选项应该如何组合,并且是一个工作的例子,从我自己的网站进行了微小的修改。

<?php
define('MAGPIE_CACHE_DIR', '/var/cache');
$rss = fetch_rss('http://digg.com/rss/indexlinux_unix.xml');
$items = array_slice($rss->items, 0, 5);
foreach ($items as $item) {
$href = $item['link'];
$title = $item['title'];
$desc = $item['description'];
echo "
<p><a href="$href">$title</a><br>
";
if($desc)
if (strlen($desc) >= 125)
{
$desc = substr($desc,0,124)."...";
}
echo $desc;
}
;
?>

这将从Linux部分的www.digg.com中检索Feed,并显示前5个条目,其长度为125个字符。 它还缓存到目录/ var / cache,默认缓存时间为1小时。

在那里你有它,快速和容易的RSS联合与MagpieRSS! 如果您需要更多信息,帮助或其他任何其他信息,我强烈建议您查看MagpieRSS主页 。 他们还有一个积极的邮件列表,并保存每次需要帮助时都回答了我的问题的档案。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏