2010年12月12日

Google Buzz で ActivityStreams

google-api-python-client を使うと Google Buzz のデータを簡単に取得できます。 「Buzz なんか使ってないよ!!」という人は多いかもしれませんが、あんまりそういうことは気にしません。 現在の Buzz の一番良いところは ActivityStreams を簡単に扱えることです。 たぶん。

色々と試験的な段階ですが、Data API を使って 自分で実装 (Google アカウントでのログインと、Buzz への認可が必要) してみることもできます。 表示するとこんな感じになります。

ライブラリのインストールなどは 少し前の記事 で書いた通りです。

ActivityStreams ??

本家の説明から拝借すると「Web におけるソーシャルアクティビティを配信する形式」です。

a format for syndicating social activities around the web

「ソーシャル」とか「アクティビティ」とか、よくわかんないけど今風な感じですね。 Facebook, MySpace, Windows Live, あと Google Buzz などで使われています。 シンジケーションからシンジケートを思いついて麻薬組織などを連想してしまうとアレな感じですが、 Web においては RSS や Atom に代表されるデータ配信と似たものです。

Atom を拡張する

Atom のコア部分だけでもたいがいのテキストデータを配信できますが、「誰がどこで何をした?」という部分に弱い印象があります。 Atom の atom:entry のデータ構造はざっくりと次のようになります。

feed
 +-- entry
      +-- title
      +-- summary
      +-- content
      +-- author
      +-- link

ActivityStreams はこれに次のように要素を追加します。

feed
 +-- entry
      +-- title
      +-- summary
      +-- content
      +-- author
      +-- link
      +-- activity:verb
      +-- activity:object
           +-- activity:object-type
           +-- source

verb は動作、 object は「誰が」「どこで」「何を」などを表します。 文書 (document) の情報だけでなく、人々の活動 (data) を表現できることが単純な Atom との違いだと言えます。

activity:verbactivity:object の仕様は Atom Activity Base Schema (Draft) に記載されています。

activity:verb には次の動詞を使えます。

Mark as Favorite, Start Following, Mark as Liked, Make Friend, Join, Play, Post, Save, Share, Tag, Update

activity:object には次の名詞を使えます。

Article, Audio, Bookmark, Comment, File, Folder, Group, List, Note, Person, Photo, Photo Album, Place, Playlist, Product, Review, Service, Status, Video

それぞれの英語を日本語で表現してみると次のような雰囲気でしょうか。

activity:verb
お気に入りに追加した、言動に注目し始めた、賛成した、友達になった、 参加した、やってみた、投稿した、保存した、共有した、タグを付けた、更新した
activity:object
記事、音楽、ブックマーク、コメント、ファイル、フォルダー、グループ、リスト、ノート、人物 写真、写真アルバム、場所、音楽再生リスト、製品、レビュー、サービス、状態、ビデオ

ブラウザに表示する

ActivityStreams のデータ形式は Atom 拡張として定義されていますが、JSON 表現も検討されています。 Google のクライアントライブラリを使うとデータ形式の違いを吸収できますので、JSON で扱います。 たとえば、jQuery を使って JavaScript で次のように記述すると、 <li> 要素でレンダリングできます。 なお、 buzz-sample という自前のエンドポイントで Google Buzz からの ActivityStreams データをプロキシさせている想定です。

var screen = $("#activitylist");

$.getJSON("buzz-sample?user=me", function(activitylist) {
    if (!activitylist.items) return;
    for (i in activitylist.items) {
        (function(item, wait) {
            var li = $("<li></li>");
            li.html(item['object'].content);
            li.append($("<br/>"));
            li.append($("<a></a>",
                {href: item['object'].links.alternate[0].href})
                    .text(item.source.title));
            li.append($("<span></span>").text(" | "));
            li.append($("<a></a>",
                {href: item.actor.profileUrl, className: "aux"})
                    .text(item.actor.name));
            li.hide();
            li.appendTo(screen);
            setTimeout(function() { li.fadeIn(2000); }, wait);
         }(activitylist.items[i], 500 * i));
    }
});

もう少し詳しいスクリプトは こちら に。

終わりに

ということで、ActivityStreams を活用できるようになると単なるブログ記事をフィードで配信するだけでなく、 書いてる途中にどんな音楽を聞いて、途中でブックマークに何を追加して、誰と話して、何をメモに記録して... なんていうことが可能になるのではないかな、と思います。

対応するサービスが増えて利用が簡単になってくると嬉しいんじゃないかなーと。

コメントを投稿