轻松的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主页 。 他们还有一个积极的邮件列表,并保存每次需要帮助时都回答了我的问题的档案。