Facebook App用户列表

时间:2011-04-11 14:45:06

标签: facebook facebook-graph-api facebook-fql

我对Facebook API相当新。我想得到一个我的朋友列表,他们也安装了我的应用程序。 (你可以随便与他们一起开始游戏)。

这给出了我的朋友列表:

FB.api('/me/friends', ...

这提供了我的应用信息:

FB.api('/myappid', ...

我想要的是“我的朋友也安装了这个应用程序”

我认为可能是这样的:

FB.api('/myappid/accounts', ...

我希望这至少会给我的开发人员,管理员或测试人员,但没有这样的运气。     http://developers.facebook.com/docs/test_users/     http://developers.facebook.com/docs/ApplicationSecurity/

我的感觉可能是我必须使用FQL来委托一个类似

的查询
(psuedocode)
SELECT
FROM my_friends
WHERE uid IN (
    SELECT uid
    FROM app_users
    WHERE appid = myappid
)

非常感谢任何建议。

注意,我看过这篇文章: FaceBook app: retrieve list of ids of my application's users

我保留了属于我网站的Facebook用户ID的本地列表,我实际上可以通过执行以下操作来实现我的目标,但我确信必须有更好的方法:

$facebookFriendIds = array();
$friends = $this->facebook->api('/me/friends');
foreach ($friends['data'] as $friend) {
    $facebookFriendIds[] = $friend['id'];
}

$this->friends = Doctrine_Core::getTable('User')->createQuery()
    ->whereIn('fb_user_id', $facebookFriendIds)
    ->execute();

2 个答案:

答案 0 :(得分:9)

这是我相信FQL查询

$facebook->api(array('method' => 'fql.query', 'query' => "SELECT uid FROM user WHERE is_app_user = '1' AND uid IN (SELECT uid2 FROM friend WHERE uid1 = '" . $user_id . "');"));

(我使用java和JS API,因此语法可能不完全正确)

用户和朋友查询的文档在这里:

http://developers.facebook.com/docs/reference/fql/user/

http://developers.facebook.com/docs/reference/fql/friend/

答案 1 :(得分:1)

在JS中使用此查询

function getAppFriends()
{

    var fql = "SELECT uid, name, pic_square, is_app_user 
               FROM user 
               WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) 
               OR uid IN(SELECT uid1 FROM friend WHERE uid2=me()) 
               ORDER BY  name";

    var query = FB.Data.query(fql);

    query.wait(function(responseFromFb){

       if(responseFromFb!=null){

           // Read the responseFromFb and check for 
           // is_app_user = true and list them out the way 
           // you want to.

       }

    });// anonymus function closes here
} //function ends here