山崎徳之(ゼロスタートコミュニケーションズ)
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で「レコメンドエンジン開発室」などの連載をしている。
あなたがプログラムを理解できない10の理由:第2回
ケータイとPCの検索における5つの違い
M1、F1はもう古い--より深いターゲット分析がプランを変える
Yahoo!とGoogleだけでは不十分? モバイルSEOの対象検索エンジン
オンラインマーケティングの最重要課題
内部統制対策を実現するIT運用管理ツール
-Simplify IT- ITをシンプルに 連載第2回
[特集] Windows Vista SP1搭載の最新PCラインアップ
[特集]2008年春 ビデオカメラフルラインナップ
[レビュー]一番小さなホームシアター--パイオニア、サラウンドヘッドホン「SE-DRS3000C」
顔認識の発展とひと味違うモデルの台頭--コンパクトデジタルカメラの動向を探る
楽しさで選ぶか、個性を取るか?--デジタル一眼レフカメラ お薦めモデル
デザインで選ぶか、個性を取るか?--コンパクトデジタルカメラお薦めモデル
流行は手ブレ補正からライブビューへ--デジタル一眼レフカメラの動向を探る
文字入力でネットを操るインターネットマシン--ソフトバンクモバイル「Internet Machine SoftBank 922SH」
今週の新製品総チェック:「PRADA Phone」がついに日本上陸