ID-Blogger

Google Friend Connectわかったことメモ

半年位前からテスト的に導入していたGoogle Friend Connectなんですが、Webサイトのログインシステムに統合したりといろいろ面白い使い方もできるみたいなので、単純にガジェットを貼る事から一歩進んだ使い方を研究してみました。

詳しくはGoogle Friend Connect API - Google Codeにいろいろ載ってますが、意外と資料が少なく難儀したのでわかった事をメモを残しておきます。


Google Friend Connect JavaScript API

ガジェットを使うと単純にコピペするだけでいいので手軽なんですが、iframeタグでロックされるので自分のWebサイトのコンテンツに内包はできません。

HTMLページに埋め込んで自分のWebサイトのコンテンツの一部として統合するにはGFC JS APIを使ったやり方があります。この解説ページの通りに作るとあっという間にこんなページが出来ます。実際にやってみましたが結構簡単に作れますw
もっと頑張るとこんなページまで出来るようです。

さらに詳しい仕様はGoogle Friend Connect じゃなくてOpenSocial - Google Codeの方を読めという事らしいです。このOpenSocialの解説サイトでそのままドキュメントを読みに行くと英語のページに飛ばされます。ヒドイ...
というワケでドキュメントを読みたい場合はOpenSocial API ドキュメント - OpenSocial - Google Codeからどうぞ。
リンクは貼ってあるみたいなんですが、ジャンプ先に日本語ドキュメントがナイと勝手に英語ページに飛ばされるのでご注意!


OpenSocial REST/RPC プロトコル

JavaScriptじゃなくてPHPなんかに取り込みたい場合は、OpenSocial REST/RPC プロトコルを使います。
とりあえずやったことのあるRESTでテスト。

PHPからリクエスト投げてfopenで開いてxml_parserでXMLパーサーして返って来たデータを解析するみたいな仕組みを作ってみました。
基本的には以下の形式でリクエストします。

  • http://www.google.com/friendconnect/api/エンドポイント/参照データ?パラメーター&fcauthパラメーター

Google Friend ConnectのRESTで使えるAPIエンドポイントは以下の3つ。

  • http://www.google.com/friendconnect/api/people/
  • http://www.google.com/friendconnect/api/activities/
  • http://www.google.com/friendconnect/api/appdata/


大事なのがfcauthのパラメーター。

Google Friend Connectで設置サイトにサインインした状態だと、サイトのドメインに「fcauth + 自分のサイトID」という名前のCookieが置かれます。
例えば「fcauth0000000000 」みたいなカンジになるので、PHPなら$_COOKIE["fcauth0000000000 "]でデータを抜き出します。
かなり長いデータが出てきますね...

APIエンドポイントに投げるリクエストにfcauth=抜き出したfcauthデータのパラメーターを付けないとエラーで返事が返って来ませんでした。


次に通常パラメーター。

OpenSocial REST プロトコル仕様「6.5 Standard Query Parameters」の所にちょこちょこ書いてあります。

とりあえず今回使ったのは「format={format}」のパラメーターです。
何も指定しないとJSON形式でデータが返ってくるので、XMLパーサーする都合上format=xmlという風にしました。

「fields={-join|,|field}」というのも試してみましたが「fields=urls」でメンバーのプロフィールURLを取り出すのしか成功しませんでした。
Google Friend Connectでは対応してないのかな?


参照データについては「@me/@self/@friends/@owner」とかあるみたいです。
この辺とエンドポイントを組み合わせて返ってくるデータの種類を変更します。
使い方はOpenSocial REST プロトコル仕様「6. The Core OpenSocial Service Types」の所に書いてあります。

返ってくるデータの内容としては例えば以下の様なものがありました。

  • サイト名
  • サイトURL
  • ユーザー名
  • ユーザーID
  • ユーザー画像
  • ユーザープロフィールURL

とりあえずわかった組合せは以下の様なカンジ。

  • people/@me [ユーザーの情報]
  • people/@me/@self [ユーザーの情報]
  • people/@me/@friends [ユーザーの友達一覧]
  • people/@owner [空白データ?]
  • people/@owner/@friends [サイトのメンバー一覧]
  • people/ユーザーID [指定ユーザーの情報]
  • people/ユーザーID/@friends [指定ユーザーの友達一覧]
  • activities/@me [ユーザーのサイト内活動履歴?]
  • activities/@owner/@friends [メンバーのサイト内活動履歴]


以上を踏まえて例えば「サイトのメンバー一覧」のデータを取り出す場合は下記の様なリクエストを生成して投げ込みます。

  • http://www.google.com/friendconnect/api/people/@owner/@friends?format=xml&fields=about_me,profile_url,urls,accounts&fcauth=抜き出したfcauthデータ


ユーザーのサインイン無しにRESTするにはtwo-legged OAuthを使わないとダメみたいです。
PHP用のOAuthライブラリを試してみたのですが残念ながらウチのサーバーがPHP4までで、ライブラリがPHP5じゃないとダメらしいので断念いたしました。


Google Friend Connectの気になる点

諸々テストをしていくつか気になった点について。

  1. iPhone等モバイルで使いにくい
    GFC一応使えますがサインイン画面なんかのサイズが適性じゃない上にコントロール不能。Google Friend Connect Developer Forumの方でも一応話は出てるみたいです。
  2. JavaScriptバージョン対応によって使用不能
    Ajaxなんで当たり前なんでしょうがブラウザというかデバイスによって使用できません。PSPでサイト閲覧に来るユーザーが居るんですよ...