Facebook API搜索结果过滤器

时间:2012-05-06 22:33:29

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

我想允许我的应用中的用户按名称搜索他们朋友的人。

我知道我可以使用此查询对用户进行公开搜索:

search?q=mark&type=user

这为我提供了名为mark所有用户,并且与用户无关。

我使用它来按名称搜索 朋友的用户:

fql?q=
    SELECT uid, name, pic_square 
    FROM user 
    WHERE strpos(lower(name),lower('mark')) >=0 AND 
        uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

我会满足于允许用户使用以下内容搜索朋友的朋友:

fql?q=
    SELECT uid, name, pic_square 
    FROM user 
    WHERE strpos(lower(name),lower('mark')) >=0 AND 
        uid IN (SELECT uid2 
                FROM friend 
                WHERE uid1 IN (SELECT uid2 
                               FROM friend 
                               WHERE uid1 = me()))

但不幸的是,它返回以下错误:

{
"message": "(#604) Can't lookup all friends of #####. 
    Can only lookup for the logged in user or the logged in user's friends that 
    are users of your app.", 
"type": "OAuthException", 
"code": 604
}

我理解这个错误。看起来我将不得不使用公共搜索。

如何对所有与大学XXX关联且名称中包含“标记”的用户进行公开搜索?

或者是否有人可以通过与特定用户相关的内容过滤公共搜索?

1 个答案:

答案 0 :(得分:0)

这似乎有点工作......(它似乎只显示了一些朋友或朋友,我还没弄明白它是如何过滤它们的)

fql?q=
    SELECT uid, name 
    FROM user 
    WHERE strpos(lower(name),lower('mark')) >=0 AND 
        (uid IN (SELECT uid2 
                FROM friend 
                WHERE uid1 = me()) OR 
        (uid IN (SELECT uid2 
                FROM friend 
                WHERE uid1 IN (SELECT uid 
                                FROM user 
                                WHERE uid IN (SELECT uid2 
                                                FROM friend 
                                                WHERE uid1 = me()) AND 
                                                    is_app_user=1))))