FQLについて

詳しいことは Facebook Query Language (FQL) に書いてますので時間のある時にじっくり読んでおきましょう(←自分に言っている:笑)

前回の以下の部分がFQLを使用している個所に当たるわけですが、SQLをご存知の方なら説明の必要は無いですね。

$profile = $facebook->api(array(
  'method' => 'fql.query',
  'query' => 'SELECT id, name, url, pic, pic_square, pic_small, pic_big, type, username FROM profile WHERE id=me()',
));

ざっと注意点だけ箇条書きにしておきますと

  • profileテーブルからデータを取得します。profileテーブルの仕様はこちらに記述されています。
  • 取得するデータはカラム名を記述する必要があります。*(アスタリスク)は使えない模様。
  • me() はログインできている場合に使用できる関数で、ログインしているユーザのユーザIDとなります。
  • 戻り値は行データの配列となります。つまり1行分のデータが連想配列で取得できるようになっていて、その連想配列が普通の配列になっています。
  • 条件に合致するものが無ければ空配列 array() が返ってきます
  • 何かエラーが発生した場合は例外がthrowされる。例外オブジェクトは $e->getResult() で例外の内容を取得できます。var_dump すると以下のようなエラーコードとエラーメッセージが含まれた配列データとなっています。ただし、使用するAPIによってgetResult()で取得できる例外情報は異なるようです。FQLの例外は以下のようになっています。

var_dump($e->getResult()); の結果

array {
    ["error_code"]  => "601"
    ["error_msg"]   => "Parser error: unexpected 'a' at position 101."
    ["request_args"]=> array {
        [0]=> array {
            ["key"]  =>  "method"
            ["value"]=>  "fql.query"
        }
        [1]=> array {
            ["key"]  =>  "query"
            ["value"]=>  "SELECT id FROM profile WHERE id=a"
        }
        [2]=> array {
            ["key"]  =>  "api_key"
            ["value"]=>  "XXX"
        }
        [3]=> array {
            ["key"]  =>  "format"
            ["value"]=>  "json-strings"
        }
        [4]=> array {
            ["key"]  =>  "access_token"
            ["value"]=>  "XXX"
        }
    }
}