从Java访问Facebook Graph API

时间:2014-05-20 19:10:57

标签: java facebook facebook-graph-api

我想编写一个Java程序,它运行Facebook图形搜索查询,例如“查找来自X市的所有人,他们喜欢Y”。

目前,我想获取有关页面Y的数据。

为此,我写了以下代码:

    final Facebook facebook = new FacebookFactory().getInstance();

    facebook.setOAuthAppId("...", "...");
    facebook.setOAuthAccessToken(new AccessToken("..."));
    final AccessToken oAuthAccessToken = facebook.getOAuthAccessToken();

    try {
        final ResponseList<Page> pages = facebook.searchPages("Costume jewelry");
        LOGGER.debug("oAuthAccessToken: " + oAuthAccessToken);
    } catch (FacebookException e) {
        LOGGER.error("", e);
    }

运行此代码时,我遇到以下异常:

22:56:38.405 [main] DEBUG f.internal.http.HttpResponseImpl - {"error":{"message":"Invalid OAuth access token.","type":"OAuthException","code":190}}

22:56:38.481 [main] ERROR c.a.f.FbCustomerProfiler - 
facebook4j.FacebookException: message - Invalid OAuth access token.
code - 190
Relevant information for error recovery can be found on the Facebook Developers Document:
    https://developers.facebook.com/docs/graph-api/using-graph-api/#errors

    at facebook4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:179) ~[facebook4j-core-2.1.0.jar:2.1.0]
    at facebook4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65) ~[facebook4j-core-2.1.0.jar:2.1.0]
    at facebook4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:93) ~[facebook4j-core-2.1.0.jar:2.1.0]
    at facebook4j.FacebookImpl.get(FacebookImpl.java:2584) ~[facebook4j-core-2.1.0.jar:2.1.0]
    at facebook4j.FacebookImpl.searchPages(FacebookImpl.java:2256) ~[facebook4j-core-2.1.0.jar:2.1.0]
    at facebook4j.FacebookImpl.searchPages(FacebookImpl.java:2251) ~[facebook4j-core-2.1.0.jar:2.1.0]
    at myproduct.FbCustomerProfiler.run(FbCustomerProfiler.java:32) [classes/:na]
    at myproduct.FbCustomerProfiler.main(FbCustomerProfiler.java:20) [classes/:na]
Disconnected from the target VM, address: '127.0.0.1:50651', transport: 'socket'

我从Facebook4J网站上获取了这些示例。我的代码与他们的代码之间的唯一区别是,在我的版本中,我不会调用facebook.setOAuthPermissions(commaSeparetedPermissions);

因此,我认为缺少权限是导致错误的原因。

我需要什么权限才能运行查询,该查询返回有关页面的数据(最重要的是 - 我可以在下一个查询中使用的页面ID)?

1 个答案:

答案 0 :(得分:1)

要搜索Pages,您需要根据Facebook文档传递App Access令牌:

https://developers.facebook.com/docs/graph-api/using-graph-api/v2.0#search

  

跨页面和放置对象进行搜索需要应用访问令牌。

您可以使用

{app_id}|{app_secret}

为此。

顺便说一下,你原来的问题“找到所有来自X市的人,谁喜欢Y”都行不通,因为你无法从FB那里查询这类信息。