如何生成RSS订阅源?

6
我自己从未尝试过创建RSS订阅,但是现在我需要创建一个,所以我想知道如何操作。目前唯一明显的方法是:当系统更新有新内容(如博客文章、新闻等),就应该向RSS文件中写入新元素。或者,可以编写一个脚本每天检查几次系统更新并将更新内容写入RSS文件。不过,也可能有更好的方法。
同时,当新元素添加时,旧元素是否应该被删除? 编辑:我应该提到,我正在使用PHP,具体来说是CodeIgniter,并且使用MySQL数据库。

CodeIgniter没有RSS支持吗? - DisgruntledGoat
8个回答

6

我使用feedcreator来处理PHP相关技术

http://feedcreator.org/
<?php define ('CONFIG_SYSTEM_URL','http://www.domain.tld/');

require_once('feedcreator/feedcreator.class.php');

$feedformat='RSS2.0';

header('Content-type: application/xml');

$rss = new UniversalFeedCreator();
$rss->useCached();
$rss->title = "Item List";
$rss->cssStyleSheet='';
$rss->description = 'this feed';
$rss->link = CONFIG_SYSTEM_URL;
$rss->syndicationURL = CONFIG_SYSTEM_URL.'feed.php';


$articles=new itemList();  // list of stuff
foreach ($articles as $i) {   
    $item = new FeedItem();
    $item->title = sprintf('%s',$i->title);
    $item->link = CONFIG_SYSTEM_URL.'item.php?id='.$i->dbId;
    $item->description = $i->Subject;   
    $item->date = $i->ModifyDate;   
    $item->source = CONFIG_SYSTEM_URL;   
    $item->author = $i->User;
    $rss->addItem($item);
}

print $rss->createFeed($feedformat);

1
呃,PHP4和演示需要注册全局变量。 - Markus Hedlund

4
一个RSS Feed只是符合特定模式的XML文档。
请查看这里
您正在使用哪种语言?您可以根据应用程序中的某些内容轻松编写XML输出脚本。您不需要显式地将文件保存到文件系统中。它可以即时创建。

3
我认为答案是使RSS feed成为数据的另一种表现形式。这意味着你的RSS feed只是数据库中数据的XML表示。读者可以点击该特定URL并获取应用程序中当前信息。

2
我从Magpie RSS得到了很好的结果。设置包括缓存,你只需要编写检索数据的查询并将结果发送给Magpie RSS,它会处理更新频率。
除非你的服务器负载特别重,否则我不会编写RSS文件 - 只需一个查询(或一系列添加到数组的查询)即可获取更新内容。编写按日期排序并限制为X的查询,你也不必担心“删除旧内容”的问题。

0

这是一个简单的基于ASP.NET 2的RSS源,我用它作为我的本地主机开发站点的实时书签。可能会帮助您入门:

<%@ Page Language="C#" EnableViewState="false" %>
<%@ OutputCache Duration="300" VaryByParam="none" %>

<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.DirectoryServices" %>

<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{
    System.Collections.Specialized.StringCollection HideSites = new StringCollection();
    System.Collections.Generic.List<string> Sites = new System.Collections.Generic.List<string>();

    HideSites.Add(@"IISHelp");
    HideSites.Add(@"MSMQ");
    HideSites.Add(@"Printers");

    DirectoryEntry entry = new DirectoryEntry("IIS://LocalHost/W3SVC/1/ROOT");
    foreach (DirectoryEntry site in entry.Children)
    {
        if (site.SchemaClassName == "IIsWebVirtualDir" && !HideSites.Contains(site.Name))
        {
            Sites.Add(site.Name);
        }
    }

    Sites.Sort();

    Response.Clear();
    Response.ContentType = "text/xml";
    XmlTextWriter RSS = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
    RSS.WriteStartDocument();
    RSS.WriteStartElement("rss");
    RSS.WriteAttributeString("version","2.0");
    RSS.WriteStartElement("channel");
    RSS.WriteElementString("title", "Localhost Websites");
    RSS.WriteElementString("link","http://localhost/sitelist.aspx");
    RSS.WriteElementString("description","localhost websites");

    foreach (string s in Sites)
    {
        RSS.WriteStartElement("item");
        RSS.WriteElementString("title", s);
        RSS.WriteElementString("link", "http://localhost/" + s);
        RSS.WriteEndElement();
    }

    RSS.WriteEndElement();
    RSS.WriteEndElement();
    RSS.WriteEndDocument();
    RSS.Flush();
    RSS.Close();
    Response.End();
}

</script>

在 PHP 中,它仍然会非常相似,因为其他帖子指出,RSS 只是 XML 的一种版本。请确保内容类型设置为“text/xml”,这样浏览器/ RSS 订阅阅读器就知道它正在获取什么。 - Nick

0

RSS订阅是一种特定格式的XML文档,可以从网页链接到它。

请查看此页面(http://cyber.law.harvard.edu/rss/rss.html),其中详细介绍了RSS规范,提供了示例RSS文件供您查看,并向您展示如何从您的站点链接到它们。

如何创建文档取决于您。您可以在文本编辑器中手动编写它,使用特定语言的XML对象,或者访问ASPX/PHP/其他页面并发送正确的内容类型标头以及RSS文档。

当您深入了解时,这并不难。祝你好运!


0

有两种方法可以解决这个问题。第一种是根据请求动态创建RSS文档。第二种是在相关更改发生时写入静态文件。后者速度更快,但需要在许多地方调用更新源,而不仅仅是一个。

使用这两种方法,虽然您可以仅使用更改编辑文档,但每次都使用最新的(10-50)项重新编写整个文档会更简单。


0
如果您想生成一个已经存在于HTML中的元素的源,一种选择是修改您的HTML标记以使用hAtom(http://microformats.org/wiki/hAtom),然后通过hAtom->Atom或hAtom->RSS代理将源读取器指向它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接