利用 Microsoft.Feeds.Interop 組件 (Windows RSS Platform API) 訂閱、下載並解析 RSS Feed,將完整 XML 內容儲存至本地檔案。
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Microsoft.Feeds.Interop;
namespace RssFeedReader
{
class ReadRssFeed
{
static void Main(string[] args)
{
FeedsManagerClass fm = new FeedsManagerClass();
string url = @"https://www.nordpoolspot.com/alerts/umm_feed";
IFeedFolder rootFolder = (IFeedFolder)fm.RootFolder;
IFeed feed = null;
// 檢查是否已訂閱
if (!fm.IsSubscribed(url))
{
feed = (IFeed)rootFolder.CreateFeed(url, url);
feed.Rename("Nord Pool Spot UMM");
}
else
{
feed = (IFeed)fm.GetFeed(@"Nord Pool Spot UMM");
}
// 下載最新內容
feed.Download();
// 取得第一篇文章標題
IFeedItem item = feed.GetItem(0) as IFeedItem;
string title = item.Title;
// 匯出完整 XML (含擴充資料)
string xml = feed.XML(
feed.ItemCount,
FEEDS_XML_SORT_PROPERTY.FXSP_PUBDATE,
FEEDS_XML_SORT_ORDER.FXSO_ASCENDING,
FEEDS_XML_FILTER_FLAGS.FXFF_ALL,
FEEDS_XML_INCLUDE_FLAGS.FXIF_CF_EXTENSIONS
);
// 寫入檔案
using (StreamWriter sw = new StreamWriter(File.OpenWrite("test.xml")))
{
sw.Write(xml);
}
}
}
}
| API | 用途 |
|---|---|
| FeedsManagerClass | RSS 管理核心類別,提供訂閱、下載、查詢功能 |
| IFeedFolder | 資料夾介面,RootFolder 為根目錄 |
| IFeed | 單一 Feed 介面,含 Download()、GetItem()、XML() 等方法 |
| IFeedItem | 單篇文章介面,含 Title、Link、Description 等屬性 |
| feed.XML() | 匯出完整 Feed XML,支援排序、過濾、擴充資料選項 |
FEEDS_XML_SORT_PROPERTY.FXSP_PUBDATE:依發布日期排序FEEDS_XML_SORT_ORDER.FXSO_ASCENDING:遞增排序 (舊到新)FEEDS_XML_FILTER_FLAGS.FXFF_ALL:包含所有文章 (已讀/未讀)FEEDS_XML_INCLUDE_FLAGS.FXIF_CF_EXTENSIONS:包含 Content Format 擴充資料Microsoft.Feeds.Interop.dll (通常在 C:\Windows\System32\)若不想依賴 Windows 專有 API,建議使用跨平台開源庫:
System.ServiceModel.Syndication)
using CodeHollow.FeedReader;
var reader = new FeedReader();
var feed = await reader.ReadAsync("https://example.com/rss");
foreach (var item in feed.Items)
{
Console.WriteLine($"{item.Title} - {item.Link}");
Console.WriteLine(item.Description);
}