Pull to refresh

Генерация RSS фидов с помощью класса Syndication

Reading time 3 min
Views 2.3K
Мне не понятно, почему такой чудесный фреймворк как .NET имеет такую маленькую популярность в странах СНГ. Ведь у него есть все необходимое для создания проектов любого уровня сложности, а особенно для веб-проектов. И он ничем не хуже, например, модного ныне Ruby on Rails, имхо даже лучше. Кстати, если вам так нравится концепция MVC программирования, можно попробовать ASP.NET MVC framework.

Всвязи с этим у моей статьи предполагается две целевые группы: люди, которые уже пишут на .NET и которым будет интересно узнать о генерации RSS фидов, и не .NET программисты, которым я постараюсь показать легкость и изящность решения различных задач в этом фреймворке на примере генерации RSS. Итак, начнем. Использовать будем .NET 3.5 и C#.

Как известно, фиды могут быть двух форматов: RSS и ATOM. Так вот, нам это абсолютно не важно, так как мы сначала создадим сам фид, а уже потом решим, в какой формат его сохранить.
Первым этапом будет естественно создание нового сайта в Visual Studio. После этого добавляем в References «System.ServiceModel.Web», если его там еще нет, открываем Default.aspx.cs и добавляем в самое начало следующие строки:
using System.ServiceModel.Syndication;
using System.Xml;
using System.Collections.Generic;

Для тех, кто не знает, это просто ссылки на namespace, в котором находятся нужные нам классы.
Весь последующий код следует добавлять Page_Load по порядку.
Теперь создадим сам объект фида с помощью класса SyndicationFeed:
SyndicationFeed feed = new SyndicationFeed();
//Название, которое будет видно в любой читалке
feed.Title = new TextSyndicationContent
(«Мой тестовый RSS фид.»);
//Блок копирайтов
feed.Copyright = new TextSyndicationContent
(" 2008");
//Описание и название генератора фида.
feed.Description = new TextSyndicationContent
(«Автоматически сгенерированый фид»);
feed.Generator = «Maxter's RSS Feed Generator»;
//Ну и ссылка на источник
SyndicationLink link = new SyndicationLink();
link.Title = «Habr.ru»;
link.Uri = new Uri(«habrahabr.ru»);
feed.Links.Add(link);

Тут вроде все просто и понятно. Единственное, на что хотел бы обратить внимание: для добавления любой, кроме свойства Generator, текстовой информации в фид используется класс TextSyndicationContent. Ну тут вам подскажет IntelliSense, не запутаетесь.
После этого добавим собственно сами записи в фид (для примера нам хватит одной):
SyndicationItem item = new SyndicationItem();
item.Id = Guid.NewGuid().ToString();
item.Title = new TextSyndicationContent
(«Привет, ХабраХабр!»);
item.Summary = new TextSyndicationContent
(«Тут идет короткое описание»);
item.Content = new TextSyndicationContent
(«А тут полный текст»);

Вроде тоже все понятно: создаем запись, автоматически присваиваем ID, название, короткое описание и тело. В реальной жизни вся эта информация будет получаться из базы или еще откуда-нибудь, но у нас всего лишь пример, поэтому будем статичными. Также к записи можно добавить ссылки и автора, но мы этого делать не будем, потому что это достаточно просто при желании сделать самому.
Добавим нашу запись к фиду:
List<SyndicationItem> items =
new List<SyndicationItem>();
items.Add(item);
feed.Items = items;

Ну а теперь выбираем формат фида и сеарилизуем его. Пускай это будет RSS 2.0:

Response.Clear();
Response.ContentEncoding =
System.Text.Encoding.UTF8;
Response.ContentType = «text/xml»;

XmlWriter rssWriter = XmlWriter.Create
(Response.Output);
Rss20FeedFormatter rssFormatter =
new Rss20FeedFormatter(feed);
rssFormatter.WriteTo(rssWriter);
rssWriter.Close();

Response.End();

Здесь мы сначала очищаем буфер вывода, выбираем кодировку и MIME-тип. Затем создаем XmlWriter, который будет писать в буфер вывода отформатированый XML. Ну а XmlWriter'у мы, в свою очередь, подаем наш фид в формате RSS 2.0, отсеарилизованый для нас классом Rss20FeedFormatter (также можно использовать Atom10FeedFormatter для Atom 1.0 соответственно).

Все! Можете откомпилировать сайт и, если все сделано правильно, в браузере вы увидите наш фид, на который уже можно подписываться.
Спасибо за внимание. Код был подсвечен и отформатирован с помощью Source Code Highlighter, в написании статьи мне помогали MSDN и некоторые иностранные блоги.
Кстати, в IE 7 наша страница будет выглядеть вот так:
Picture_5.png - image uploaded to Picamatic
upd: В процессе обсуждения выяснился немного более красивый вариант, смотрите этот комментарий, спасибо говорим RAMe0
Tags:
Hubs:
+29
Comments 121
Comments Comments 121

Articles