2009年10月23日金曜日

mixiアプリについてのサルメモ3 Persistence API(永続化データ)について

Persistence API(永続化データ)について

・valueにマルチバイトが使えるようになったらしい(最初の頃はダメだった)。

・keyは大文字、小文字を区別するらしい。

・valueにHTMLタグを入れるとエスケープされるらしい。

・valueに禁止文字はないらしい。
確認した限りではカンマ、シングルクォーテーション、ダブルクォーテーション、セミコロンがダイジョブだった。

・keyに使える文字は英数字、アンダーバーのみ。記号、スペース、マルチバイトは不可。数字の「0」1文字だけもダメ。「00」はダイジョブ。

マルチバイトのバグがいつのまにか修正されて使いやすくなりました。HTMLタグのエスケープもXSSとか気にしないで済むので助かります。応答速度も悪くないです。

2009年8月7日金曜日

mixiアプリについてのサルメモ2

ユーザがマイアプリからアプリを削除してもPersistence APIで永続化したデータは消えないらしい。

ユーザがマイアプリからアプリを削除するとアクティビティは消えるらしい。
マイアプリにもう一度登録してもアクティビティは戻らないらしい。

Mini messageを使うにはGadget XMLに
<Require feature="minimessage" />
が必要。

2009年7月31日金曜日

mixiアプリについてのサルメモ

mixiアプリを作ることになったのでサルのための備忘録

●Contentタグのview属性でcanvas、home、profileを指定。

<Content type="html" view="canvas"><![CDATA[
ここに書いたHTMLがアプリ画面に表示される。
(アプリトップから「アプリを開く」で表示される画面)
]]></Content>

<Content type="html" view="home"><![CDATA[
ここに書いたHTMLがアプリオーナーのホーム画面に表示される。
]]></Content>

<Content type="html" view="profile"><![CDATA[
ここに書いたHTMLがアプリオーナーのプロフィール画面に表示される。
(オーナー以外の人が見るオーナーの画面)
]]></Content>


●キャッシュ防止のOptionalタグはModulePrefsタグ内に書く。
※mixiアプリではサポートしない。
http://developer.mixi.co.jp/news/2009081301

<ModulePrefs title="hoge">
<Optional feature="content-rewrite">
<Param name="expires">86400</Param>
<Param name="include-urls"></Param>
<Param name="exclude-urls">.*</Param>
</Optional>


●Ajaxはgadgets.io.makeRequestを使う。

jQueryで書くと下記のような感じだったのが

$.post("hogeURL",{fuga : 7},function(response){
$("#hogeDOM").html(response);
});


gadgets.io.makeRequestを使うと下記のようになる。

var params = {};
params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
var post_data = {fuga : 7};
params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(post_data);
gadgets.io.makeRequest("hogeURL", function(response) {
var feed = response.data;
$("#hogeDOM").html(feed);
},params);

2009年6月5日金曜日

Facebookアプリを作ってみたいサル FQL編

FQLとはFacebookアプリで使えるSQLライクなDSL(ドメイン固有言語)です。
ほぼSQLの文法でかけますがテーブル結合は出来ないっぽい。でもサブクエリは使える。

FQLについての公式wiki
サンプルFQL
http://wiki.developers.facebook.com/index.php/Sample_FQL_Queries
テーブル一覧
http://wiki.developers.facebook.com/index.php/FQL_Tables

公式wikiを読んでも欲しいデータがどこにあるのかわからないので実際にクエリを投げてテーブルの内容を確認してみた。
下記テーブル名とフィールド名。

*の付いたフィールドはインデックスあり。そしてWHERE区でインデックスのついたフィールドを指定しないと結果が返ってこないようです。

■テーブル名: album
*aid: アルバムID
*owner: アルバム所有者のユーザID
*cover_pid: アルバムの表紙になっている画像のpid
name: アルバムの名前
created: 作成時間 UNIXタイムスタンプ
modified: 更新時間 UNIXタイムスタンプ
description: 要約
location: 場所
size: アルバムに登録されている画像の数
link: アルバムのURL。http://www.facebook.com/album.php?aid=***&id=***
visible: アルバムの公開状況
modified_major: 最後にアルバムに写真の追加とかをしたときのUNIXタイムスタンプ

■テーブル名: photo
*pid: フォトID
*aid: アルバムID
owner: 画像所有者のユーザID
src_small: 小画像のURL
src_big: 大画像のURL
src: 画像URL
link: アルバムの中の画像を指定した状態のURL
caption:
created: UNIXタイムスタンプ
modified: UNIXタイムスタンプ

photoテーブルはownerにインデックスがないのでownerを指定した検索が出来ない!パフォーマンスを考慮してのことなんでしょうけどちょっと不便です。ownerを指定して検索するときは下記のようにサブクエリを使います。

ユーザIDを指定してphotoテーブルから画像URL一覧を取得するFQL
SELECT src FROM photo
WHERE aid IN (SELECT aid FROM album WHERE owner = $ユーザID)

■テーブル名: friend
*uid1: uid2と友達なユーザのID
*uid2: uid1と友達なユーザのID

SNSならではのテーブル。あるレコードのuid1とuid2が友達関係にあることを示します。
ユーザを指定してそのユーザの友達の名前一覧を取得するFQLはこんな感じ。
SELECT name FROM user
WHERE uid IN (SELECT uid1 FROM friend WHERE uid2 = $ユーザID)

■status
*uid: 投稿したユーザのユーザID
status_id:
time: 投稿した時刻のUNIXタイムスタンプ
source: 投稿に使われたアプリを表しているようだが???
message: 投稿内容

statusというテーブル名にだまされそうだけど「今なにをしていますか?」から投稿したコメントが入ってます。ユーザIDを指定してコメントを取り出します。

とりあえずこの辺で了。続きはそのうち。