2010年7月23日金曜日

PubSubHubBubを経由してBuzzのFirehoseを #appengine で使ってみる

ちょっと前に BuzzでFirehoseが使えるようになりました。

今の空うさぎでは、FriendFeedはリアルタイム(FriendsがPostした瞬間にクライアントに通知される)になっていますし、TwitterもUserStreamを使うことでFirendFeed同様にリアルタイムになっています(Twitter側の制限のために、リリース版ではTwitterのリアルタイムはオフになってますが)。さらに開発版ではGoogle Buzzも利用可能になっています。であればBuzzもリアルタイムに…!と思うんですが、これがTwitterやFriendFeedとはちょっと仕組みが違う。Webアプリでしか使えないようです。なので、AppEngineで受けてXMPP経由で空うさぎに送ってしまえないか?という事でPubSubHubBub を使ってAppEngine/JavaでBuzzのFirehoseを使ってみようかと、そんな流れです。
ここではまずはリアルタイムに取得されるBuzzのActivityをデータストアにどんどん保存するアプリを作ってみます。

まずAppEngine/Javaのプロジェクトを作る

slim3のarchetype-pluginを使って簡単にプロジェクトを構築します。

  1. $ mvn archetype:generate -DarchetypeCatalog=http://slim3.googlecode.com/svn/trunk/repository
  2. Projectの生成が対話形式で進むので、質問に従ってプロジェクト名などを入力
  3. $ cd ${プロジェクト名}
  4. $ mvn eclipse:eclipse
  5. Eclipseでインポートします。

BuzzのActivityを保存するモデルクラスを作成

今回はお試し程度なので、Atomの解析はせずにそのまま格納するようにします。

PubSubHubBub用のコントローラを作成

http://myapp.appspot.com/subscriberというURLでPubSubHubBubをSubscribeすると想定して、それをハンドルするようにします。ここではSlim3のControllerを使います。

PubSubHubBubでSubscriberの登録をする

  1. 先の手順で作成したアプリケーションをデプロイします。
  2. http://pubsubhubbub.appspot.com/subscribeを開きます。
  3. Callback: (the subscriber URL)に、先に作成したSubscriberのURLを入力します。例えばhttp://myapp.appspot.com/subscriberのようなURLになるはずです。
  4. Topic: (the feed URL)に、https://www.googleapis.com/buzz/v1/activities/@all/@publicを入力します。
  5. Do itをクリックします。

登録処理が問題なくAppEngineの管理コンソールのINFOレベルのログを見ると、subscribe: hub.challenge=...のようなログが出力されるはずです。

どんどん流れてきます

AppEngineの管理コンソールでall requestログを見るとどんどんリクエストが飛んできている事が確認できます。DatastoreViewerの"buzz"カインドにはどんどんエンティティが増えていきます。こんなカンジでfirehoseが使えます。が、恐ろしい勢いでデータがたまっていくのでちょっと怖いですね。

PubSubHubBubからSubscriberの登録を解除する

登録した時の手順と同様に、Callback: (the subscriber URL)Topic: (the feed URL)を入力して、Mode:Unsubscribeを設定して、Do itをクリックします。問題なくUnsubscribeができればAppEngineの管理コンソールのINFOレベルのログを見ると、unsubscribe: hub.challenge=...のようなログが出力されるはずです。

コメントを投稿