Php 如何生成RSS提要?

Php 如何生成RSS提要?,php,rss,Php,Rss,我自己从来没有做过,也从来没有订阅过订阅源,但似乎我必须创建一个,所以我想知道。对我来说,唯一明显的方法是,当系统更新为新项目(博客文章、新闻项目等)时,应将新元素写入rss文件。或者,也可以使用一个脚本,每天检查几次系统更新,并将其写入rss文件。不过,可能还有更好的方法 此外,旧元素是否应该随着新元素的添加而删除 编辑:我应该提到,我是在PHP中工作的,特别是使用CodeIgniter和mySQL数据库。我想说的答案是,RSS提要只不过是数据的另一个视图。这意味着您的rss提要只是数据库中数

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

此外,旧元素是否应该随着新元素的添加而删除


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

我想说的答案是,RSS提要只不过是数据的另一个视图。这意味着您的rss提要只是数据库中数据的xml表示。然后,读者将能够点击特定的url并在应用程序中获取当前信息。

RSS提要只是符合特定模式的XML文档

看一看

你用什么语言工作?您可以根据应用程序中的某些内容轻松编写xml输出脚本。您不需要显式地将文件保存到文件系统。
它可以动态创建

这里有一个简单的基于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>

受保护的无效页面加载(对象发送方、事件参数e)
{
System.Collections.Specialized.StringCollection隐藏项=新建StringCollection();
System.Collections.Generic.List Sites=新的System.Collections.Generic.List();
添加(@“IISHelp”);
添加(@“MSMQ”);
添加(@“打印机”);
DirectoryEntry=new DirectoryEntry(“IIS://LocalHost/W3SVC/1/ROOT”);
foreach(entry.Children中的DirectoryEntry站点)
{
if(site.SchemaClassName==“IIsWebVirtualDir”&&!HideSites.Contains(site.Name))
{
Sites.Add(site.Name);
}
}
Sites.Sort();
Response.Clear();
Response.ContentType=“text/xml”;
XmlTextWriter RSS=新的XmlTextWriter(Response.OutputStream,Encoding.UTF8);
RSS.WriteStartDocument();
RSS.WriteStarteElement(“RSS”);
WriteAttributeString(“版本”,“2.0”);
RSS.WriteStarteElement(“频道”);
WriteElementString(“标题”,“本地主机网站”);
RSS.WriteElementString(“链接”http://localhost/sitelist.aspx");
WriteElementString(“描述”,“本地主机网站”);
foreach(站点中的字符串s)
{
RSS.WriteStarteElement(“项目”);
RSS.WriteElementString(“title”,s);
RSS.WriteElementString(“链接”http://localhost/“+s);
RSS.WriteEndElement();
}
RSS.WriteEndElement();
RSS.WriteEndElement();
RSS.WriteEndDocument();
RSS.Flush();
RSS.Close();
Response.End();
}

RSS提要只是以某种方式格式化并链接到网页的XML文档

请看这一页(),详细内容是什么 RSS规范提供了示例RSS文件供您查看,并向您展示了如何从站点链接到这些文件

如何创建文档取决于您自己。您可以在文本编辑器中手动编写它,使用特定于语言的XML对象,或者点击ASPX/PHP/other页面并将正确的内容类型标题与RSS文档一起发送


当你开始认真做的时候,这并不难。祝你好运

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


我不会写RSS文件,除非你的服务器负载特别重——你只需要一个查询(或一系列添加到数组中的查询)来更新内容。将查询按日期排序,然后按X限制,这样您就不必担心“删除旧内容”了。

有两种方法可以实现这一点。第一种是根据请求动态创建RSS文档。第二种方法是在发生相关更改时写入静态文件。后者速度更快,但需要调用以更新(可能)多个位置的提要,而不是一个位置

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

对于PHP,我使用feedcreator

useCached();
$rss->title=“项目列表”;
$rss->cssStyleSheet='';
$rss->description='thisfeed';
$rss->link=CONFIG\u SYSTEM\u URL;
$rss->syndicationURL=CONFIG_SYSTEM_URL'feed.php';
$articles=新项目列表();//物品清单
foreach($i){
$item=新的FeedItem();
$item->title=sprintf('%s',$i->title);
$item->link=CONFIG\u SYSTEM\u URL.'item.php?id='.$i->dbId;
$item->description=$i->Subject;
$item->date=$i->ModifyDate;
$item->source=CONFIG\u SYSTEM\u URL;
$item->author=$i->User;
$rss->addItem($item);
}
打印$rss->createFeed($feedformat);

如果您想生成HTML中已经存在的元素的提要,一个选项是修改HTML标记以使用hAtom(),然后通过hAtom->Atom或hAtom->RSS代理指向提要阅读器。

它在PHP中仍然相当类似,因为其他帖子指出RSS只是XML的一种味道。确保内容类型设置为“text/xml”,以便浏览器/rss提要阅读器知道它得到了什么CodeIgniter不支持rss吗?呃,PHP4和演示需要注册全局文件
<?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);