Viral Feed ご紹介(実現方式編)

TechCollab2008-02-11


さて、引き続いてViral Feedの実現方式についてざっくり*1と紹介していきます。

Viral Feed アーキテクチャ

Viral Feed」はシステム全体を統括するWEBサービス(A)「Viral Feed Web Service」と、各クライアントで動作し「Viral Feed Web Service」と連携したオンライン機能と、People Near Me*2エンジンを利用したオフライン機能を合わせてもつ、(B)「Feed Communicator」から構成されます。

WEBサービスViral Feed Web Service」

ユーザ毎のフィード注入状態/購読状態を管理し、各クライアントの現在位置に応じたフィードの注入をするためのサービスです*3Viral Feedで扱うデータはオープンに公開されREST/SOAP/Popfly Blockの各種インタフェースからアクセスすることが可能です。

Ex1.RESTアクセス
例えば、次のようなクエリを投げることによりAdministartorというユーザが購読しているフィードの一覧を取得することができます。ここで得られる結果はOPMLとして返答されます。owner属性にadと記述されているフィードは自分存在位置に応じて注入されたフィードとなります。

http://viralfeed.net/ws/rest/GetSubscribeFeed.aspx?v=1.0&user=Administrator&type=all

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<opml type="feed/subscribe" version="1.0">
  <head>
    <title>Feeds</title>
  </head>
  <body>
    <outline text="Tim Sneath" xmlUrl="http://blogs.msdn.com/tims/atom.xml" type="rss" owner="my"/>
    <outline text="ABC News: Top Stories" xmlUrl="http://feeds.feedburner.com/AbcNews_TopStories" type="rss" owner="my"/>
    <outline text="Cirius Lab" xmlUrl="http://feeds.feedburner.jp/ciriuslab" type="rss" owner="my"/>
    <outline text="マイコミジャーナル" xmlUrl="http://journal.mycom.co.jp/haishin/rss/index.rdf" type="rss" owner="my"/>
    <outline text="畑@サイボウズ・ラボ" xmlUrl="http://labs.cybozu.co.jp/blog/hata/index.xml" type="rss" owner="my"/>
    <outline text="Microsoft Live Labs Volta Team Blog" xmlUrl="http://labs.live.com/volta/blog/SyndicationService.asmx/GetAtom" type="rss" owner="my"/>
    <outline text="Windows Live Agents" xmlUrl="http://windowsliveagents.spaces.live.com/feed.rss" type="rss" owner="my"/>
    <outline text="CNET News.com" xmlUrl="http://www.news.com/2547-1_3-0-20.xml" type="rss" owner="my"/>
    <outline text="Microsoft Live Labs Volta Team Blog" xmlUrl="http://labs.live.com/volta/blog/SyndicationService.asmx/GetAtom" type="rss" owner="ad"/>
    <outline text="レッド ■ ワン: red-one" xmlUrl="http://redone-on.blogspot.com/feeds/posts/default" type="rss" owner="ad"/>
  </body>
</opml>

Ex2.Popfly Block
上のRESTアクセスの例と同じことがPopfly Blockからも実現することができます。Viral FeedブロックのOperationとしてGetSubscribeFeedFromUserを選択し、対象ユーザとしてAdministartorを指定する。

そうすると、Administartorが購読しているフィード一覧を取得することができる。

クライアントツール「Feed Communicator」

Feed CommunicatorはViral Feed Web Serviceにより配信される現在位置に依存したFeed情報や、近隣ユーザとFeed情報をやりとりをするためのツールとなります。近隣ユーザとのコミュニケーションをオンライン/オフライン問わずに実現することが可能です。現時点でのサポートプラットフォームはWindows Vista/XP、Windows Mobile 5/6ですが、SDKの調査結果に応じて今後はMac/iPhoneLinux/Androidをサポートしていくことを計画しています。

このFeed CommunicatorはPeople Near Meのエンジンを利用することでフィード情報を近隣のピアと共有しています。このPeople Near Meですが、もともとのサポートはVistaのみであるため、今回のプロジェクトではVistaに限らず、XP、Windows Mobile5/6でも利用させるためPeople Near Meを独自に実装しています。独自実装したPeople Near MeはPEERネットワークの状態をリアルタイムに管理する常駐サービスであるPNM Control ServiceとPNM Control ServiceからPEERネットワーク状態の変更通知、情報取得を実現するための汎用ライブラリPNM Libraryから構成されています。PNM LibraryはWin32 Native実装版と.NET Class Libary(Compact Framework含む)実装版が存在します。それにより、アプリケーション作成者は次のようなオリジナルのPeople Near Meと同等な簡単なコードでP2Pアプリケーションを実現することができます*4

private void InitializePeopleNearMe()
{
    PeerCollab collab = new PeerCollab();
    collab.SignIn(PeerSignInOption.NearMe);

    collab.PeopleNearMeChanged 
          += new PeerCollab.PeopleNearMeChangedHandler(collab_PeopleNearMeChanged);
    collab.ObjectChanged 
          += new PeerCollab.ObjectChangedHandler(collab_ObjectChanged);
}

void collab_PeopleNearMeChanged(object sender, PeerCollabPNMChangedEventArgs e)
{ 
    PeerPeopleNeaMe pnm = e.PeopleNearMe;
    switch(e.Action)
    {
        case PEER_CHANGE_TYPE.Added:
            break;
        case PEER_CHANGE_TYPE.Deleted:
            break;
        case PEER_CHANGE_TYPE.Updated:
            break;
        default:
            break;
    }
}
応用例1(Viral Feed Web Serviceを使ったマッシュアップ

Viral Feed Web Serviceを使うと次のようなマッシュアップを実現することもできます。

1.Geocoding Block (キーワードから経度緯度の取得)
東京タワーの経度緯度を取得
2.Viral Feed Block (Viral Feedで扱うデータの取得)
東京タワー付近に注入されているフィード一覧を取得
3.RSS Block (RSSのパース)
東京タワー付近に注入されているフィード一覧のパース
4.Heart Rails Capture Block (WEBサイトのキャプチャ画像の取得)
東京タワー付近に注入されたフィードのアイテムWEBサイトのキャプチャ画像一覧を取得
5.Photo Sphere Block (画像一覧を球体表示させる)
東京タワー付近に注入されたフィードのアイテムWEBサイトのキャプチャ画像い一覧を表示

以上のマッシュアップ結果は下のようになります。

応用例2(Custom People Near Meを使ったNearby Twitterの実装)

(落ち着いたらまとめる予定?)

*1:ここでは本当に簡単な説明にとどめます。

*2:People Near Meについてはhttp://www.microsoft.com/japan/technet/network/p2p/pnm.mspxhttp://codezine.jp/a/article/aid/1300.aspxを参照。

*3:うまく説明できてないので後でうまくまとめ直す。

*4:この独自People Near Meの実装が本プロジェクトでもっとも苦労したところで今でもまだ懸案があります。。。