Мне не понятно, почему такой чудесный фреймворк как .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 и добавляем в самое начало следующие строки:
Для тех, кто не знает, это просто ссылки на namespace, в котором находятся нужные нам классы.
Весь последующий код следует добавлять Page_Load по порядку.
Теперь создадим сам объект фида с помощью класса SyndicationFeed:
Тут вроде все просто и понятно. Единственное, на что хотел бы обратить внимание: для добавления любой, кроме свойства Generator, текстовой информации в фид используется класс TextSyndicationContent. Ну тут вам подскажет IntelliSense, не запутаетесь.
После этого добавим собственно сами записи в фид (для примера нам хватит одной):
Вроде тоже все понятно: создаем запись, автоматически присваиваем ID, название, короткое описание и тело. В реальной жизни вся эта информация будет получаться из базы или еще откуда-нибудь, но у нас всего лишь пример, поэтому будем статичными. Также к записи можно добавить ссылки и автора, но мы этого делать не будем, потому что это достаточно просто при желании сделать самому.
Добавим нашу запись к фиду:
Ну а теперь выбираем формат фида и сеарилизуем его. Пускай это будет RSS 2.0:
Здесь мы сначала очищаем буфер вывода, выбираем кодировку и MIME-тип. Затем создаем XmlWriter, который будет писать в буфер вывода отформатированый XML. Ну а XmlWriter'у мы, в свою очередь, подаем наш фид в формате RSS 2.0, отсеарилизованый для нас классом Rss20FeedFormatter (также можно использовать Atom10FeedFormatter для Atom 1.0 соответственно).
Все! Можете откомпилировать сайт и, если все сделано правильно, в браузере вы увидите наш фид, на который уже можно подписываться.
Спасибо за внимание. Код был подсвечен и отформатирован с помощью Source Code Highlighter, в написании статьи мне помогали MSDN и некоторые иностранные блоги.
Кстати, в IE 7 наша страница будет выглядеть вот так:
upd: В процессе обсуждения выяснился немного более красивый вариант, смотрите этот комментарий, спасибо говорим RAMe0
Всвязи с этим у моей статьи предполагается две целевые группы: люди, которые уже пишут на .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 наша страница будет выглядеть вот так:
upd: В процессе обсуждения выяснился немного более красивый вариант, смотрите этот комментарий, спасибо говорим RAMe0