使用 Facebook Javascript SDK 获取图形数据

Posted

技术标签:

【中文标题】使用 Facebook Javascript SDK 获取图形数据【英文标题】:Using Facebook Javascript SDK to get Graph Data 【发布时间】:2011-10-01 10:49:48 【问题描述】:

现已修复!但我还不能回答我自己的问题。请参阅下面的评论。并感谢您的帮助。


我已经搜索和搜索并阅读了文档,但仍然无法弄清楚。

我有一个关于活动的网页。我的活动还有一个公开的 Facebook“活动”。我正在尝试使用 FB javascript SDK 来获取 Facebook 活动的参与者数量,并将其添加到通过网站注册的人数中。

我已经创建了一个应用程序,并且我有一个 appID 和秘密字符串。我可以从以下位置获取访问令牌:

https://graph.facebook.com/oauth/access_token?client_id=XXXX&client_secret=XXXXX&grant_type=client_credentials

然后我可以使用该访问令牌来获取公共活动的参与者:

https://graph.facebook.com/331218348435/attending?access_token=XXXXXXXXX

没关系。

我现在正在尝试使用 Javascript SDK 做同样的事情。

我已经加载了 SDK 并进行了初始化:

FB.init(
  appId  : 'XXXXXXXX',
  status : true, // check login status
  cookie : true, // enable cookies to allow the server to access the session
  xfbml  : true  // parse XFBML
);

而且我知道 SDK 正在工作,因为我可以获得一个包含不需要访问令牌的数据的对象:

FB.api( '/331218348435', function (response)  console.log ( response )  );

但是当我尝试获取需要访问令牌的与会者数据时:

FB.api( '/331218348435/attending', function (response)  console.log ( response )  );

我收到 OAuthException:“请求此资源需要访问令牌。”

我能找到的所有教程和资料都是指使用 .login 方法,但我不希望用户登录,我想使用我的应用 ID 登录,无需任何用户交互。

当我调用 .init 方法时,我假设 API 接受了 SDK 的初始化请求并授予了我一个访问令牌,身份验证是针对我的网站地址(HTTP 引荐来源网址 - 是的,我已将我的网站 URL 设置为Facebook 应用设置)。

任何想法可能导致这不起作用?如何在不执行 .login 的情况下使用 Javascript SDK 获取访问令牌?我错过了一步吗?这甚至可能吗?

谢谢

【问题讨论】:

我不确定这个。原因可能是您无权访问参加活动的用户。 好的,这个问题现在已经解决了,但是因为我是 *** 新手,所以我无法回答自己的问题。看起来 Facebook 所说的需要“几分钟”的设置更改实际上需要一个多小时,但现在一切正常。感谢您的帮助! 【参考方案1】:

形成相当循环的文档所说的,获取参与提要需要一个“通用 access_token”。在 Facebook 中:

任何有效的 access_token 我们的 API 返回的任何有效访问令牌。例如,如果访问令牌已过期,则访问令牌可能无效。不需要特殊权限。有时,这被称为通用 access_token。

因此,这意味着只要活动是公开的,您就可以使用任何您喜欢的令牌来访问参加的订阅源。最容易获得的访问令牌似乎是应用令牌:http://developers.facebook.com/docs/authentication/#applogin。您只需使用您的 App ID 和 Secret 即可获取此令牌,无需用户交互。

总结链接内容:您可以通过发送 GET 请求来获取应用程序访问令牌

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials 

然后您可以使用该 access_token 为您的参加列表拨打电话

FB.api('MyEvent/attending?access_token=ACCESS_TOKEN');

【讨论】:

谢谢你,这很有帮助,但我已经探索过了。我真的不想将我的 client_secret 放在 Javascript 中有人可以阅读的地方。正如我所说,我假设身份验证是由 SDK 处理的;也就是说,当我调用 init() 时,它会获取我的应用 ID 和 HTTP 引荐来源网址,将引荐来源网址与我创建的应用的设置进行比较,并为我生成一个访问令牌,然后由 SDK 管理。 如果您担心在 JavaScript 中暴露您的秘密,您可以使用 php 在服务器上执行相同的图形调用并将 access_token 传递给 JavaScript。【参考方案2】:

哦。好的。

嗯,不管出于什么原因,我出去吃晚饭,回来时一切正常。

当我更新我的应用程序的设置时,Facebook 表示更改可能需要几分钟才能绕过服务器。结果花了一个多小时!

我的代码很好。

感谢您的帮助。

【讨论】:

以上是关于使用 Facebook Javascript SDK 获取图形数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript SDK 为 Web 登录 Facebook

JavaScript登录后使用Facebook API

没有应用程序的 Facebook-javascript-sdk

连接到 Facebook 聊天的 Javascript 库

使用 Facebook Javascript SDK 获取图形数据

javascript 使用NodeJS保护Facebook Graph API调用