Я никогда не делал этого сам, и я никогда не подписывался на фид, но кажется, что мне нужно его создать, поэтому мне интересно. Единственный способ, который кажется мне очевидным, это то, что когда система обновляется с новым элементом (сообщение в блоге, новостной элемент, что угодно), новый элемент должен быть записан в rss-файл. Или, альтернативно, есть скрипт, который проверяет наличие обновлений для системы несколько раз в день и записывает в rss-файл. Вероятно, есть лучший способ сделать это.
А также, если старые элементы будут удалены по мере добавления новых?
Редактировать : я должен был упомянуть, я работаю на PHP, в частности с помощью CodeIgniter, с базой данных mySQL.
Для 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);
Я бы сказал, что ответ на RSS-канал – это не что иное, как другой взгляд на ваши данные. Это означает, что ваш rss-канал представляет собой просто XML-представление данных в вашей базе данных. Затем читатели смогут ударить по этому конкретному URL-адресу и вернуть текущую информацию в ваше приложение.
RSS-канал – это только XML-документ, который соответствует определенной схеме.
Посмотрите здесь
На каком языке вы работаете? Вы можете легко выполнить сценарий вывода xml на основе некоторого контента в вашем приложении. Вам не нужно явно сохранять файл в файловой системе. Его можно просто создать на лету
У меня хорошие результаты от Magpie RSS . Настройте включенную кешировку, и все, что вам нужно сделать, это написать запрос для извлечения ваших данных и отправить результат в Magpie RSS, который затем обрабатывает частоту обновления.
Я бы не писал файл RSS, если ваш сервер не находится в особо тяжелой нагрузке – вам нужен только один запрос (или серия запросов, добавляемых в массив) для обновленного материала. Напишите запросы, которые будут сортироваться по дате, а затем ограничены X, и вам не нужно будет беспокоиться о «удалении старых вещей».
Вот простой RSS-канал на основе ASP.NET 2, который я использую в качестве живой закладки для своих сайтов-разработчиков 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>
RSS-канал – это только XML-документ, отформатированный определенным образом и связанный с веб-страницей.
Взгляните на эту страницу ( http://cyber.law.harvard.edu/rss/rss.html ), в которой подробно описывается спецификация RSS, приводятся примеры файлов RSS для просмотра и показано, как с ними связаться сайт.
Как вы создаете документ, зависит от вас. Вы можете написать его вручную в текстовом редакторе, использовать XML-объект, специфичный для языка, или нажать на страницу ASPX / PHP / other и отправить правильные заголовки содержимого вместе с RSS-документом.
Это не так уж сложно, когда вы приступите к нему. удачи!
Есть два способа приблизиться к этому. Во-первых, динамически создавать документ RSS по запросу. Во-вторых, для записи в статический файл, когда происходит соответствующее изменение. Последнее быстрее, но требует вызова для обновления фида (вероятно) во многих местах и только в одном.
При использовании обоих методов, хотя вы можете редактировать документ только с изменениями, гораздо проще просто переписать весь документ каждый раз с помощью самых последних (10-50) элементов.
Если вы хотите создать фид элементов, которые уже существуют в HTML, один из вариантов – изменить вашу разметку HTML для использования hAtom ( http://microformats.org/wiki/hAtom ), а затем указать читателей каналов через hAtom-> Atom или hAtom-> RSS-прокси.