MySpaceの「PersistenceAPI」をいじっていたのですが、OpenSocialの仕様通りにコードを打ってもうまく動作してくれなく憤慨していましたw で、色々調べていたら、いくつかクセのような物が分かってきたのでメモ代わりに公開しておきます。(他のコンテナで起きるかは未検証)
- newUpdatePersonAppDataRequestにはJSONで渡さないとエラー
- getId()の戻り値は’myspace.com:’+ユーザーIDだが、、
getData()で取得した配列のキーは、ユーザーIDのみ - 保存できる1レコードの最大長は1,024byteまで
■その1 newUpdatePersonAppDataRequestにはJSONで渡さないとエラー
以下のコードだとうまくいくのですが、
valueに代入する値を、文字列や数値にしたとたんエラーになります。
globalErrorがtrueになり、「ちゃんとしたJSONで渡してくれないとダメなんだから!」と怒られてしまいました。
![]()
クリックで拡大します
サーバへ格納される時に文字列へ、呼び出す時にJSONオブジェクトへ変換する過程を自動でやってくれているのですが、知らないとはまります(^^; 後は日本語などを利用する時はちゃんとエンコード(encodeURIComponent)するっていうのはMySpaceだけではないので割愛。
■その2 getId()の戻り値は’myspace.com:’+ユーザーIDだが、getData()で取得した配列のキーは、ユーザーIDのみ
以下はうまくいくコードです。
ポイントは次の行。
'myspace.com:'を削除してやると、配列のキーとして利用できます。
viewer.getId().replace('myspace.com:', '');実はメソッドとか用意されてるのかなぁ。これだとかなり気持ち悪いもんなぁ・・・。
■その3 保存できる1レコードの最大長は1,024byte
これは、以前HackathonでMySpaceの中の方は言ってらしたので知ってたのですが(^^; 念のため実験してみました。
![]()
クリックで拡大します
JSONの文法上書いている文字も対象となります。{'a':123}でいうと {} '' : などの記号ですね。変数名は対象とならないようです。将来的に拡張されるかも?
ちなみに、日本語などを格納する場合は事前にencodeURIComponentなどでエンコードしておく必要があるのですが、エンコード後の文字列長(バイト数)が対象となる点に注意。つまり、以下のようなコードを書いてしまうと大変なことに(;´∀`)
getByte関数についてはコチラ。JavaScriptのlengthは「文字数」をカウントしてしまうのでバイト数を求めたい場合には使用しません。
ちょっとはっきりしないのですが、2レコードを作成する場合、それぞれのレコードが1kbyte以下であれば保存できるようです(調査中)
※補足。console.logはFireBugのAPIです。また「OpenSocial入門」を全体的に参照させていただいています。
技術評論社
売り上げランキング: 7276


コメント (2)
私も MySpace と他コンテナの差が気になり、その差を埋めようと試行錯誤しています。
↓私が気が付いている点です。
http://code.google.com/p/opensocial-jquery/wiki/CrossContainer
ユーザIDの myspace.com: の除去というアイディアは使わせてもらいます。貴重な情報ありがとうございます。
投稿者: なかじまん | 2009年02月25日 06:58
日時: 2009年02月25日 06:58
>なかじまんさん
訪問ありがとうございます。
クロスコンテナ難しいですよね(^^; ケータイでサイト作ってるのかってくらい悲しい気持になってきますw
またURLもありがとうございます。参考にさせていただきます!
投稿者: かつべ | 2009年02月25日 13:56
日時: 2009年02月25日 13:56