Google Social Graph APIを徹底解剖
Googleは世界中の様々なページをインデックスしている。通常は、各ページのテキストをインデックス化して、検索エンジンとしてそのデータを活用しているが、Social Graph APIは、これらのページのXFNもしくはFOAF情報をインデックスし、整形して出力する。
今回は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で「レコメンドエンジン開発室」などの連載をしている。
- 1人の推薦記事
- 2人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(0)
-
- タグ
- FOAF
- XFN
- Social Graph
- API
- 2日前のトップ記事
- 3日前
- 4日前
- 5日前
- 6日前
- ホワイトペーパー
- 話題のタグ
動画再生耐久レース―フル充電からどれだけ耐えた?
心当たりありませんか--あなたの上司がイヤがる5つの話し方
フォームデザイン虎の巻:複数の選択肢を提供する
フォトレポート:技術サポートの悪夢
無料の「Oracle Database XE」で高速バッチ処理:実装のポイント
Firefoxで情報をカンタン・ベンリに整理する
iPhone Safari、Acidテストでは高得点でも…… Firefoxは載らないの?:WebサイトのiPhone 3G対応問題を考える(ソフト編)
WebサイトのiPhone 3G対応問題を考える(ハード編)
フォトレポート:時代を振り返る--「MS-DOS 4」のインストール
SOAと仮想化の関係は?--常に進化を続けるBEAのミドルウェア戦略
ウェブ開発の生産性はどうしたら上がる?--MODIPHI Appsで半日で作るマッシュアップサイト(1)
JailBreakついに:PwnageTool公開
プロジェクトの進行でよくある4つのトラブル
DELLが掲げる「新・仮想化アセスメントサービス」
Techno Exchange
ZDNet Japan Green IT
ZDNet Japan ホスティング特集