Простой Feed-ридер за 10 минут
Была у меня идея, написать статью, о том, как можно создать свой RSS-ридер. Я даже начал ее реализовывать, но сегодня на хабре появилась статья Maxter’a — Генерация RSS фидов с помощью класса Syndication. В этой статье рассматривался набор классов Syndication, для с фидами (Feeds) RSS и Atom. Благодаря Syndication можно не только генерировать фиды, но и читать их. В этой статье я хочу представить простейший пример RSS/Atom ридера, который можно написать буквально за 10 минут. Правда, доступна эта возможность только в .Net Framework 3.5…
Итак, начнем
Для начала создадим новый проект – обычное Windows приложение. С простейшим интерфейсом, например таким:
Основа формы – TableLayoutPanel
, с параметром Dock
равным Fill
, и уже на нем расположены TextBox
, Button
, ListView
(для вывода списка новостей) и WebBrowser
(для отображения содержимого). Далее добавляем в References
сборку System.ServiceModel.Web
, и добавляем в секцию using
класса следующиее:
using System.ServiceModel.Syndication;
using System.Xml;
Что касается кода, то он простейший. Вот код обработки нажатия на кнопку «Обновить»:
private void btRefresh_Click(object sender, EventArgs e) {
// Проверяем задан ли адрес
if (!String.IsNullOrEmpty(tbUrl.Text)) {
// Очищаем ListView перед добавлением новых данных
lvNews.Clear();
// Создаем XmlReader дял чтения RSS/Atom
XmlReader FeedReader = XmlReader.Create(tbUrl.Text);
// Загружаем RSS/Atom
SyndicationFeed Channel = SyndicationFeed.Load(FeedReader);
// если загрузились
if (Channel != null) {
// обрабатываем каждую новость канала
foreach(SyndicationItem RSI in Channel.Items) {
// создаем элемент для вывода в ListView
ListViewItem LVI = new ListViewItem(RSI.Title.Text);
LVI.Name = RSI.Title.Text;
// связываем ListViewItem и новость
LVI.Tag = RSI;
// добавляем новость в ListView
lvNews.Items.Add(LVI);
}
}
}
}
Теперь добавляем обработчик события MouseDown
для ListView
:
private void lvNews_MouseDown(object sender, MouseEventArgs e) {
//если нажата левая кнопка мыши, то
if (e.Button == MouseButtons.Left) {
// получаем ListViewItem, который находится под курсором
ListViewItem item = lvNews.GetItemAt(e.X, e.Y);
// если курс не на пустом месте, то
if (item != null) {
// получаем связаную с выбраным ListViewItem новость
SyndicationItem RSI = (SyndicationItem) item.Tag;
// выводим полный текст новости
if (RSI.Content != null) // значит Atom
wbDescription.DocumentText = ((TextSyndicationContent) RSI.Content).Text;
else // иначе RSS
wbDescription.DocumentText = RSI.Summary.Text;
}
}
}
Вот и все. Простейший feed-ридер готов. Он может читать как RSS так и
Atom фиды.
А вот и обещаные исходники: RssReader.rar
Теги: Atom, Feed, RSS, Soft-programing, Syndication, Windows.forms