【问题标题】:Facebook 'Friends.getAppUsers' using Graph APIFacebook 'Friends.getAppUsers' 使用 Graph API
【发布时间】:2011-02-16 14:59:42
【问题描述】:

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

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

【问题讨论】:

    标签: facebook facebook-graph-api facebook-friends


    【解决方案1】:

    我搜索了一段时间,我也认为使用 Graph API 是不可能的。

    但是,我针对我正在使用的特定 API 发布了一个类似的问题,Replacement for old GetAppUsers call to see a user's friends who use my application?,并得到了一个很好的通用答案。

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

    或更一般地

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

    这将返回所有朋友,并为使用该应用程序的朋友添加额外字段“installed=true”。

    这是在Graph API Explorer

    【讨论】:

    • 是的;我用这个答案回答了你的问题:facebook.stackoverflow.com/questions/7956639/…
    • 此查询会检查哪个应用程序的安装?
    • 假设您没有使用任何其他字段(例如电子邮件、生日等),为了完整起见使用/me/friends?fields=id,name,installed,它保留字段顺序和不带@ 返回的标准信息987654327@ 正在定义(2012 年 12 月 5 日为真)。
    • 在撰写本文时,此查询返回所有朋友(即使installed 不正确)。我们需要手动检查每个用户是否存在installed字段。
    • 是的,这是正确的,我已经编辑了答案,以明确你得到所有朋友,你必须检查哪些人有已安装的标志。
    【解决方案2】:

    旧的 REST API:

    $facebook->api_client->friends_getAppUsers();
    

    新的图形 API:

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

    【讨论】:

    • 这个 SDK 方法调用在底层使用了旧的 rest api。这不是图形 api :-(
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      解决方法是自己进行过滤。大概,您拥有所有已注册您的应用程序的用户的 uid,它们都位于您自己的数据库中。所以首先获取所有用户好友的 uid,然后从你的数据库中选择具有匹配 uid 的用户。

      新的 Facebook Graph API 程序似乎执行得很差,也没有经过深思熟虑。似乎他们在它成熟之前急于为Facebook f8 发布它,并且缺少许多以前可用的功能。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 这已经很老了,不再是正确的答案。在顶部查看 Alex 的答案。
        • 这可能不是正确的答案,但它是 OP 的答案,显然比将正确答案标记为正确要好,因为自我。
        【解决方案6】:

        使用restFB,我做了以下事情(感谢 Igy / Alex 的指导)。请注意,如果用户已安装,Facebook 会返回一组好友 ID,其中“已安装”=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
                }
            }
        }
        

        【讨论】:

          【解决方案7】:

          这可以通过 FQL 完成。

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

          QED!

          【讨论】:

          • 我最初使用此查询,由于延迟,现在我只是通过图形 api 获取所有朋友,然后在我的应用程序端进行过滤。
          • 你能提供更多关于延迟的细节吗?查询是否需要很长时间才能响应?我一直在用一个有大约 300 多个朋友的 FB 帐户进行测试,响应时间只有几秒钟(2 到 4 秒),这在 IMO 中还不错。
          • 是的,这就是我所看到的。图形 API 大约需要 500 毫秒才能返回 400 多个朋友,所以我更喜欢将它们全部获取,然后在我这边进行过滤。
          • 你也可以用me()代替?
          【解决方案8】:

          是的,Graph API 已非常记录在案。我没有看到任何有关“应用程序”type 的文档,但它们确实在文档中引用了应用程序的信息:

          https://graph.facebook.com/2439131959

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

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

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

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

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

          因此您可以通过 FQL 查询来获取有关您的应用程序的信息。

          【讨论】:

          • 呃。似乎轻切换到图形 api 更像是我原本希望的头痛。
          • 使用 FQL 完成所需的一切(发布除外)可能更容易。 Graph API 在最坏的情况下不会为您提供所需的一切,在最好的情况下,会让您很难找到如何做到这一点。
          猜你喜欢
          • 2017-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多