首页 文章

Facebook 'Friends.getAppUsers'使用Graph API

提问于
浏览
87

我有一个应用程序使用旧的REST API调用 Friends.getAppUsers 来获取已授权我的应用程序的当前用户的朋友列表 .

我已阅读文档,如何使用Graph API执行此操作?这样的例子是什么?

8 回答

  • 119

    我搜索了一会儿,我也认为使用Graph API是不可能的 .

    但是,我发布了一个类似的问题Replacement for old GetAppUsers call to see a user's friends who use my application?,用于我正在使用的特定API,并给出了一个很好的一般答案 .

    https://graph.facebook.com/me/friends?fields=installed
    

    或更一般地说

    https://graph.facebook.com/{user id}/friends?fields=installed
    

    这将返回所有朋友,并为使用该应用程序的朋友提供附加字段“installed = true” .

    这是在Graph API Explorer中工作:

  • 4

    这可以使用FQL完成 .

    SELECT uid FROM user
    WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
    AND is_app_user = 1
    

    QED!

  • 27

    是的,Graph API记录非常糟糕 . 我没有看到"application" type的任何文档,但它们确实在文档中引用了应用程序的信息:

    https://graph.facebook.com/2439131959

    那么,也许您可以使用Group语法获取应用程序的成员?

    https://graph.facebook.com/2439131959/members

    您需要一个经过身份验证的会话来测试它 . 否则,看起来Facebook正在推动我们使用FQL直接发送查询:

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

    您可以通过获取https://api.facebook.com/method/fql.query?query=QUERY来执行FQL查询 . 您可以使用format query参数将响应格式指定为XML或JSON .

    因此,您可以传递FQL查询以获取有关应用程序的信息 .

  • 8

    旧的REST API:

    $facebook->api_client->friends_getAppUsers();
    

    新图API:

    $facebook->api(array('method' => 'friends.getAppUsers'));
    
  • 6

    我在这个问题上做了很多调查 . 据我所知,没有办法使用Graph API做 Friends.getAppUsers . Facebook提供的最新SDK都使用旧的REST API来吸引使用该应用程序的朋友 .

  • 5

    使用restFB,我做了以下(感谢Igy / Alex的指导) . 请注意,如果安装了用户,Facebook会返回一个朋友ID数组,其中"installed" = true(如可以看到here) .

    首先扩展User类,添加 installed 字段:

    import com.restfb.Facebook;
    import com.restfb.types.User;
    
    public class InstalledUser extends User {
    
        @Facebook
        private boolean installed;
    
        public InstalledUser() {        
        }
    
        public boolean getInsatlled() {
            return installed;
        }
    }
    

    接下来,使用DefaultFacebookClient:

    FacebookClient facebook = new DefaultFacebookClient(pFacebookAccessToken);
    Connection<InstalledUser> installedFacebookUsers = facebook.fetchConnection("/" + pFacebookId + "/friends", InstalledUser.class, Parameter.with("fields", "installed"));        
    for (List<InstalledUser> friends : installedFacebookUsers) {
        for (InstalledUser friend : friends) {
            if (friend.getInsatlled()) {
                // Add friend.getId() to a list of ID, or whatever
            }
        }
    }
    
  • 1

    解决方法是自己进行过滤 . 据推测,您拥有在您自己的数据库中注册应用程序的用户的所有uid . 首先获取所有用户的朋友的uid,然后从数据库中选择具有匹配uid的用户 .

    新的Facebook Graph API程序似乎执行得很差,并没有经过深思熟虑 . 看来他们急于在成熟之前将其发布为Facebook f8,之前可用的许多功能都缺失了 .

  • 0

    您仍然可以在新的Graph API中调用旧的REST API . 这是完全有效的 .

    另一种方法是使用FQL来获取应用程序用户的朋友 .

    我不确定是否有办法只使用Graph API .

相关问题