【问题标题】:Java Read Facebook WallJava 阅读 Facebook 墙
【发布时间】:2015-03-15 01:17:53
【问题描述】:

我正在使用 Java 构建一个 Web 门户;除了其他要求之外,我还在苦苦思索一个非常简单(至少在第一眼看来)的要求: 我的客户希望在他的门户网站上发布他的 facebook 墙的前 N ​​个帖子 他想阅读他推特页面的前 N ​​条推文

由于我的java代码是基于Spring的,我想使用spring social、spring social twitter和spring social facebook来满足需求

在推特上我没问题;其实我

  • 在 Twitter 上创建了一个应用程序
  • 获得了 twitter 应用 ID 和应用密码
  • 准备好的代码

几个小时后,一切都很好

问题是从 facebook 开始的,我经常和它斗争 我从 spring social 转到了 facebook4j(因为最后一个在我看来更强大)。 我做了以下

  • 在 FB 上创建了一个应用程序
  • 获得了 facebook appId 和 appSecret
  • 告诉代码我需要 read_stream 权限
  • 准备好代码

但我无法阅读墙上的帖子 有没有人能够满足这种情况? 这是我的 facebook4j 代码

private static final Logger log = LoggerFactory.getLogger(FacebookTest.class.getName());
public static void main (String[] a)
{
    try
    {
        ConfigurationBuilder cfgBui = new ConfigurationBuilder();
        cfgBui.setDebugEnabled(true);
        cfgBui.setOAuthAppId(myAppId);
        cfgBui.setOAuthAppSecret(myAppSecret);
        cfgBui.setUseSSL(true);
        Configuration cfg = cfgBui.build();
        FacebookFactory ff = new FacebookFactory(cfg);
        OAuthSupport support = new OAuthAuthorization(cfg);
        support.setOAuthPermissions("read_stream");
        AccessToken appAccessToken = support.getOAuthAppAccessToken();
        Facebook face = ff.getInstance(appAccessToken );
        ResponseList<Post> posts = face.searchPosts("test");
        for (Post post : posts)
        {
            System.out.println(post.getId());
        }
    } catch (Exception e)
    {
        log.error("Errore", e);
    }
}

据我了解,我应该需要用户访问令牌,但我不知道如何生成它;我应该创建一个登录流程并向用户显示 FB 登录对话框吗?如果是这样,我为什么要创建应用程序 ID 和应用程序密码?他们在我的场景中没有意义 此外......在我的情况下......服务器端应该在FB上进行身份验证并从众所周知的用户墙(我的客户的墙......)阅读帖子所以......我应该在哪里显示登录对话框? FB登录后应该重定向到哪里?

有没有好心人 :) 谁能给我解释一下 FB 阅读帖子的流程?

【问题讨论】:

    标签: java facebook facebook-graph-api spring-social


    【解决方案1】:

    您必须使用其中一种可能性来授权用户(使用 read_stream)才能访问他的流。这是所有可能性的链接:https://developers.facebook.com/docs/facebook-login/v2.2

    您还可以使用 Graph API Explorer 生成访问令牌:https://developers.facebook.com/tools/explorer/

    有关访问令牌及其生成方法的详细信息,请参见以下链接:

    请记住,扩展用户令牌仅持续 60 天,之后您的客户必须手动刷新它。通常,出于商业原因,您不得使用用户配置文件,而且在网站上显示用户流是非常不寻常的。

    更好:使用 Facebook 页面。 /page-id/feed 带有一个永久有效的扩展页面令牌。

    【讨论】:

    • 感谢您的回答;所以无论如何用 facebook 都不足以获取 appId 和 appSecretId;我们总是(或在需要时)应该记录并生成用户访问令牌......我对 Facebook 页面的想法很感兴趣,但我不知道它是如何工作的......我会尝试调查。
    【解决方案2】:

    如果您使用spring-social-facebook,您可以让用户通过(前端登录流程)登录,然后您可以访问用户墙。但是,用户需要登录并授权您的应用才能执行这些操作。

    这是一个 spring social 示例项目,演示了 spring-social-facebook 登录是如何完成的https://github.com/spring-projects/spring-social-samples

    此外,在您的 java 代码中,您可以使用 feedoperations 来收集有关 home feed 的信息并对其进行查询。查看文档。

        facebook.feedOperations().
    

    【讨论】:

    • 谢谢 Paul,我已经看过春季社交样本和 feedOperations;可悲的是,正如我之前所说,我不喜欢的是我总是应该登录才能获得用户令牌。我会尝试使用 PageOperations,尽管我没有看到任何读取页面提要的方法
    • @AngeloImmediata 页面操作适用于 facebook 页面。在您的情况下,您正在寻找用户帖子到他们的墙上,对吗?
    • 是的,你是对的;我需要在我的客户网站上显示最后 X 个帖子(我知道这可能很奇怪……但这是我客户的要求 :))
    • 嗨...我还在和FB打架;我需要阅读我的墙贴;如何在 Spring FacebookTemplate 中设置 read_stream 权限?
    • @AngeloImmediata 当您从 dev.facebook 生成您的 facebook 应用程序访问令牌时,您应该选择 read_stream 权限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多