你如何生成RSS提要?

时间:2008-11-02 20:48:34

标签: php rss

我自己从来没有这样做过,而且我从未订阅过饲料,但似乎我必须创建一个,所以我很想知道。对我来说唯一明显的方法是,当使用新项目(博客文章,新闻项目等)更新系统时,应该将新元素写入rss文件。或者有一个脚本,每天检查几次系统更新,并写入rss文件。尽管如此,可能还有更好的方法。

而且,如果添加新元素,是否应删除旧元素?

编辑:我应该提到,我正在使用PHP,特别是使用CodeIgniter和mySQL数据库。

8 个答案:

答案 0 :(得分:6)

对于PHP,我使用feedcreator 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 :(得分:3)

我要说的答案是让RSS源只是另一种数据视图。这意味着您的RSS提要只是数据库中数据的xml表示。然后,读者可以点击该特定网址,并在您的应用程序中获取当前信息。

答案 2 :(得分:3)

RSS Feed只是符合特定架构的XML文档。

看看here

你在做什么语言?您可以根据应用程序中的某些内容轻松编写xml输出脚本。您无需将文件显式保存到文件系统。 它可以即时创建

答案 3 :(得分:2)

我从Magpie RSS得到了很好的结果。设置包含的缓存,您需要做的就是编写查询以检索数据并将结果发送到Magpie RSS,然后Magpie RSS处理更新频率。

我不会写一个RSS文件,除非您的服务器负载特别重 - 只需要一个查询(或一系列添加到数组的查询)来获取更新的内容。将查询/ ies写入按日期排序,然后由X限制,您也不必担心“删除旧东西”。

答案 4 :(得分:0)

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

<%@ 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>

答案 5 :(得分:0)

RSS源只是一种以某种方式格式化并从网页链接的XML文档。

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

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

当你接触它时,并不是那么难。祝你好运!

答案 6 :(得分:0)

有两种方法可以解决这个问题。第一种是根据请求动态创建RSS文档。第二种是在发生相关变化时写入静态文件。后者更快,但需要调用来更新(可能)许多地方的饲料而不是一个。

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

答案 7 :(得分:0)

如果要生成HTML中已存在的元素的提要,一个选项是修改HTML标记以使用hAtom(http://microformats.org/wiki/hAtom),然后通过hAtom-> Atom或hAtom指向提要读者 - &gt; RSS代理。