Как вы генерируете канал RSS? - PullRequest
6 голосов
/ 02 ноября 2008

Я никогда не делал это сам, и я никогда не подписывался на канал, но, похоже, мне придется его создать, поэтому мне интересно. Единственный способ, который мне кажется очевидным, заключается в том, что когда система обновляется новым элементом (публикация в блоге, новость и т. Д.), В файл rss следует записывать новый элемент. Или, альтернативно, есть скрипт, который проверяет наличие обновлений в системе несколько раз в день и пишет в rss-файл, если он есть. Хотя, вероятно, есть лучший способ сделать это.

А также, следует ли удалять старые элементы при добавлении новых?

Редактировать : Я должен был упомянуть, я работаю в PHP, в частности использую CodeIgniter, с базой данных mySQL.

Ответы [ 8 ]

6 голосов
/ 03 ноября 2008

Для 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);
3 голосов
/ 02 ноября 2008

RSS-канал - это просто XML-документ, соответствующий определенной схеме.

Посмотрите здесь

На каком языке вы работаете? Вы можете легко написать сценарий вывода xml на основе некоторого контента в вашем приложении. Вам не нужно явно сохранять файл в файловой системе. Его можно создать на лету

3 голосов
/ 02 ноября 2008

Я бы сказал, что ответом будет то, что RSS-канал будет не чем иным, как другим представлением ваших данных. Это означает, что ваш RSS-канал - это просто XML-представление данных в вашей базе данных. После этого читатели смогут использовать этот конкретный URL-адрес и получать текущую информацию в вашем приложении.

2 голосов
/ 03 ноября 2008

У меня хорошие результаты от Сорока RSS . Настройте включенное кэширование, и все, что вам нужно сделать, это написать запрос, чтобы получить ваши данные и отправить результат в Magpie RSS, который затем обрабатывает частоту обновления.

Я бы не стал писать файл RSS, если бы ваш сервер не был особенно сильно загружен - все, что вам нужно - это один запрос (или серия запросов, добавляемых в массив) для обновленного содержимого. Напишите запрос (-ы), которые будут отсортированы по дате, а затем ограничены по X, и вам не нужно будет беспокоиться об «удалении старых вещей».

0 голосов
/ 04 ноября 2008

Если вы хотите сгенерировать поток элементов, которые уже существуют в HTML, одним из вариантов является изменение разметки HTML для использования hAtom (http://microformats.org/wiki/hAtom), а затем наведение указателей каналов через hAtom-> Atom или hAtom- > RSS прокси.

0 голосов
/ 03 ноября 2008

Есть два способа приблизиться к этому. Первый - динамически создавать документ RSS по запросу. Второе - это запись в статический файл, когда происходит соответствующее изменение. Последний работает быстрее, но требует вызова, чтобы обновить фид (скорее всего) во многих местах, а не в одном.

Используя оба метода, вы можете редактировать документ только с изменениями, но гораздо проще каждый раз переписывать весь документ самыми последними (10-50) элементами.

0 голосов
/ 03 ноября 2008

Канал RSS - это просто документ XML, отформатированный определенным образом и связанный с веб-страницей.

Посмотрите на эту страницу (http://cyber.law.harvard.edu/rss/rss.html), какие детали спецификация RSS содержит примеры файлов RSS, на которые вы можете посмотреть, и показывает, как сделать ссылку на них с вашего сайта.

Как вы создаете документ, зависит от вас. Вы можете написать его вручную в текстовом редакторе, использовать объект XML для конкретного языка или перейти на страницу ASPX / PHP / другой и отправить правильные заголовки типов контента вместе с документом RSS.

Это не так уж сложно, когда вы приступаете к этому. удачи!

0 голосов
/ 03 ноября 2008

Вот простой RSS-канал на базе ASP.NET 2, который я использую в качестве живой закладки для своих локальных сайтов разработчиков. Может помочь вам начать:

<%@ 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...