Windows Vista の RSS プラットフォームを使った開発
環境: Windows Vista、 Visual Studio 2005
こんにちは。
以前、秋葉原で開催したコミュニティイベントにて、「DEV だって、.NET Framework 3.0 だけが Vista じゃない」という主旨で IT Pro エバの面々にはさまれて TxF についてご紹介 させて頂きましたが、その後この関連のテクノロジーについて何も記載していないので、「結局、他にはないのか、、、」 とがっかりさせてしまったかもしれませんね。Vista には、新しいセキュリティフレームワークや、リソース(メモリ等)管理、状態管理などの IT Pro 的な側面以外にも、RestartManager、Restart & Recovery、ガジェット、Search API などなどなど、開発者にとっても魅力的な .NET FX 3 以外のテクノロジーが数多く存在していて、MSDN でのリファレンスや、日本においてもコミュニティの方 (Microsoft 社員以外の .NET ファンの方々) などからもいくつか先進的なソースコードなどがご紹介されていますので、是非その威力を実感してみてください。
ここでは、その中でもかなりニッチになってしまうかもしれませんが、Windows Vista に入っている Windows RSS プラットフォーム (Microsoft Windows RSS Platform) を使った実装について記載してみます。特にガジェットや Live でフィードを使った開発などをされた方は勿論、開発者の皆さんなら、何となくどんな風に使うものか連想できているかと思いますが (まさにそんな使い方です、、、特に難しい実装ではありません) 1から手をつけて動かしてみるとなるとそれはそれで大変ですので、サンプルとして利用できるように記載しておきたいと思います。(思いつきな題材ですみません。なかなか国内でソースのサンプルなどがなさそうでしたので、、、)
Windows RSS プラットフォームですが、これは、IE 7 で使用されているプラットフォームコンポーネントで、RSS 関連の管理をプラットフォームのモジュールとして搭載することで、アプリケーションによって RSS をばらばらに管理するようなこともなく実装できるようになっています。日本の MSDN のサイトでは、リファレンス的なドキュメントですが、以下で紹介されています。
http://www.microsoft.com/japan/msdn/ie/ie7/msfeeds_ovw.aspx
では、この API を使った非常に簡単ではありますがサンプルを作成し、例によってイメージをつかんでみましょう。
その前に、IE 7 (Internet Explorer 7) から何かフィードを登録しておいてください。(http://www.microsoft.com/japan/msdn にもいろいろなフィードがあります。このサンプルでは、「テスト1」というフォルダを作成し、ここにこのサイトのフィードを登録して使っています。)
まずは、登録しているフィードの一覧を検索・表示してみましょう。(以下、すべて C# で実装しています。)
-
まず、Windows アプリケーションのプロジェクトを Visual Studio で新規作成します。
-
作成したら、[参照の追加 ...] で、[参照] タブから
%windir%\System32\msfeeds.dll
を選択して追加してください。
-
つぎに、ソースコードに、以下のネームスペースを追加します。
using Microsoft.Feeds.Interop;
RSS プラットフォームの API を使うにはこれだけで充分です。
-
では、フォームの Load イベント (または Button Click イベント、などなど) に、以下のようなソースを記述してみましょう。
private void Form1_Load(object sender, EventArgs e)
{
IFeedsManager mgr = new FeedsManagerClass();
IFeedFolder root = (IFeedFolder)mgr.RootFolder;
MessageBox.Show(RecursiveSearch(root));
}
private string RecursiveSearch(IFeedFolder folder)
{
string result = "";
result += (folder.Name + "\r\n");
foreach (IFeedFolder subfolder in (IFeedsEnum) folder.Subfolders)
result += (" " + RecursiveSearch(subfolder));
foreach (IFeed feed in (IFeedsEnum) folder.Feeds)
result += (" [feed]" + feed.Name + "\r\n");
return result;
}
-
では、デバッグ実行 (F5) してみましょう。
すみません、メッセージボックスに表示してしまったので、Windows アプリにした意味が何らありませんが、とにかく登録されているフィードの一覧が表示されているのがお分かりかと思います。
このように、Feed Manager と呼ばれるオブジェクトを使って、ツリー構成をたどって表示することができます。実際には TreeView コントロールなどに表示してユーザが展開できるような UI にすると使いやすそうですね。
ここに表示されたフィードのうちの 1 つをメモしておいてください (つぎのソースコードで使います)。
つぎに、フィードの 1 つから、アイテムの一覧を取得して表示してみましょう。今度は、先ほどのソースコードを削除して、以下のようなソースコードにしてみてください。(フォルダやフィードの名前は、皆さんの登録内容にあわせて、適宜変更してください。)
private void Form1_Load(object sender, EventArgs e)
{
IFeedsManager mgr = new FeedsManagerClass();
IFeed feed = (IFeed) mgr.GetFeed(@"テスト1\MSDN Online 更新情報");
string dspText = "";
foreach (IFeedItem item in (IFeedsEnum)feed.Items)
dspText += (item.Title + "\r\n");
MessageBox.Show(dspText);
}
これで実行してみてください。
「MSDN Online 更新情報」を表示すると、大変な量になってしまいますね。(下が見えなくなってしまいました、、、)
では最後に、上記のアイテムの中の 1 つをブラウザコントロールで表示してみましょう。(すみません、ここで、やっとフォームを活用します。)
フォーム上に WebBrowser コントロールを貼り付け (このコントロールの名前を webBrowser1 とします)、以下の通りソースコードを変更して実行してみてください。
private void Form1_Load(object sender, EventArgs e)
{
IFeedsManager mgr = new FeedsManagerClass();
IFeed feed = (IFeed) mgr.GetFeed(@"テスト1\MSDN Online 更新情報");
foreach (IFeedItem item in (IFeedsEnum)feed.Items)
{
webBrowser1.DocumentText = item.Description;
break;
}
}
ブラウザコントロールに、アイテムのドキュメントの内容が表示されます。