ちょっと前に BuzzでFirehoseが使えるようになりました。
- Activity firehose - Developer's Guide (v1): Using REST - Google Buzz API - Google Code
- Working with real-time updates - Developer's Guide (v1): Using REST - Google Buzz API - Google Code
今の空うさぎでは、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を使って簡単にプロジェクトを構築します。
- $ mvn archetype:generate -DarchetypeCatalog=http://slim3.googlecode.com/svn/trunk/repository
- Projectの生成が対話形式で進むので、質問に従ってプロジェクト名などを入力
- $ cd ${プロジェクト名}
- $ mvn eclipse:eclipse
- Eclipseでインポートします。
BuzzのActivityを保存するモデルクラスを作成
今回はお試し程度なので、Atomの解析はせずにそのまま格納するようにします。
PubSubHubBub用のコントローラを作成
http://myapp.appspot.com/subscriber
というURLでPubSubHubBubをSubscribeすると想定して、それをハンドルするようにします。ここではSlim3のControllerを使います。
PubSubHubBubでSubscriberの登録をする
- 先の手順で作成したアプリケーションをデプロイします。
- http://pubsubhubbub.appspot.com/subscribeを開きます。
Callback: (the subscriber URL)
に、先に作成したSubscriberのURLを入力します。例えばhttp://myapp.appspot.com/subscriber
のようなURLになるはずです。Topic: (the feed URL)
に、https://www.googleapis.com/buzz/v1/activities/@all/@publicを入力します。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=...のようなログが出力されるはずです。
0 件のコメント:
コメントを投稿