今回はGoogle Social Graph APIについて解説します。Google Social Graph APIの概要は、下記を参考にしてください。
http://code.google.com/apis/socialgraph/
まず、Google Social Graph APIとは何か?についてです。
Googleは、それこそ世界中の様々なページをインデックスしています。通常は、各ページのテキストをインデックス化して、検索エンジンとしてそのデータを活用していますが、Google Social Graph APIは、これらのページのXFN(XHTML Friends Network)もしくはFOAF(Friend Of A Friend)情報を利用します。
まずXFNとFOAFについてですが、これはどちらもソーシャルネットワークのリンク情報についての表現です。
XFNは、microformatsと呼ばれる形式でソーシャルネットワークのリンク情報を表現しています。microformatsとは、XML(XHTML)のタグにメタデータを付加するためのものです。XFNでは、microformatsのうちrel="..."を利用して、例えば「zaki」のようにリンク情報を表現します。
これは、http://twitter.com/zakiで表現される人が友人である、ということを表現しています(表現している、という約束になっています)。
XFNの1.1としては、他にもacquaintance, friend, met, co-workerなどたくさんの関係が定義されています。詳しくはhttp://gmpg.org/xfn/11を参照してください。
またこれらは複数記述することもできます。たとえばzakiなどです。
FOAFは、RDF形式でソーシャルネットワークのリンク情報を表現します。FOAFのフォーマットの詳細についてはここでは割愛しますが、興味のある人は下記のURLから辿れる情報などを参照してみてください。
http://ja.wikipedia.org/wiki/Friend_of_a_Friend
Google Social Graph APIは、このXFN、FOAF情報をインデックスし、整形して出力するためのAPIです。
どうせGoogleは山ほどのページをインデックスする(している)のですから、検索のインデックスの他にこのような情報も提供してしまおう、というのは中々効率の良い発想だと思います。
一つ注意すべき点は、これらの情報はダイナミックに取得されるのではなく、検索インデックス同様にクローリングされてインデックスされるため、即時反映されるものではないということです。
例えば友人関係を表現するページを記述して公開しても、それがGoogleに取り込まれてGoogle Social Graph APIで出力されるようになるにはタイムラグがあります(そもそも取り込まれないかもしれません)。
逆に言えば、Google Social Graph APIで出力されるのは、Googleがすでに取り込んでインデックスしているXFNもしくはFOAF情報だ、ということになります。
API Documentaionには、Google Social Graph APIの仕様が解説してあります。まずこのAPIのURLですが、「URL format」に項にあるように
http://socialgraph.apis.google.com/lookup?
となります。実際にはこのURLの後ろにパラメータを付けてクエリーを送ると結果が返ってきます。
試しに下記のURLをブラウザで送信してみてください。
http://socialgraph.apis.google.com/lookup?q=http://twitter.com/zaki&pretty=1
すると下記のようなJSONの出力がブラウザに表示されます。
{ "canonical_mapping": { "http://twitter.com/zaki": "http://twitter.com/zaki" }, "nodes": { "http://twitter.com/zaki": { "attributes": { "url": "http://twitter.com/zaki", "profile": "http://twitter.com/zaki", "rss": "http://twitter.com/statuses/user_timeline/zaki.rss", "atom": "http://twitter.com/statuses/user_timeline/zaki.atom" } } } }
送信したクエリーの「q=http://twitter.com/zaki」の部分が、リンク情報を取得する基点のURLです。
Twitterは全てのリンク情報(follow情報)のページにXFNを埋め込んでいますので、Google Social Graph APIで取り出すことができます(インデックスされている限りは)。
また、「pretty=1」というのは、人間が読み易いフォーマットで出力せよ、という意味です。ためしにpretty=1を付けないクエリーを送信すると、結果のJSONは一行で返されます。
これはJavaScriptでparseするには問題ないですが、ひどく読みづらいでしょう。他にもAPI Documentaionのページを見ると、edo、edi、fme、callback、sgnなどのパラメータがあります。
edoは、その基点(ノード)から外に出ているリンク(エッジ)情報の出力指示です。先程のクエリーにedo=1を付けてみましょう。
http://socialgraph.apis.google.com/lookup?q=http://twitter.com/zaki&pretty=1&edo=1
結果は以下の通りです。
{ "canonical_mapping": { "http://twitter.com/zaki": "http://twitter.com/zaki" }, "nodes": { "http://twitter.com/zaki": { "attributes": { "url": "http://twitter.com/zaki", "profile": "http://twitter.com/zaki", "rss": "http://twitter.com/statuses/user_timeline/zaki.rss", "atom": "http://twitter.com/statuses/user_timeline/zaki.atom" }, "nodes_referenced": { } } } }
。。。おかしいですね。
私は(この原稿を執筆している時点で)7人のFollowingがいるので、その7つが出てきても良さそうです。うまくGoogleにXFN情報がインデックスされていないのかもしれません。
違うTwitterのユーザで試してみます。
アスキー、So-net、ライブドアなどでシステム設計、構築、運用を行う。2003年9月にシリコンバレーにVoIPの開発会社であるRedSIP Inc.を設立、CEO就任。2006年6月にゼロスタートコミュニケーションズを設立、代表取締役社長就任。Software Designで「レコメンドエンジン開発室」などの連載をしている。
CNET Japanの記事を毎朝メールでまとめ読み(無料)
ものづくりの革新と社会課題の解決
ニコンが描く「人と機械が共創する社会」
ZDNET×マイクロソフトが贈る特別企画
今、必要な戦略的セキュリティとガバナンス