我必须开发一个自动流程来获取我的Facebook页面洞察力。因为,用于身份验证的Access令牌本质上是临时的。因此,我创建了一个Facebook应用程序,并通过提供所有必需的权限,我生成了一个页面访问令牌,以便我可以延长它的寿命。 参考链接:Java + RestFB API: Getting fresh Page Access Token without messing with AppID, appSecret
以下是我的代码:
FacebookClient fb=new DefaultFacebookClient(accesstoken,Version.VERSION_2_7);
Connection<Insight> insights =fb.fetchConnection("119456244790112/insights", Insight.class,Parameter.with("since", "2016-08-01"),Parameter.with("until", "2016-08-27"));
for (Insight insight : insights.getData())
if(insight.getName().equals("page_impressions") && (insight.getPeriod().equals("day")) )
System.out.println(insight.getName()+"\t"+insight.getPeriod()+"\t"+insight.getValues());
'accesstoken'是通过遵循上述链接获得的短命页面访问令牌。
以下是我得到的异常堆栈:
线程“main”中的异常 com.restfb.exception.FacebookOAuthException:收到Facebook错误 OAuthException类型的响应:无效查询(代码3001,子代码 1504028)在 com.restfb.DefaultFacebookClient $ DefaultGraphFacebookExceptionMapper.exceptionForTypeAndMessage(DefaultFacebookClient.java:1191) 在 com.restfb.DefaultFacebookClient.throwFacebookResponseStatusExceptionIfNecessary(DefaultFacebookClient.java:1117) 在 com.restfb.DefaultFacebookClient.makeRequestAndProcessResponse(DefaultFacebookClient.java:1058) 在 com.restfb.DefaultFacebookClient.makeRequest(DefaultFacebookClient.java:969) 在 com.restfb.DefaultFacebookClient.makeRequest(DefaultFacebookClient.java:931) 在 com.restfb.DefaultFacebookClient.fetchConnection(DefaultFacebookClient.java:356) 在Main.main(Main.java:31)
请帮助我使用页面访问令牌查找页面洞察,从而延长其使用寿命,以便我可以自行生成一个自动化流程。谢谢!
答案 0 :(得分:0)
你在一个问题中提出了两个问题。
扩展访问令牌: 首先,您需要用户访问令牌。然后扩展它(检查RestFB手册:http://restfb.com/documentation/#access-token-extend)并从/ me / accounts获取页面的页面访问令牌。页面访问令牌具有无限的生命周期。
OAuthException: 如果查看异常的错误消息,您应该会看到该指标丢失。你需要告诉Facebook你想得到什么指标。有关有效指标,请参阅图表API参考:https://developers.facebook.com/docs/graph-api/reference/v2.7/insights
答案 1 :(得分:0)
最后,我成功地使用具有延长寿命的“页面访问令牌”来提取Page Insights数据。
以下是向Facebook提出相应请求的代码段:
Connection<Insight> insights =fbclient.fetchConnection("1388062484542431/insights/page_views/day", Insight.class,Parameter.with("since", "2016-08-01"),Parameter.with("until", "2016-08-30"));
如果需要传递多个度量标准,那么我们可以通过传递所需度量标准的逗号分隔名称来实现。
感谢。