2012年4月18日水曜日

FQLを使ってFacebookのユーザデータ取得

  • このエントリーをはてなブックマークに追加

会社のお仕事でたまにFBアプリを作ることがある。
大体そういう時はGraph APIを使って処理をする形にしてるんだけど、
今回のアプリは女性をランダムに5人とかそういった感じ。
だからそういう場合はFQLの方がAPI叩く数も少ないし処理も楽だったりする。
ということでいくつかサンプルを載せておく。


そもそものFQLの使い方

require_once('facebook.php');

$app_id = "アプリのID";
$app_secret = "アプリのシークレットキー";

$facebook = new Facebook(array(
  'appId'  => $app_id,
  'secret' => $app_secret,
  'fileUpload' => true
));
$user = $facebook->getUser();

if(!$user){
  //アプリにログイン出来ていない場合はこちらの処理
  //自動的にログイン画面に飛ばす
  $param = array(
    'scope' => $scope
  );
  $url = $facebook->getLoginUrl($param);
  echo "<script type='text/javascript'>top.location.href = '$url';</script>";
}
else{
  //アプリにログイン出来てるとこちらの処理
  $fql = "FQLをこちらに記述";
  $data = $facebook->api(array(
    "method" => "fql.query",
    "query" => $fql;
  ));
}

上記のような感じで$dataの中に記述したデータが入る。


Graph APIのmeと同じデータを取得

SELECT name FROM profile WHERE id = me()

nameにidとかuidとか色々と入れてあげれば色々取れる。
むしろ全部取りたかったら*を入れるとか。


女性(男性)をランダムに5人抽出

SELECT uid,name,sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND sex IN ('female') ORDER BY rand() LIMIT 5
  • sex IN ('female')をsex IN ('male')に変更すると男性に変更。
  • ORDER BY rand()をuidに変更するとユーザID順に変更。(普通のSQL文と同様)
  • LIMIT 5を任意の数字に変更すれば数も変更。

アプリを使っていない人抽出

SELECT name,sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = {$app_id} AND is_app_user IN ('1')

いいねを押したFBページ抽出

SELECT page_id,name,fan_count,page_url FROM page WHERE page_id IN (SELECT uid, page_id FROM page_fan WHERE uid = me()) ORDER BY fan_count

facebookにログインしてる人抽出

SELECT uid,name FROM user WHERE online_presence IN ('active', 'idle') AND uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

ということで実は中々便利だったり。
特に今まで$facebook->api()で取得して、
その後PHPで色々と処理をしなかった部分を出来る限り減らす事が可能。
とはいっても自分が作るアプリではあまり必要ではなかったりもしたり。

Adsense