お使いのブラウザは最新版ではありません。最新のブラウザでご覧ください。

Google Social Graph APIを徹底解剖

2008/02/28 14:35
  • このエントリーをはてなブックマークに追加

 今回は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で「レコメンドエンジン開発室」などの連載をしている。

  • このエントリーをはてなブックマークに追加
個人情報保護方針
利用規約
訂正
広告について
運営会社