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を指定してコメントを取り出します。

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

0 件のコメント: